select 5
...
from 1
...
where 2
...
group by 3
...
having 4
...
order by 6
...
排序(升序,降序)
默认是升序
asc 表示升序
desc 表示降序
案例1
// 按照工资升序
// 默认是升序
mysql> select empno,ename,sal from emp order by sal;
mysql> select empno,ename,sal from emp order by sal asc;
+-------+--------+---------+
| empno | ename | sal |
+-------+--------+---------+
| 7369 | SMITH | 800.00 |
| 7900 | JAMES | 950.00 |
| 7788 | SCOTT | 3000.00 |
| 7902 | FORD | 3000.00 |
| 7839 | KING | 5000.00 |
+-------+--------+---------+
// 按照工资降序
mysql> select empno,ename,sal from emp order by sal desc;
+-------+--------+---------+
| empno | ename | sal |
+-------+--------+---------+
| 7839 | KING | 5000.00 |
| 7788 | SCOTT | 3000.00 |
| 7654 | MARTIN | 1250.00 |
| 7876 | ADAMS | 1100.00 |
| 7900 | JAMES | 950.00 |
| 7369 | SMITH | 800.00 |
+-------+--------+---------+
案例2
// 按照 工资的降序 排列,当工资相同的时候再按照 名字的升序 排列
// 越靠前的字段越能起到主导作用,只有前面的字段无法完成排序的时候,才会启用后面的字段
// 后面的字段可能就用不上
mysql> select empno,ename,sal from emp order by sal desc,ename asc;
+-------+--------+---------+
| empno | ename | sal |
+-------+--------+---------+
| 7839 | KING | 5000.00 |
| 7902 | FORD | 3000.00 |
| 7788 | SCOTT | 3000.00 |
| 7566 | JONES | 2975.00 |
| 7698 | BLAKE | 2850.00 |
| 7782 | CLARK | 2450.00 |
| 7499 | ALLEN | 1600.00 |
| 7844 | TURNER | 1500.00 |
| 7934 | MILLER | 1300.00 |
| 7654 | MARTIN | 1250.00 |
| 7521 | WARD | 1250.00 |
| 7876 | ADAMS | 1100.00 |
| 7900 | JAMES | 950.00 |
| 7369 | SMITH | 800.00 |
+-------+--------+---------+
案例3
// 查询工作岗位是salesman的员工,并且要求按照薪资的降序排序
select
empno,ename,job,sal
from
emp
where
job='salesman'
order by
sal desc ;
+-------+--------+----------+---------+
| empno | ename | job | sal |
+-------+--------+----------+---------+
| 7499 | ALLEN | SALESMAN | 1600.00 |
| 7844 | TURNER | SALESMAN | 1500.00 |
| 7521 | WARD | SALESMAN | 1250.00 |
| 7654 | MARTIN | SALESMAN | 1250.00 |
+-------+--------+----------+---------+
排序理解案例
顺序:↓↓↓↓↓↓↓↓↓↓↓
select
字段1,字段2,字段3... 3
from
表名 1
where
条件 2
order by
...; 4
order by 是最后执行
mysql> select ename,sal as '工资' from emp order by "工资"; // 错误,能查出来,但是排不了序,可能出现了中文字段
mysql> select ename,sal as salary from emp order by salary; // 正确
+--------+---------+
| ename | salary |
+--------+---------+
| SMITH | 800.00 |
| JAMES | 950.00 |
| ADAMS | 1100.00 |
| WARD | 1250.00 |
| JONES | 2975.00 |
| FORD | 3000.00 |
| KING | 5000.00 |
+--------+---------+
可以使用字段的位置进行排序
// 此时的 3 就代表 sal
mysql> select empno,ename,sal from emp order by 3;
+-------+--------+---------+
| empno | ename | sal |
+-------+--------+---------+
| 7369 | SMITH | 800.00 |
| 7900 | JAMES | 950.00 |
| 7876 | ADAMS | 1100.00 |
| 7521 | WARD | 1250.00 |
| 7934 | MILLER | 1300.00 |
| 7902 | FORD | 3000.00 |
| 7839 | KING | 5000.00 |
+-------+--------+---------+
ifnull()
ifnull(可能为null的数据,别当做什么来处理)
// 查询员工年薪
// 把空的comm当做0来处理
select enpno,ename,(sal+ifnull(comm,0))*12 as from emp;
属于单行处理函数
分组查询
group by 和 having
group by:
按照某个字段或者某些字段进行分组
having:
是对分组之后的数据进行再次过滤
注:
分组函数一般会和group by 联合使用
并且任何一个分组函数都是在 group by语句 执行结束之后才会执行
当sql语句没有 group by语句 的时候,整张表的数据会自成一组
*****重要*****
*****重要*****
当一条语句中有 group by 时
select 后面 只能出现 参加 分组的字段
和分组函数
*****重要*****
*****重要*****
案例1(group by)
// 找出每个工作岗位的最高工资
mysql> select max(sal),job from emp group by job;
+----------+-----------+
| max(sal) | job |
+----------+-----------+
| 1300.00 | CLERK |
| 1600.00 | SALESMAN |
| 2975.00 | MANAGER |
| 3000.00 | ANALYST |
| 5000.00 | PRESIDENT |
+----------+-----------+
当一条语句中有 group by 时
select 后面 只能出现 参加 分组的字段
和分组函数