MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm=1001.2014.3001.5502
语法格式:
select */列名 from 表名
order by 列名1 asc/desc, 列名2 asc/desc;
说明:
排序的目的:改变查询结果的返回顺序!
order by 就是排序关键字,表示按照什么规则排序
asc 表示升序,默认可以不写 desc 表示降序,若需要,不能省略
多列排序规则:先按照列名1进行排序(第1梯队),如果列名1的值相同,再按照列名2排序(第2梯队)!
案例:查询emp表中,员工编号(empno)、姓名(ename)、职位(job)、工资(sal)、入职时间(hiredate),根据工资(sal)降序排序。
mysql> select empno, ename, job, sal, hiredate
-> from emp
-> order by sal desc;
+-------+--------+-----------+---------+------------+
| empno | ename | job | sal | hiredate |
+-------+--------+-----------+---------+------------+
| 7839 | king | president | 5000.00 | 1983-05-20 |
| 7782 | clark | manager | 4450.00 | 1981-09-06 |
| 7950 | conter | manager | 3500.00 | 1983-02-01 |
| 7566 | jones | manager | 3500.00 | 1980-04-02 |
| 7902 | ford | analyst | 3000.00 | 1981-12-03 |
| 7698 | blake | manager | 2850.00 | 1983-05-01 |
| 7499 | allen | salesman | 1600.00 | 1981-02-20 |
| 7844 | turner | salesman | 1500.00 | 1981-06-10 |
| 7945 | mitter | clerk | 1500.00 | 1983-06-23 |
| 7934 | miller | clerk | 1300.00 | 1982-11-23 |
| 7521 | ward | salesman | 1250.00 | 1982-02-22 |
| 7654 | martin | salesman | 1250.00 | 1981-09-28 |
| 7900 | james | clerk | 950.00 | 1981-12-03 |
| 7369 | smith | clerk | 800.00 | 1980-12-17 |
| 7210 | tianni | clerk | 500.00 | 1980-04-20 |
+-------+--------+-----------+---------+------------+
15 rows in set (0.03 sec)
练习:查询emp表中,员工编号(empno)、姓名(ename)、职位(job)、工资(sal)、入职时间(hiredate),根据姓名(ename)升序排序。
select empno, ename, job, sal, hiredate
from emp
order by ename asc;
# asc可以省略
select empno, ename, job, sal, hiredate
from emp
order by ename;
练习:查询student表中,学员姓名(sname)、分数(score)、班级(sclass),根据分数从大到小排序。
分析:从大到小,就是降序 desc
mysql> select sname, score, sclass
-> from student
-> order by score desc;
+------------+-------+--------+
| sname | score | sclass |
+------------+-------+--------+
| rose | 100.0 | 2年1班 |
| lucy | 99.0 | 2年1班 |
| 猪八里 | 90.5 | 2年2班 |
| toms | 90.0 | 1年1班 |
| 孙多多 | 90.0 | 2年3班 |
| 我吃西红柿 | 88.5 | 1年2班 |
| 烽火戏诸侯 | 82.5 | 1年1班 |
| 孙权 | 80.0 | 1年3班 |
| jack | 78.0 | 2年1班 |
| 天蚕土豆丝 | 77.0 | 1年2班 |
| jack | 75.0 | 1年3班 |
| 沙僧 | 70.5 | 1年3班 |
| james | 67.0 | 2年2班 |
| 孙悟空 | 65.0 | 2年2班 |
| 唐家三少 | 65.0 | 1年1班 |
+------------+-------+--------+
15 rows in set (0.00 sec)
案例:查询student表中,学员姓名(sname)、分数(score)、班级(sclass),先根据班级(sclass)升序排序,再根据分数(score)降序排序。
mysql> select sname, score, sclass
-> from student
-> order by sclass asc, score desc;
+------------+-------+--------+
| sname | score | sclass |
+------------+-------+--------+
| toms | 90.0 | 1年1班 |
| 烽火戏诸侯 | 82.5 | 1年1班 |
| 唐家三少 | 65.0 | 1年1班 |
| 我吃西红柿 | 88.5 | 1年2班 |
| 天蚕土豆丝 | 77.0 | 1年2班 |
| 孙权 | 80.0 | 1年3班 |
| jack | 75.0 | 1年3班 |
| 沙僧 | 70.5 | 1年3班 |
| rose | 100.0 | 2年1班 |
| lucy | 99.0 | 2年1班 |
| jack | 78.0 | 2年1班 |
| 猪八里 | 90.5 | 2年2班 |
| james | 67.0 | 2年2班 |
| 孙悟空 | 65.0 | 2年2班 |
| 孙多多 | 90.0 | 2年3班 |
+------------+-------+--------+
15 rows in set (0.00 sec)
练习:查询emp表中,员工姓名、职位、工资、部门编号,先根据部门编号降序排序,再根据工资升序排序。
mysql> select ename, job, sal, deptno
-> from emp
-> order by deptno desc, sal asc;
+--------+-----------+---------+--------+
| ename | job | sal | deptno |
+--------+-----------+---------+--------+
| conter | manager | 3500.00 | 90 |
| tianni | clerk | 500.00 | 60 |
| mitter | clerk | 1500.00 | 40 |
| james | clerk | 950.00 | 30 |
| ward | salesman | 1250.00 | 30 |
| martin | salesman | 1250.00 | 30 |
| turner | salesman | 1500.00 | 30 |
| allen | salesman | 1600.00 | 30 |
| blake | manager | 2850.00 | 30 |
| smith | clerk | 800.00 | 20 |
| ford | analyst | 3000.00 | 20 |
| jones | manager | 3500.00 | 20 |
| miller | clerk | 1300.00 | 10 |
| clark | manager | 4450.00 | 10 |
| king | president | 5000.00 | 10 |
+--------+-----------+---------+--------+
15 rows in set (0.00 sec)
排序的目的:改变查询结果的返回顺序!