mysql查询

8.13 查询

1.为列指定别名(AS),也可以不使用。(列与别名之间用空格隔开)(不使用AS,用空格隔开也可以)

SELECT empno AS 工号 , ename AS 姓名 , job AS 岗位 , sal AS 薪水 FROM emp ;

2.使用DISTINCT可以剔除查询结果中的重复行(以行为单位看重复嘛)(DISTINCT必须跟在SELECT之后)

-- 使用 DISTINCT 可以剔除查询结果中的 "重复行"
SELECT DISTINCT deptno FROM emp;
SELECT DISTINCT deptno,job FROM emp;

3.处理空值

-- 查询emp表中所有员工的工号、姓名、岗位、薪水、提成,如果员工没有提出则显示 '无'
SELECT empono ,ename,job,sal,IFNULL(comm,'无')AS comm FROM emp;

4.数据过滤

  • WHERE子句

  • 比较运算符

    • = 两者是否相等

    • != 或者<> 不等于

      -- 查询不在10部门工作的员工信息
      SELECT * FROM emp WHERE deptno != 10 ;
      SELECT empno , ename , job , deptno FROM emp WHERE deptno <> 10 ;
    • 表示大于>

      -- 统计月薪大于2000的员工工号、姓名、岗位、薪水
      SELECT empno , ename , job , sal
          -> FROM emp
          -> WHERE sal > 2000 ;
      ​
    • 大于等于>=

    • 小于 <

    • 小于等于<=

      -- 查询月薪不低于1500、不高于2000的员工信息
      SELECT empno , ename , job , sal FROM emp WHERE sal >= 1500 AND sal <= 2000 ;
      -- 更加优化的写法 ,用between and
      SELECT empno , ename , job , sal FROM emp WHERE sal BETWEEN 1500 AND 2000 ;

5.sql运算符(mysql中的默认转义字符为)

  • is null 和 is not null 用法(,不能用=null判断是否为空,应该用is null判断)

     -- 查询提成为空的员工信息
    SELECT * FROM emp WHERE comm IS NULL ;
     -- 哪些员工的提成不是空
     SELECT * FROM emp WHERE comm IS NOT NULL ;
  • in用于匹配列表中的任意值

     -- 查询在 10  或 20  或 30 部门工作的员工信息
     SELECT empno , ename , deptno
        -> FROM emp
        -> WHERE deptno IN (10,20,30);
  • between...and....(between之后的数字要小于and之后的值,不能颠倒 )

    -- 查询月薪不低于1500、不高于2000的员工信息
    SELECT empno , ename , job , sal FROM emp WHERE sal BETWEEN 1500 AND 2000 ;
  • like模糊查询

    • 默认采用%匹配任意多个字符

      -- 查询 ename 中包含 字母 o 的员工信息
      SELECT empno , ename FROM emp WHERE ename LIKE '%O%' ;
    • 默认采用_匹配任意单个字符

      -- 查询ename第三个字母是o的员工信息
      SELECT empno , ename FROM emp WHERE ename LIKE '__o%' ;
      -- 显示 ename 中第二个字母是下划线的员工信息,mysql中的默认转义字符为\
      SELECT empno , ename FROM emp WHERE ename LIKE '_\_%' 
      -- 使用 escape 来显式定义转义字符
       SELECT empno , ename FROM emp WHERE ename LIKE '_$_%' ESCAPE '$' ;
       -- 尝试使用 单引号 作转义字符
       -- 成对的单引号总是表示字符串边界,如果在字符串中需要出现单个单引号,只需要将单引号写两次即可
       SELECT empno , ename FROM emp WHERE ename LIKE '_''_%' ESCAPE '''' ;
      ​
      -- 让数据四舍五入的函数round()
      SELECT deptno , job , round( avg(sal) )
          -> FROM emp
          -> WHERE deptno IS NOT NULL
          -> GROUP BY deptno , job ;
      -- GROUP BY 要跟在WHERE的后面。上面这段代码的执行顺序,先FROM,后WHERE,再GROUP BY,最后再是SELECT.

6 逻辑运算符(他们的优先级not>and>or)

  • not 逻辑取反

  • and 逻辑与

  • or 逻辑或

7 数据分组

  • 常用组函数或者聚合函数

    • max最大值

    • min最小值

    • avg平均值

    • sum求和

    • count

      -- 用于统计非空行数-- 统计提成不为空的员工个数
      SELECT count(comm) FROM emp ;
  • GROUP BY子句实现分组查询

    -- 统计emp表中各部门的最低工资、最高工资、平均工资
    SELECT deptno , min(sal) , max(sal) , avg(sal)
        -> FROM emp
        -> GROUP BY deptno ;
    -- 在 select 语句之后出现的列,除非使用了组函数处理,否则它必须出现在 group by 之后
    -- 但是 group by 之后出现的列不时必须要书写在 select 之后
     SELECT  min(sal) , max(sal) , avg(sal)
        ->  FROM emp
        ->  GROUP BY deptno ;
  • 使用HAVING 子句实现数据筛选(在筛选完后还要满足条件)

    -- 统计平均工资高于2000的部门信息
    SELECT deptno , avg(sal) AS avgsal
        -> FROM emp
        -> WHERE deptno IS NOT NULL
        -> GROUP BY deptno
        -> HAVING avgsal > 2000 ;
    -- HAVING 之后尽量别使用别名,在MYSQL中也许可以执行,在oracle中是不行的,为了养成良好的编程习惯,尽量不使用别名,写的的组函数或者原名。
    -- 在where子句中不能使用组函数
     SELECT deptno , avg(sal) AS avgsal
        -> FROM emp
        -> WHERE deptno IS NOT NULL AND avgsal > 2000
        -> GROUP BY deptno ;
        ERROR 1054 (42S22): Unknown column 'avgsal' in 'where clause'
    -- 在where子句中可以使用单行函数
        WHERE empno > 9900

8.数据排序

  • ORDER BY 子句实现数据排序

    -- 升序排列
    -- 查询emp表中所有员工的工号、姓名、岗位、薪水,按照工号升序排列
    SELECT empno , ename , job , sal FROM emp ORDER BY empno ASC ;
    -- 降序排列
    -- 查询emp表中所有员工的工号、姓名、岗位、薪水,按照工号降序排列
     SELECT empno , ename , job , sal FROM emp ORDER BY empno DESC ;
    -- 用别名、列数、组合函数跟在 ORDER BY 之后也可以排序
    -- 查询emp表中所有员工的工号、姓名、岗位、薪水,按照薪水降序排列
     SELECT empno , ename , job , sal FROM emp ORDER BY sal DESC ;
     SELECT empno , ename , job , sal AS 月薪 FROM emp ORDER BY 月薪 DESC ;
     SELECT empno , ename , job , sal AS 月薪 FROM emp ORDER BY 4 DESC;
     SELECT empno ,ename , job , sal * 12 FROM emp ORDER BY sal * 12 ;
    -- 若有多个条件,用,隔开
    -- 查询emp表中所有员工的信息,按照月薪降序排列,如果月薪相同,则按照部门号再排序
    SELECT * FROM emp ORDER BY sal DESC, deptno DESC ;
    ​
    ​
    ​
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雷亚文

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值