1、 排序规则
使用 ORDER BY 子句排序
ASC(ascend): 升序(默认值)
DESC(descend):降序
ORDER BY 子句在SELECT语句的结尾
如果没有使用排序操作,默认情况下查询返回的数据是按照添加数据的顺序显示的
2、单列排序
#从员工表中,按雇佣日期的升序查询员工的 last_name, job_id, department_id, hire_date SELECT last_name, job_id, department_id, hire_date FROM employees ORDER BY hire_date ;
查询的部分结果:
-------------+------------+---------------+------------+ | last_name | job_id | department_id | hire_date | +-------------+------------+---------------+------------+ | King | AD_PRES | 90 | 1987-06-17 | | Whalen | AD_ASST | 10 | 1987-09-17 | | Kochhar | AD_VP | 90 | 1989-09-21 | | Hunold | IT_PROG | 60 | 1990-01-03 | | Ernst | IT_PROG | 60 | 1991-05-21 |
#按照降序排列 SELECT last_name, job_id, department_id, hire_date FROM employees ORDER BY hire_date DESC ;
查询的部分结果:
-------------+------------+---------------+------------+ | last_name | job_id | department_id | hire_date | +-------------+------------+---------------+------------+ | Banda | SA_REP | 80 | 2000-04-21 | | Kumar | SA_REP | 80 | 2000-04-21 | | Ande | SA_REP | 80 | 2000-03-24 | | Markle | ST_CLERK | 50 | 2000-03-08 | | Lee | SA_REP | 80 | 2000-02-23 | | Philtanker | ST_CLERK | 50 | 2000-02-06 |
3、多列排序
#从员工表中,根据员工的部门id和工资的降序,查询员工的 last_name, department_id, salary SELECT last_name, department_id, salary FROM employees ORDER BY department_id, salary DESC;
查询的部分结果:
+-------------+---------------+----------+ | last_name | department_id | salary | +-------------+---------------+----------+ | Grant | NULL | 7000.00 | | Whalen | 10 | 4400.00 | | Hartstein | 20 | 13000.00 | | Fay | 20 | 6000.00 | | Raphaely | 30 | 11000.00 | | Khoo | 30 | 3100.00 | | Baida | 30 | 2900.00 | | Tobias | 30 | 2800.00 | | Himuro | 30 | 2600.00 | | Colmenares | 30 | 2500.00 |
从表中可以清楚的看到,department_id是升序排列,salary是降序排列;当department_id一样时,salary是降序排列
4、排序细节
可以使用不在SELECT列表中的列排序
SELECT employee_id FROM employees ORDER BY salary;
可以使用列的别名,进行排序
SELECT salary * 12 AS annual_sal FROM employees ORDER BY annual_sal;
列的别名只能在 ORDER BY 中使用,不能在WHERE中使用
#如下操作会报错,其原因是:先执行from,然后执行where,最后再select SELECT salary * 12 AS annual_sal FROM employees WHERE annual_sal > 600;
WHERE 需要声明在FROM后,ORDER BY之前
5、分页
MySQL中使用LIMIT实现分页
格式:
LIMIT [位置偏移量,] 行数
第一个“位置偏移量”参数指示MySQL从哪一行开始显示,是一个可选参数,如果不指定“位置偏移量”,将会从表中的第一条记录开始(第一条记录的位置偏移量是0,第二条记录的位置偏移量是1,以此类推);第二个参数“行数”指示返回的记录条数。
案例:
--查询员工表中第11至20条的员工信息 SELECT * FROM employees LIMIT 10,10; # 需求1:每页显示20条记录,此时显示第2页 SELECT employee_id,last_name FROM employees LIMIT 20,20; #需求:每页显示pageSize条记录,此时显示第pageNo页: SELECT employee_id,last_name FROM employees LIMIT (pageNo-1) * pageSize,pageSize;
MySQL 8.0中可以使用LIMIT 3 OFFSET 4,意思是获取从第5条记录开始后面的3条记录,和LIMIT 4,3;返回的结果相同。(个人认为只需要记住一个就可以了,都记的话,脑袋瓜子受不了,哈哈哈)
注意: LIMIT 子句必须放在整个SELECT语句的最后!
使用LIMIT的好处:
约束返回结果的数量可以减少数据表的网络传输量,也可以提升查询效率。如果我们知道返回结果只有 1 条,就可以使用LIMIT 1,告诉 SELECT 语句只需要返回一条记录即可。这样的好处就是 SELECT 不需要扫描完整的表,只需要检索到一条符合条件的记录即可返回。