ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

MySQL入门到精通-基础篇(四 排序与分页)

2026/8/20 10:05:18 拓冰建站 浏览量
MySQL入门到精通-基础篇(四 排序与分页) 1. 排序数据1.1 排序规则使用 ORDER BY 子句排序ASCascend: 升序DESCdescend:降序ORDER BY 子句在SELECT语句的结尾。1.2 单列排序SELECTlast_name,job_id,department_id,hire_dateFROMemployeesORDERBYhire_date;SELECTlast_name,job_id,department_id,hire_dateFROMemployeesORDERBYhire_dateDESC;SELECTemployee_id,last_name,salary*12annsalFROMemployeesORDERBYannsal;1.3 多列排序SELECTlast_name,department_id,salaryFROMemployeesORDERBYdepartment_id,salaryDESC;可以使用不在SELECT列表中的列排序。在对多列进行排序的时候首先排序的第一列必须有相同的列值才会对第二列进行排序。如果第一列数据中所有值都是唯一的将不再对第二列进行排序。2. 分页2.1 背景背景1查询返回的记录太多了查看起来很不方便怎么样能够实现分页查询呢背景2表里有 4 条数据我们只想要显示第 2、3 条数据怎么办呢2.2 实现规则分页原理所谓分页显示就是将数据库中的结果集一段一段显示出来需要的条件。MySQL中使用 LIMIT 实现分页格式LIMIT[位置偏移量,]行数第一个“位置偏移量”参数指示MySQL从哪一行开始显示是一个可选参数如果不指定“位置偏移量”将会从表中的第一条记录开始第一条记录的位置偏移量是0第二条记录的位置偏移量是1以此类推第二个参数“行数”指示返回的记录条数。举例--前10条记录SELECT*FROM表名LIMIT0,10;或者SELECT*FROM表名LIMIT10;--第11至20条记录SELECT*FROM表名LIMIT10,10;--第21至30条记录SELECT*FROM表名LIMIT20,10;MySQL 8.0中可以使用“LIMIT 3 OFFSET 4”意思是获取从第5条记录开始后面的3条记录和“LIMIT 4,3;”返回的结果相同。分页显式公式**当前页数-1每页条数每页条数*SELECT*FROMtableLIMIT(PageNo-1)*PageSize,PageSize;注意LIMIT 子句必须放在整个SELECT语句的最后使用 LIMIT 的好处约束返回结果的数量可以减少数据表的网络传输量也可以提升查询效率。如果我们知道返回结果只有 1 条就可以使用LIMIT 1告诉 SELECT 语句只需要返回一条记录即可。这样的好处就是 SELECT 不需要扫描完整的表只需要检索到一条符合条件的记录即可返回。2.3 拓展在不同的 DBMS 中使用的关键字可能不同。在 MySQL、PostgreSQL、MariaDB 和 SQLite 中使用 LIMIT 关键字而且需要放到 SELECT 语句的最后面。如果是 SQL Server 和 Access需要使用TOP关键字比如SELECTTOP5name,hp_maxFROMherosORDERBYhp_maxDESC如果是 DB2使用FETCH FIRST 5 ROWS ONLY这样的关键字SELECTname,hp_maxFROMherosORDERBYhp_maxDESCFETCHFIRST5ROWSONLY如果是 Oracle你需要基于ROWNUM来统计行数SELECTrownum,last_name,salaryFROMemployeesWHERErownum5ORDERBYsalaryDESC;需要说明的是这条语句是先取出来前 5 条数据行然后再按照 hp_max 从高到低的顺序进行排序。但这样产生的结果和上述方法的并不一样。我会在后面讲到子查询你可以使用SELECTrownum,last_name,salaryFROM(SELECTlast_name,salaryFROMemployeesORDERBYsalaryDESC)WHERErownum10;得到与上述方法一致的结果。笔记#排序与分页#1. 排序# 如果没有使用排序操作默认情况下查询返回的数据是按照添加数据的顺序显示的。SELECT*FROMemployees;# 1.1 基本使用# 使用 ORDER BY 对查询到的数据进行排序操作。# 升序ASC (ascend)# 降序DESC (descend)# 练习按照salary从高到低的顺序显示员工信息SELECTemployee_id,last_name,salaryFROMemployeesORDERBYsalaryDESC;# 练习按照salary从低到高的顺序显示员工信息SELECTemployee_id,last_name,salaryFROMemployeesORDERBYsalaryASC;SELECTemployee_id,last_name,salaryFROMemployeesORDERBYsalary;# 如果在ORDER BY 后没有显式指名排序的方式的话则默认按照升序排列。#1.2 我们可以使用列的别名进行排序SELECTemployee_id,salary,salary*12annual_salFROMemployeesORDERBYannual_sal;#列的别名只能在 ORDER BY 中使用不能在WHERE中使用。#如下操作报错SELECTemployee_id,salary,salary*12annual_salFROMemployeesWHEREannual_sal81600;#1.3 强调格式WHERE 需要声明在FROM后ORDER BY之前。SELECTemployee_id,salaryFROMemployeesWHEREdepartment_idIN(50,60,70)ORDERBYdepartment_idDESC;#1.4 二级排序#练习显示员工信息按照department_id的降序排列salary的升序排列SELECTemployee_id,salary,department_idFROMemployeesORDERBYdepartment_idDESC,salaryASC;#2. 分页#2.1 mysql使用limit实现数据的分页显示# 需求1每页显示20条记录此时显示第1页SELECTemployee_id,last_nameFROMemployeesLIMIT0,20;# 需求2每页显示20条记录此时显示第2页SELECTemployee_id,last_nameFROMemployeesLIMIT20,20;# 需求3每页显示20条记录此时显示第3页SELECTemployee_id,last_nameFROMemployeesLIMIT40,20;#需求每页显示pageSize条记录此时显示第pageNo页#公式LIMIT (pageNo-1) * pageSize,pageSize;#2.2 WHERE ... ORDER BY ...LIMIT 声明顺序如下# LIMIT的格式 严格来说LIMIT 位置偏移量,条目数# 结构LIMIT 0,条目数 等价于 LIMIT 条目数SELECTemployee_id,last_name,salaryFROMemployeesWHEREsalary6000ORDERBYsalaryDESC#limit 0,10;LIMIT10;#练习表里有107条数据我们只想要显示第 32、33 条数据怎么办呢SELECTemployee_id,last_nameFROMemployeesLIMIT31,2;#2.3 MySQL8.0新特性LIMIT ... OFFSET ...#练习表里有107条数据我们只想要显示第 32、33 条数据怎么办呢SELECTemployee_id,last_nameFROMemployeesLIMIT2OFFSET31;#练习查询员工表中工资最高的员工信息SELECTemployee_id,last_name,salaryFROMemployeesORDERBYsalaryDESC#limit 0,1LIMIT1;#2.4 LIMIT 可以使用在MySQL、PGSQL、MariaDB、SQLite 等数据库中使用表示分页。# 不能使用在SQL Server、DB2、Oracle