MySQL的排序与分页

一、排序

1、排序规则

使用 ORDER BY 子句排序,其中ASC(ascend)表示升序,DESC(descend)表示降序,且ORDER BY 子句用在SELECT语句的结尾。若在ORDER BY 后没有显式指名排序的方式,则默认按照升序排列。

2、单列排序

举例:

# 按照salary从高到低的顺序显示员工信息
SELECT employee_id,last_name,salary
FROM employees
ORDER BY salary DESC;

# 按照salary从低到高的顺序显示员工信息
SELECT employee_id,last_name,salary
FROM employees
ORDER BY salary;
# ORDER BY salary ASC;

# 按照员工年工资annual_sal(别名)从低到高的顺序显示员工信息
SELECT employee_id,last_name,salary*12 "annual_sal"
FROM employees
ORDER BY annual_sal;

# 查询部门号是50,60,70员工信息,且按部门号降序排列
SELECT employee_id,last_name,salary, department_id
FROM employees
WHERE department_id IN(50,60,70)
ORDER BY department_id DESC;  # WHERE 需要声明在FROM后,ORDER BY之前

MySQL的排序与分页_第1张图片
2、多列排序

举例:

# 显示员工信息,按照department_id的降序排列,salary的升序排列
SELECT employee_id,department_id,salary
FROM employees
ORDER BY department_id DESC,salary ASC; # 在对多列进行排序的时候,首先排序的第一列必须有相同的列值,才会对第二列进行排序。如果第一列数据中所有值都是唯一的,将不再对第二列进行排序。

MySQL的排序与分页_第2张图片

二、分页

分页显示,就是将数据库中的结果集,一段一段显示出来需要的条件。MySQL中使用 LIMIT 实现分页,LIMIT的格式:LIMIT 位置偏移量,条目数。结构"LIMIT 0,条目数" 等价于 “LIMIT 条目数”。注意:

(1)MySQL 8.0中可以使用“LIMIT 3 OFFSET 4”,意思是获取从第5条记录开始后面的3条记录,和“LIMIT
4,3;”返回的结果相同,即这两个语句的数字前后位置相反。
(2)LIMIT 可以使用在MySQL、PGSQL、MariaDB、SQLite 等数据库中使用,表示分页。 不能使用在SQL Server、DB2、Oracle!

举例:

#前10条记录: 
SELECT * FROM 表名 LIMIT 0,10; 
#或者
SELECT * FROM 表名 LIMIT 10;
#第11至20条记录:
SELECT * FROM 表名 LIMIT 10,10;
#第21至30条记录: 
SELECT * FROM 表名 LIMIT 20,10;
# 分页显式公式:(当前页数-1)*每页条数,每页条数(注意:LIMIT 子句必须放在整个SELECT语句的最后!)
SELECT * FROM 表名 LIMIT(PageNo -1)*PageSize,PageSize;
# 查询员工表每页显示20条记录,显示第1页
SELECT employee_id,last_name
FROM employees
LIMIT 0,20;

# 查询员工表每页显示20条记录,显示第2页
SELECT employee_id,last_name
FROM employees
LIMIT 20,20;


# 查询员工表中第32、33条员工信息
# 法一
SELECT employee_id,last_name
FROM employees
LIMIT 31,2;

# 法二
SELECT employee_id,last_name
FROM employees
LIMIT 2 OFFSET 31;

# 查询员工表中工资最高的员工信息
SELECT employee_id,last_name,salary
FROM employees
LIMIT 0,1;
# LIMIT 1;

MySQL的排序与分页_第3张图片
三、小练习

#1. 查询员工的姓名和部门号和年薪,按年薪降序,按姓名升序显示 
SELECT last_name,department_id,salary*12 "annual_salary"
FROM employees
ORDER BY annual_salary DESC,last_name ASC;

#2. 选择工资不在 8000 到 17000 的员工的姓名和工资,按工资降序,显示第21到40位置的数据
SELECT last_name,salary
FROM employees
WHERE salary NOT BETWEEN 8000 AND 17000
ORDER BY salary DESC
LIMIT 20,20;

#3. 查询邮箱中包含 e 的员工信息,并先按邮箱的字节数降序,再按部门号升序
SELECT employee_id,last_name,email,department_id
FROM employees
WHERE email like '%e%'
ORDER BY LENGTH(email)DESC,department_id ASC;

所用数据库请看文章末尾:SQL语言和基本的select语句

你可能感兴趣的:(MySQL,mysql,sql,排序,分页)