1.排序数据
1.1排序规则
如果没有使用排序操作,默认情况下查询返回的数据是按照添加数据的顺序显示的。
- 使用ORDER BY子句排序
-
- ASC (ascend):升序
-
- DESC (descend):降序
- ORDER BY子句在SELECT语句的结尾。
1.2单列排序
1.简单使用排序
#如果没有使用排序操作,默认情况下查询返回的数据是按照添加数据的顺序显示的。
select * from employees;
#练习:按照salary从高到低的顺序显示员工信息
#使用ORDERBY对查询到的数据进行排序操作。
#升序:ASC ( ascend)
#降序:DESC (descend)
select employee_id,last_name,salary
from employees
ORDER BY salary DESC;#如果在ORDER BY后没有显式指名排序的方式的话,则默认按照升序排列。
2.使用列的别名进行排序
#我们可以使用列的别名,进行排序
SELECT employee_id,salary,salary * 12 annual_sal
FROM employees
ORDER BY annual_sal;
3.强调格式:WHERE需要声明在FROM后,ORDER BY之前。
ORDER BY 排序的字段,不一定是查询字段。(即ORDER BY的字段可以不存在于SELECT语句中)
为什么列的别名只能在ORDER BY 中使用,不能在WHERE中使用呢?
1.SQL语句执行顺序不是按照从前往后顺序执行的,而是先执行FROM employees ,先找到查哪一个表,然后执行WHERE语句,看看有哪些过滤条件;
2.然后才执行SELECT语句,看看需要查哪些字段,同时才可能对列起一个别名
3.接下来执行ORDER BY,此时基于有别名了,所以排序时可以通过
1.3多列排序
- 可以使用不在SELECT列表中的列排序。
- 在对多列进行排序的时候,首先排序的第一列必须有相同的列值,才会对第二列进行排序。如果第一列数据中所有值都是唯一的,将不再对第二列进行排序。
二级排序
#练习:显示员工信息,按照department_id的降序排列,salary的升序排列
SELECT employee_id, salary ,department_id
FROM employees
ORDER BY department_id DESC,salary ASC;
2.分页
2.1背景
背景1:查询返回的记录太多了,查看起来很不方便,怎么样能够实现分页查询呢?
背景2:表里有4条数据,我们只想要显示第2、3条数据怎么办呢?
2.2实现规则
#2.1 mysql使用limit实现数据的分页显示
#需求:每页显示20条记录,此时显示第1页
需求:每页显示pagesize条记录,此时显示第pageNo页:
公式:LIMIT (pageNo-1)* pagesize,pagesize;
SELECT employee_id, last_name
FROM employees
LIMIT 0,20;
WHERE … ORDER BY … LIMIT 声明顺序如下:
#需求:每页显示pagesize条记录,此时显示第pageNo页:
#公式:LIMIT (pageNo-1)* pagesize,pagesize;
SELECT employee_id, last_name,salary
FROM employees
where salary >6000
ORDER BY salary DESC
LIMIT 0,20;
练习:表里有107条数据,我们只想要显示第32、33条数据怎么办呢?
SELECT employee_id, last_name,salary
FROM employees
LIMIT 31,2;
MySQL8.0新特性: LIMIT … OFFSET
SELECT employee_id, last_name,salary
FROM employees
LIMIT 2 OFFSET 31;
2.3拓展
练习