欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

mysql查询、排序、分组

程序员文章站 2022-11-30 18:00:54
查询语句简单的查询语句(DQL)语法格式:select 字段名1,字段名2,字段名3,… from 表名;mysql> select ENAME from emp;+--------+| ENAME |+--------+| SMITH || ALLEN || WARD || JONES || MARTIN || BLAKE || CLARK || SCOTT || KING || TURNER || ADAMS || JAMES ||...

查询语句

简单的查询语句(DQL)

语法格式:select 字段名1,字段名2,字段名3,… from 表名;

mysql> select ENAME from emp;
+--------+
| ENAME  |
+--------+
| SMITH  |
| ALLEN  |
| WARD   |
| JONES  |
| MARTIN |
| BLAKE  |
| CLARK  |
| SCOTT  |
| KING   |
| TURNER |
| ADAMS  |
| JAMES  |
| FORD   |
| MILLER |
+--------+
  • sql语句以;结尾

  • sql语句不区分大小写

    mysql> select ename,job from emp;
    +--------+-----------+
    | ename  | job       |
    +--------+-----------+
    | SMITH  | CLERK     |
    | ALLEN  | SALESMAN  |
    | WARD   | SALESMAN  |
    | JONES  | MANAGER   |
    | MARTIN | SALESMAN  |
    | BLAKE  | MANAGER   |
    | CLARK  | MANAGER   |
    | SCOTT  | ANALYST   |
    | KING   | PRESIDENT |
    | TURNER | SALESMAN  |
    | ADAMS  | CLERK     |
    | JAMES  | CLERK     |
    | FORD   | ANALYST   |
    | MILLER | CLERK     |
    +--------+-----------+
    
  • 查询员工的年薪(字段可以参与数学运算)

    mysql> select ename,sal * 12 from emp;
    +--------+----------+
    | ename  | sal * 12 |
    +--------+----------+
    | SMITH  |  9600.00 |
    | ALLEN  | 19200.00 |
    | WARD   | 15000.00 |
    | JONES  | 35700.00 |
    | MARTIN | 15000.00 |
    | BLAKE  | 34200.00 |
    | CLARK  | 29400.00 |
    | SCOTT  | 36000.00 |
    | KING   | 60000.00 |
    | TURNER | 18000.00 |
    | ADAMS  | 13200.00 |
    | JAMES  | 11400.00 |
    | FORD   | 36000.00 |
    | MILLER | 15600.00 |
    +--------+----------+  
    

    给查询结果的列重命名

    mysql> select ename,sal * 12 as yearsal from emp;
    +--------+----------+
    | ename  | yearsal  |
    +--------+----------+
    | SMITH  |  9600.00 |
    | ALLEN  | 19200.00 |
    | WARD   | 15000.00 |
    | JONES  | 35700.00 |
    | MARTIN | 15000.00 |
    | BLAKE  | 34200.00 |
    | CLARK  | 29400.00 |
    | SCOTT  | 36000.00 |
    | KING   | 60000.00 |
    | TURNER | 18000.00 |
    | ADAMS  | 13200.00 |
    | JAMES  | 11400.00 |
    | FORD   | 36000.00 |
    | MILLER | 15600.00 |
    

    别名中有中文

    mysql> select ename,sal * 12 as 年薪 from emp;
    +--------+----------+
    | ename  | 年薪     |
    +--------+----------+
    | SMITH  |  9600.00 |
    | ALLEN  | 19200.00 |
    | WARD   | 15000.00 |
    | JONES  | 35700.00 |
    | MARTIN | 15000.00 |
    | BLAKE  | 34200.00 |
    | CLARK  | 29400.00 |
    | SCOTT  | 36000.00 |
    | KING   | 60000.00 |
    | TURNER | 18000.00 |
    | ADAMS  | 13200.00 |
    | JAMES  | 11400.00 |
    | FORD   | 36000.00 |
    | MILLER | 15600.00 |
    +--------+----------+
    

    as关键字可以省略

    mysql> select ename,sal *12 '年薪' from emp;
    +--------+----------+
    | ename  | 年薪     |
    +--------+----------+
    | SMITH  |  9600.00 |
    | ALLEN  | 19200.00 |
    | WARD   | 15000.00 |
    | JONES  | 35700.00 |
    | MARTIN | 15000.00 |
    | BLAKE  | 34200.00 |
    | CLARK  | 29400.00 |
    | SCOTT  | 36000.00 |
    | KING   | 60000.00 |
    | TURNER | 18000.00 |
    | ADAMS  | 13200.00 |
    | JAMES  | 11400.00 |
    | FORD   | 36000.00 |
    | MILLER | 15600.00 |
    +--------+----------+
    
  • 查询所有字段

    select * from emp;//实际开发中不建议使用,效率较低
    

条件查询

语法格式 select字段,字段… from 表名 where 条件;

执行顺序:先from 然后where 最后select

  • 查询工资等于5000的员工姓名

    mysql> select ename from emp where sal = 5000;
    +-------+
    | ename |
    +-------+
    | KING  |
    +-------+
    
  • 查询SMITH的工资

    mysql> select sal from emp where ename = smith;
    ERROR 1054 (42S22): Unknown column 'smith' in 'where clause'
    
    mysql> select sal from emp where ename = SMITH;
    ERROR 1054 (42S22): Unknown column 'SMITH' in 'where clause'
    
    mysql> select sal from emp where ename = 'SMITH';
    +--------+
    | sal    |
    +--------+
    | 800.00 |
    +--------+
    
  • 找出工资高于3000的员工

    mysql> select ename, sal from emp where sal > 3000;
    +-------+---------+
    | ename | sal     |
    +-------+---------+
    | KING  | 5000.00 |
    +-------+---------+
    
  • 找出工资小于等于3000的员工

    mysql> select ename, sal from emp where sal <= 3000;
    +--------+---------+
    | ename  | sal     |
    +--------+---------+
    | SMITH  |  800.00 |
    | ALLEN  | 1600.00 |
    | WARD   | 1250.00 |
    | JONES  | 2975.00 |
    | MARTIN | 1250.00 |
    | BLAKE  | 2850.00 |
    | CLARK  | 2450.00 |
    | SCOTT  | 3000.00 |
    | TURNER | 1500.00 |
    | ADAMS  | 1100.00 |
    | JAMES  |  950.00 |
    | FORD   | 3000.00 |
    | MILLER | 1300.00 |
    +--------+---------+
    
  • 找出工资不等于3000的员工

    mysql> select ename,sal from emp where sal <> 3000;
    +--------+---------+
    | ename  | sal     |
    +--------+---------+
    | SMITH  |  800.00 |
    | ALLEN  | 1600.00 |
    | WARD   | 1250.00 |
    | JONES  | 2975.00 |
    | MARTIN | 1250.00 |
    | BLAKE  | 2850.00 |
    | CLARK  | 2450.00 |
    | KING   | 5000.00 |
    | TURNER | 1500.00 |
    | ADAMS  | 1100.00 |
    | JAMES  |  950.00 |
    | MILLER | 1300.00 |
    
  • 找出工资位于1000到3000之间的员工

    mysql> select ename, sal from emp where sal>= 1000 and sal <= 3000;
    +--------+---------+
    | ename  | sal     |
    +--------+---------+
    | ALLEN  | 1600.00 |
    | WARD   | 1250.00 |
    | JONES  | 2975.00 |
    | MARTIN | 1250.00 |
    | BLAKE  | 2850.00 |
    | CLARK  | 2450.00 |
    | SCOTT  | 3000.00 |
    | TURNER | 1500.00 |
    | ADAMS  | 1100.00 |
    | FORD   | 3000.00 |
    | MILLER | 1300.00 |
    +--------+---------+
    
    //闭区间
    mysql> select ename, sal from emp where sal between 1000 and 3000;
    +--------+---------+
    | ename  | sal     |
    +--------+---------+
    | ALLEN  | 1600.00 |
    | WARD   | 1250.00 |
    | JONES  | 2975.00 |
    | MARTIN | 1250.00 |
    | BLAKE  | 2850.00 |
    | CLARK  | 2450.00 |
    | SCOTT  | 3000.00 |
    | TURNER | 1500.00 |
    | ADAMS  | 1100.00 |
    | FORD   | 3000.00 |
    | MILLER | 1300.00 |
    +--------+---------+
    
  • 找出名字位首字母在A和C中的员工

    //左闭右开
    mysql>  select ename from emp where ename between 'A' and 'C';
    +-------+
    | ename |
    +-------+
    | ALLEN |
    | BLAKE |
    | ADAMS |
    +-------+
    
  • 找出津贴为NULL的员工

    mysql> select ename, sal ,comm from emp where comm is null;
    +--------+---------+------+
    | ename  | sal     | comm |
    +--------+---------+------+
    | SMITH  |  800.00 | NULL |
    | JONES  | 2975.00 | NULL |
    | BLAKE  | 2850.00 | NULL |
    | CLARK  | 2450.00 | NULL |
    | SCOTT  | 3000.00 | NULL |
    | KING   | 5000.00 | NULL |
    | ADAMS  | 1100.00 | NULL |
    | JAMES  |  950.00 | NULL |
    | FORD   | 3000.00 | NULL |
    | MILLER | 1300.00 | NULL |
    +--------+---------+------+
    
  • 找出津贴不为NULL的员工

    mysql> select ename, sal ,comm from emp where comm is not null;
    +--------+---------+---------+
    | ename  | sal     | comm    |
    +--------+---------+---------+
    | ALLEN  | 1600.00 |  300.00 |
    | WARD   | 1250.00 |  500.00 |
    | MARTIN | 1250.00 | 1400.00 |
    | TURNER | 1500.00 |    0.00 |
    +--------+---------+---------+
    
  • 找出没有津贴的员工(为NULL或者为0)

    mysql> select ename, sal, comm from emp where comm is null or comm = 0;
    +--------+---------+------+
    | ename  | sal     | comm |
    +--------+---------+------+
    | SMITH  |  800.00 | NULL |
    | JONES  | 2975.00 | NULL |
    | BLAKE  | 2850.00 | NULL |
    | CLARK  | 2450.00 | NULL |
    | SCOTT  | 3000.00 | NULL |
    | KING   | 5000.00 | NULL |
    | TURNER | 1500.00 | 0.00 |
    | ADAMS  | 1100.00 | NULL |
    | JAMES  |  950.00 | NULL |
    | FORD   | 3000.00 | NULL |
    | MILLER | 1300.00 | NULL |
    +--------+---------+------+
    
  • 找出工资高于1000并且部门编号为20或者30的员工

    //错误的 存在优先级
    mysql> select ename, sal, deptno from emp where sal >= 1000 and deptno = 20 or deptno = 30;
    +--------+---------+--------+
    | ename  | sal     | deptno |
    +--------+---------+--------+
    | ALLEN  | 1600.00 |     30 |
    | WARD   | 1250.00 |     30 |
    | JONES  | 2975.00 |     20 |
    | MARTIN | 1250.00 |     30 |
    | BLAKE  | 2850.00 |     30 |
    | SCOTT  | 3000.00 |     20 |
    | TURNER | 1500.00 |     30 |
    | ADAMS  | 1100.00 |     20 |
    | JAMES  |  950.00 |     30 |
    | FORD   | 3000.00 |     20 |
    +--------+---------+--------+
    
    mysql> select ename, sal, deptno from emp where sal >= 1000 and (deptno = 20 or deptno = 30);
    +--------+---------+--------+
    | ename  | sal     | deptno |
    +--------+---------+--------+
    | ALLEN  | 1600.00 |     30 |
    | WARD   | 1250.00 |     30 |
    | JONES  | 2975.00 |     20 |
    | MARTIN | 1250.00 |     30 |
    | BLAKE  | 2850.00 |     30 |
    | SCOTT  | 3000.00 |     20 |
    | TURNER | 1500.00 |     30 |
    | ADAMS  | 1100.00 |     20 |
    | FORD   | 3000.00 |     20 |
    +--------+---------+--------+
    
  • 找出工作岗位是MANAGER和SALESMAN的员工

    mysql> select ename, job from emp where job = 'MANAGER' or job = 'SALESMAN';
    +--------+----------+
    | ename  | job      |
    +--------+----------+
    | ALLEN  | SALESMAN |
    | WARD   | SALESMAN |
    | JONES  | MANAGER  |
    | MARTIN | SALESMAN |
    | BLAKE  | MANAGER  |
    | CLARK  | MANAGER  |
    | TURNER | SALESMAN |
    +--------+----------+
    
    mysql> select ename, job from emp where job in ('MANAGER', 'SALESMAN');
    +--------+----------+
    | ename  | job      |
    +--------+----------+
    | ALLEN  | SALESMAN |
    | WARD   | SALESMAN |
    | JONES  | MANAGER  |
    | MARTIN | SALESMAN |
    | BLAKE  | MANAGER  |
    | CLARK  | MANAGER  |
    | TURNER | SALESMAN |
    +--------+----------+
    

模糊查询 like

  • 找出名字中含有o的员工

    //%表示任意个字符
    mysql> select ename from emp where ename like '%o%';
    +-------+
    | ename |
    +-------+
    | JONES |
    | SCOTT |
    | FORD  |
    +-------+
    
  • 找出名字中第二个是’A’的员工

    //_表示一个字符
    mysql> select ename from emp where ename like '_A%';
    +--------+
    | ename  |
    +--------+
    | WARD   |
    | MARTIN |
    | JAMES  |
    +--------+
    
  • 找出名字中第三个是’A’的员工

    mysql> select ename from emp where ename like '__A%';
    +-------+
    | ename |
    +-------+
    | BLAKE |
    | CLARK |
    | ADAMS |
    +-------+
    
  • 找出名字中最后一个是’T’的员工

    mysql> select ename from emp where ename like '%T';
    +-------+
    | ename |
    +-------+
    | SCOTT |
    +-------+
    

排序(升序、降序)

  • 按照工资排序(默认是升序) 找出员工名和薪资

    mysql> select ename, sal from emp order by sal;
    +--------+---------+
    | ename  | sal     |
    +--------+---------+
    | SMITH  |  800.00 |
    | JAMES  |  950.00 |
    | ADAMS  | 1100.00 |
    | WARD   | 1250.00 |
    | MARTIN | 1250.00 |
    | MILLER | 1300.00 |
    | TURNER | 1500.00 |
    | ALLEN  | 1600.00 |
    | CLARK  | 2450.00 |
    | BLAKE  | 2850.00 |
    | JONES  | 2975.00 |
    | SCOTT  | 3000.00 |
    | FORD   | 3000.00 |
    | KING   | 5000.00 |
    +--------+---------+
    
  • asc表示升序

    mysql> select ename, sal from emp order by sal asc;
    +--------+---------+
    | ename  | sal     |
    +--------+---------+
    | SMITH  |  800.00 |
    | JAMES  |  950.00 |
    | ADAMS  | 1100.00 |
    | WARD   | 1250.00 |
    | MARTIN | 1250.00 |
    | MILLER | 1300.00 |
    | TURNER | 1500.00 |
    | ALLEN  | 1600.00 |
    | CLARK  | 2450.00 |
    | BLAKE  | 2850.00 |
    | JONES  | 2975.00 |
    | SCOTT  | 3000.00 |
    | FORD   | 3000.00 |
    | KING   | 5000.00 |
    +--------+---------+
    
  • desc表示降序

    mysql> select ename, sal from emp order by sal desc;
    +--------+---------+
    | ename  | sal     |
    +--------+---------+
    | KING   | 5000.00 |
    | SCOTT  | 3000.00 |
    | FORD   | 3000.00 |
    | JONES  | 2975.00 |
    | BLAKE  | 2850.00 |
    | CLARK  | 2450.00 |
    | ALLEN  | 1600.00 |
    | TURNER | 1500.00 |
    | MILLER | 1300.00 |
    | WARD   | 1250.00 |
    | MARTIN | 1250.00 |
    | ADAMS  | 1100.00 |
    | JAMES  |  950.00 |
    | SMITH  |  800.00 |
    +--------+---------+
    
  • 按工资降序排序 工资相同按名字升序排序

    //要靠前的字段越能起到主导作用 只有前面的字段无法完成排序时,即相同 才会启用后面的字段
    mysql> select ename, sal from emp order by sal desc, ename asc;
    +--------+---------+
    | ename  | sal     |
    +--------+---------+
    | KING   | 5000.00 |
    | FORD   | 3000.00 |
    | SCOTT  | 3000.00 |
    | JONES  | 2975.00 |
    | BLAKE  | 2850.00 |
    | CLARK  | 2450.00 |
    | ALLEN  | 1600.00 |
    | TURNER | 1500.00 |
    | MILLER | 1300.00 |
    | MARTIN | 1250.00 |
    | WARD   | 1250.00 |
    | ADAMS  | 1100.00 |
    | JAMES  |  950.00 |
    | SMITH  |  800.00 |
    +--------+---------+
    
  •   //按照第二列排序
      mysql> select ename, sal from emp order by 2;
      +--------+---------+
      | ename  | sal     |
      +--------+---------+
      | SMITH  |  800.00 |
      | JAMES  |  950.00 |
      | ADAMS  | 1100.00 |
      | WARD   | 1250.00 |
      | MARTIN | 1250.00 |
      | MILLER | 1300.00 |
      | TURNER | 1500.00 |
      | ALLEN  | 1600.00 |
      | CLARK  | 2450.00 |
      | BLAKE  | 2850.00 |
      | JONES  | 2975.00 |
      | SCOTT  | 3000.00 |
      | FORD   | 3000.00 |
      | KING   | 5000.00 |
      +--------+---------+
    
  • 找出工作岗位是’SALESMAN’的员工,并且按照工资的降序排序

    mysql> select ename, job, sal from emp where job = 'SALESMAN' order by sal desc;
    +--------+----------+---------+
    | ename  | job      | sal     |
    +--------+----------+---------+
    | ALLEN  | SALESMAN | 1600.00 |
    | TURNER | SALESMAN | 1500.00 |
    | WARD   | SALESMAN | 1250.00 |
    | MARTIN | SALESMAN | 1250.00 |
    +--------+----------+---------+
    
  • 执行顺序

    select
       xxx            3
    from
       tableName      1
    where
       条件            2
    order by
       ...            4
    

分组函数

多行处理函数 输入多行 输出一行

所有的分组函数都是对某一组数据进行操作的

count 计数

  • 找出总人数

    mysql> select count(*) from emp;
    +----------+
    | count(*) |
    +----------+
    |       14 |
    +----------+
    

sum 求和

  • 找出员工的工资总和

    mysql> select sum(sal) from emp;
    +----------+
    | sum(sal) |
    +----------+
    | 29025.00 |
    +----------+
    

avg 平均值

  • 找出平均工资

    mysql> select avg(sal) from emp;
    +-------------+
    | avg(sal)    |
    +-------------+
    | 2073.214286 |
    +-------------+
    

max 最大值

  • 找出最高工资

    mysql> select max(sal) from emp;
    +----------+
    | max(sal) |
    +----------+
    |  5000.00 |
    +----------+
    

min 最小值

  • 找出最低工资

    mysql> select min(sal) from emp;
    +----------+
    | min(sal) |
    +----------+
    |   800.00 |
    +----------+
    
  • 所有分组函数会自动忽略NULL

    mysql> select count(comm) from emp;
    +-------------+
    | count(comm) |
    +-------------+
    |           4 |
    +-------------+
    
  • 计算每个员工的年薪

    //有NULL参与运算 结果一定是NULL
    mysql> select ename, (sal + comm) * 12 as yearsal from emp;
    +--------+----------+
    | ename  | yearsal  |
    +--------+----------+
    | SMITH  |     NULL |
    | ALLEN  | 22800.00 |
    | WARD   | 21000.00 |
    | JONES  |     NULL |
    | MARTIN | 31800.00 |
    | BLAKE  |     NULL |
    | CLARK  |     NULL |
    | SCOTT  |     NULL |
    | KING   |     NULL |
    | TURNER | 18000.00 |
    | ADAMS  |     NULL |
    | JAMES  |     NULL |
    | FORD   |     NULL |
    | MILLER |     NULL |
    +--------+----------+
    
  • ifnull(可能为null的数据, 处理为什么值)

    //ifnull()属于单行处理函数 输入几行 输出几行
    mysql> select ename, (sal + ifnull(comm, 0)) * 12 as yearsal from emp;
    +--------+----------+
    | ename  | yearsal  |
    +--------+----------+
    | SMITH  |  9600.00 |
    | ALLEN  | 22800.00 |
    | WARD   | 21000.00 |
    | JONES  | 35700.00 |
    | MARTIN | 31800.00 |
    | BLAKE  | 34200.00 |
    | CLARK  | 29400.00 |
    | SCOTT  | 36000.00 |
    | KING   | 60000.00 |
    | TURNER | 18000.00 |
    | ADAMS  | 13200.00 |
    | JAMES  | 11400.00 |
    | FORD   | 36000.00 |
    | MILLER | 15600.00 |
    +--------+----------+
    
  • 查找高于平均薪资的员工

    //当一条sql语句没有group by时 整张表自成一张表 如果一条sql语句没有group by,相当于是缺省的
    //先执行group by才能执行分组函数 group by语句是在where语句之后执行 分组函数又是在where语句里的
    mysql> select ename, sal from emp where sal > avg(sal);
    ERROR 1111 (HY000): Invalid use of group function
    
    mysql> select ename, sal from emp where sal > (select avg(sal) from emp);
    +-------+---------+
    | ename | sal     |
    +-------+---------+
    | JONES | 2975.00 |
    | BLAKE | 2850.00 |
    | CLARK | 2450.00 |
    | SCOTT | 3000.00 |
    | KING  | 5000.00 |
    | FORD  | 3000.00 |
    +-------+---------+
    

    任何一个分组函数语句都是在group by之后执行的

    where语句后之不能用分组函数

group by 和 having

  • group by:按照某个字段或者某些字段进行分组

  • having :是对分组之后的数据再进行过滤(having必须和group by一起使用 不能单独使用)

    • 找出每个工作岗位的最高工资

      mysql> select job, max(sal) from emp group by job asc;
      +-----------+----------+
      | job       | max(sal) |
      +-----------+----------+
      | ANALYST   |  3000.00 |
      | CLERK     |  1300.00 |
      | MANAGER   |  2975.00 |
      | PRESIDENT |  5000.00 |
      | SALESMAN  |  1600.00 |
      +-----------+----------+
      
      //这条语句没有意义 最高薪资与员工不对应
      select ename, job, max(sal) from emp group by job asc;
      +-------+-----------+----------+
      | ename | job       | max(sal) |
      +-------+-----------+----------+
      | SCOTT | ANALYST   |  3000.00 |
      | SMITH | CLERK     |  1300.00 |
      | JONES | MANAGER   |  2975.00 |
      | KING  | PRESIDENT |  5000.00 |
      | ALLEN | SALESMAN  |  1600.00 |
      +-------+-----------+----------+
      

当一条sql语句有group by时 select后面只能跟分组函数和参与分组函数的字段(按照什么分组)。

  • 找出每个部门不同工作岗位的最高薪资(多个字段联合分组)

    select deptno, job, max(sal) from emp group by deptno, job;
    +--------+-----------+----------+
    | deptno | job       | max(sal) |
    +--------+-----------+----------+
    |     10 | CLERK     |  1300.00 |
    |     10 | MANAGER   |  2450.00 |
    |     10 | PRESIDENT |  5000.00 |
    |     20 | ANALYST   |  3000.00 |
    |     20 | CLERK     |  1100.00 |
    |     20 | MANAGER   |  2975.00 |
    |     30 | CLERK     |   950.00 |
    |     30 | MANAGER   |  2850.00 |
    |     30 | SALESMAN  |  1600.00 |
    +--------+-----------+----------+
    
  • 找出每个部门的最高薪资,并显示2900以上的薪资

    能用where用where 不能才用having

    //此种方式效率低
    select deptno, max(sal) from emp group by deptno having max(sal) > 2900;
    +--------+----------+
    | deptno | max(sal) |
    +--------+----------+
    |     10 |  5000.00 |
    |     20 |  3000.00 |
    +--------+----------+
    
    select deptno, max(sal) from emp where sal > 2900 group by deptno;
    +--------+----------+
    | deptno | max(sal) |
    +--------+----------+
    |     10 |  5000.00 |
    |     20 |  3000.00 |
    +--------+----------+
    
  • 找出每个部门的平均薪资并且显示大于2000的

    select deptno, avg(sal) from emp group by deptno having avg(sal) > 2000;
    +--------+-------------+
    | deptno | avg(sal)    |
    +--------+-------------+
    |     10 | 2916.666667 |
    |     20 | 2175.000000 |
    +--------+-------------+
    

关于查询结果的去重

//distinct只能出现在所有字段的最前面
select distinct job from emp;
+-----------+
| job       |
+-----------+
| CLERK     |
| SALESMAN  |
| MANAGER   |
| ANALYST   |
| PRESIDENT |
+-----------+
//distinct放在所有字段的最前面表示联合去重
select distinct deptno, job from emp;
+--------+-----------+
| deptno | job       |
+--------+-----------+
|     20 | CLERK     |
|     30 | SALESMAN  |
|     20 | MANAGER   |
|     30 | MANAGER   |
|     10 | MANAGER   |
|     20 | ANALYST   |
|     10 | PRESIDENT |
|     30 | CLERK     |
|     10 | CLERK     |
+--------+-----------+
  • 统计岗位数量

    mysql> select count(distinct job) from emp;
    +---------------------+
    | count(distinct job) |
    +---------------------+
    |                   5 |
    +---------------------+
    

总结

//执行顺序
select
    ...      5
from
    ...      1
where
    ...      2
group by
    ...      3
having
    ...      4
order by
    ...      6

本文地址:https://blog.csdn.net/yiqiandewo/article/details/107299691