zoukankan      html  css  js  c++  java
  • MySQL(入门)第一篇:基础查询、条件查询、排序查询、分组查询

    跟着尚硅谷视频重新开始学习复习,做个笔记+自我总结

    注释语法:

    单行注释# 或者--加空格(空格必须有)

    多行注释/* */

    查询

      基础查询

    /*
    select 查询列表 from 表名
    可以查表中字段/常量值/表达式/函数
    查询结果是虚拟表格。并不真实存在
    */
    
    # 查询一个字段
    SELECT last_name FROM employees;
    # 查询多个字段
    SELECT last_name, salary, email FROM employees;
    # 查询所有字段
    SELECT * FROM employees;
    
    # 查询常量值
    SELECT 100;
    SELECT 'john';
    SELECT 100%98;
    
    # 查询函数
    SELECT VERSION();
    
    # 起别名
    /*
    优点:便于理解;帮助区分重名字段
    */
    #方式一
    SELECT 100%98 AS 结果;
    SELECT last_name AS 姓, first_name AS 名 FROM `employees`;
    #方式二
    SELECT `last_name` 姓, `first_name` 名 FROM `employees`;
    #别名有空格或特殊字符加双引号
    SELECT `salary` AS "out put" FROM `employees`;
    
    # 去重:加关键字distinct
    SELECT DISTINCT `department_id` FROM `employees`;
    
    # +号作用:只是运算符
    # 要想拼接字段,用concat函数
    SELECT CONCAT(`last_name`, `first_name`) AS 姓名 FROM `employees`; 
    
    # 显示数据库结构
    DESC `departments`;

      条件查询

    # 条件表达式筛选:< > = != <> <= >=
    #工资>12000的员工信息
    SELECT
    	*
    FROM 
    	`employees`
    WHERE 
    	salary>12000;
    
    # 按逻辑运算符查询: and or not
    #查询工资在10000到20000之间的员工名、工资及奖金
    SELECT `last_name`, `salary`, `commission_pct`
    FROM `employees`
    WHERE salary>=10000 AND salary<=20000;
    
    # 模糊查询:
    /*
    like 和通配符搭配。%任意多个字符,_任意单个字符
    between and 包含临界值,顺序不能换
    in 
    is null
    */
    #员工名包含字符’a'的员工信息
    SELECT *
    FROM `employees`
    WHERE `last_name` LIKE '%a%';
    #查询员工编号在100到200间的员工信息
    SELECT *
    FROM `employees`
    WHERE `employee_id` BETWEEN 100 AND 200;
    #查询员工工种编号是PU_CLERK,ST_MAN,ST_CLERK中一个的员工名和工种编号
    SELECT `last_name`, `job_id`
    FROM `employees`
    WHERE job_id IN ('PU_CLERK', 'ST_MAN', 'ST_CLERK');
    #查询没有奖金的员工名和奖金率
    SELECT `last_name`, `commission_pct`
    FROM `employees`
    WHERE `commission_pct` IS NULL;
    #安全等于<=>
    #查询没有奖金的员工名和奖金率
    SELECT `last_name`, `commission_pct`
    FROM `employees`
    WHERE `commission_pct` <=> NULL;
    

      排序查询 

    /*
    语法:order by 排序列表 [asc(升序)|decs(降序)] 默认升序
    */
    #查询员工信息,工资由高到低排序
    SELECT * FROM `employees` ORDER BY salary DESC;
    
    #按表达式查询:按年薪高低显示员工信息和年薪
    SELECT *, salary*12*(1+IFNULL(`commission_pct`,0)) 年薪
    FROM `employees`
    ORDER BY 年薪 DESC;
    
    #查询员工信息,先按工资排序再按员工编号排序
    SELECT *
    FROM `employees`
    ORDER BY salary ASC, `employee_id` DESC;
    

      常见函数

    字符函数

    #length 获取参数值的字节个数
    SELECT LENGTH('john');
    #cancat 拼接字符串 SELECT CONCAT(`last_name`, '_', `first_name`) 姓名 FROM `employees`;
    #upper lower 改变字符串大小写 SELECT CONCAT(UPPER(`last_name`), LOWER(`first_name`)) 姓名 FROM `employees`;
    #substr/substring 截取字符串 注:索引从1开始,截取从指定索引处指定字符长度的字符 SELECT SUBSTR("今天天气可真好", 1, 2);
    #instr 返回子串第一次出现索引,不存在返回0
    #trim 去除前后空格,或前后指定字符 SELECT TRIM('a' FROM 'aaaaaaaa刘诗诗aaaaaaaaaaaaa');
    #lpad 用指定字符实现左填充指定长度 SELECT LPAD('刘诗诗', 10, '*') AS out_put;
    #rpad 用指定字符实现右填充指定长度
    #repalce 替换

    数学函数

    #round 四舍五入
    select round(1.55); #2
    select round(1.567, 2); #1.57小数点后保留两位
    #roll 向上取整:返回大于等于参数的最小整数
    #floor 向下取整
    #truncate 截断 select truncate(1.68,1) #mod 取余

    日期函数

    #now 返回当前系统日期时间
    #curdate 返回当前系统日期,不包含时间
    #curtime 返回当前系统时间,不包含日期
    #可以获取指定部分,年、月、日、小时、分钟、秒 SELECT YEAR(NOW()); SELECT MONTH(NOW()); SELECT MONTHNAME(NOW());
    #str_to_date 将日期格式字符转换成指定格式
    #date_format 将日期转换成字符

      补充:日期格式

     流程控制函数

    #if函数
    SELECT IF(10>5, '大', '小');
    
    #case函数
    #作用1,switch case效果
    SELECT salary, `department_id`,
    CASE `department_id`
    WHEN 30 THEN salary*1.1
    WHEN 40 THEN salary*1.2
    WHEN 50 THEN salary*1.3
    ELSE salary
    END AS 新工资
    FROM `employees`;
    #作用2,类似多重if
    SELECT salary,
    CASE
    WHEN salary>20000 THEN 'A'
    WHEN salary>15000 THEN 'B'
    WHEN salary>10000 THEN 'C'
    ELSE 'D'
    END AS 工资级别
    FROM `employees`;
    

    分组函数

    /*
    用于统计实用,也称为聚合函数
    sum求和,avg平均值,max最大值,min最小值,count计算个数
    */
    
    #简单使用
    SELECT SUM(salary) FROM `employees`;
    
    #参数支持类型:sum,avg数值类型;max,min,count任何类型
    #都忽略null
    #可以和distinct搭配使用
    SELECT SUM(DISTINCT salary) FROM `employees`;
    
    #count使用
    SELECT COUNT(*) FROM `employees`;#查询总行数
    SELECT COUNT(1) FROM `employees`;#添加一列全是1后查询此列1个数也就是查询总行数
    
    #和分组函数一同查询字段有限制,要求是group by后字段
    

      分组查询

    /*
    语法:
    	select 分组函数,列(要求出现在group by的后面)
    	from 表
    	【where 筛选条件】
    	group by 分组的列表
    	【order by 子句】
    	【having 复杂条件】
    */
    
    # 简单分组
    #查询每个工种最高工资
    SELECT MAX(salary), job_id
    FROM `employees`
    GROUP BY `job_id`;
    #查询每个位置上的部门个数
    SELECT COUNT(*), `location_id`
    FROM `departments`
    GROUP BY `location_id`;
    
    # 添加筛选条件
    #查询邮箱中包含字符a的每个部门的平均工资
    SELECT AVG(salary), `department_id`
    FROM `employees`
    WHERE email LIKE ('%a%')
    GROUP BY `department_id`;
    
    # 添加复杂筛选条件
    #查询哪个部门员工个数大于2
    SELECT COUNT(*),`department_id`
    FROM `employees`
    GROUP BY `department_id`
    HAVING COUNT(*)>2;
    
    # 按表达式分组
    #按员工姓名的长度分组,查看每一组员工个数,筛选员工个数大于5的
    SELECT COUNT(*),LENGTH(`last_name`)
    FROM `employees`
    GROUP BY LENGTH(`last_name`)
    HAVING COUNT(*)>5;
    
    # 按多个字段分组
    #查询每个部门每个工种的员工平均工资
    SELECT AVG(salary), `department_id`, `job_id`
    FROM `employees`
    GROUP BY `department_id`, `job_id`
    

      

  • 相关阅读:
    awk使用和详解
    Python【map、reduce、filter】内置函数使用说明
    virtualenv -- python虚拟沙盒
    python--threading多线程
    scrapy入门教程
    用两个栈实现队列
    重建二叉树
    从尾到头打印链表
    替换空格
    二维数组的查找
  • 原文地址:https://www.cnblogs.com/lunotebook/p/12757623.html
Copyright © 2011-2022 走看看