五、排序与分页1.排序数据排序规则使用 ORDER BY 子句排序ASCascend: 升序DESCdescend: 降序ORDER BY 子句在SELECT语句的结尾单列排序SELECTlast_name,job_id,department_id,hire_dateFROMemployeesORDERBYhire_date;SELECTlast_name,job_id,department_id,hire_dateFROMemployeesORDERBYhire_dateDESC;SELECTemployee_id,last_name,salary*12annsalFROMemployeesORDERBYannsal;多列排序SELECTlast_name,department_id,salaryFROMemployeesORDERBYdepartment_id,salaryDESC;可以使用不在SELECT列表中的列排序。在对多列进行排序的时候首先排序的第一列必须有相同的列值才会对第二列进行排序。如果第一列数据中所有值都是唯一的将不再对第二列进行排序。2.分页背景背景1查询返回的记录太多了查看起来很不方便怎么样能够实现分页查询呢背景2表里有 4 条数据我们只想要显示第 2、3 条数据怎么办呢实现规则分页原理所谓分页显示就是将数据库中的结果集一段一段显示出来需要的条件。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 不需要扫描完整的表只需要检索到一条符合条件的记录即可返回。拓展在不同的 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;得到与上述方法一致的结果。