MySQL(3)

排序

1 基本使用​​​​​​​

复制代码
# 使用 ORDER BY 对查询到的数据进行排序操作。# 升序:ASC (ascend)# 降序:DESC (descend)# 练习:按照salary从高到低的顺序显示员工信息SELECT employee_id,last_name,salaryFROM employeesORDER BY salary DESC;# 练习:按照salary从低到高的顺序显示员工信息SELECT employee_id,last_name,salaryFROM employeesORDER BY salary ASC;SELECT employee_id,last_name,salaryFROM employeesORDER BY salary; # 如果在ORDER BY 后没有显式指名排序的方式的话,则默认按照升序排列。

2. 我们可以使用列的别名,进行排序​​​​​​​

复制代码
SELECT employee_id,salary,salary * 12 annual_salFROM employeesORDER BY annual_sal;
#列的别名只能在 ORDER BY 中使用,不能在WHERE中使用。#如下操作报错!SELECT employee_id,salary,salary * 12 annual_salFROM employeesWHERE annual_sal > 81600;

**3. 强调格式:WHERE 需要声明在FROM后,ORDER BY之前。**​​​​​​​

复制代码
SELECT employee_id,salaryFROM employeesWHERE department_id IN (50,60,70)ORDER BY department_id DESC;

4. 二级排序​​​​​​​

复制代码
#练习:显示员工信息,按照department_id的降序排列,salary的升序排列SELECT * FROM employeesORDER BY department_id DESC,salary ASC;

分页

2.1 mysql使用limit实现数据的分页显示​​​​​​​

复制代码
# 需求1:每页显示20条记录,此时显示第1页SELECT * FROM employees LIMIT 0,20;

# 需求2:每页显示20条记录,此时显示第2页SELECT * FROM employees LIMIT 20,20;

# 需求3:每页显示20条记录,此时显示第3页SELECT * FROM employees LIMIT 40,20;

#需求:每页显示pageSize条记录,此时显示第pageNo页:#公式:LIMIT (pageNo-1) * pageSize,pageSize;

**2.2 WHERE ... ORDER BY ...LIMIT 声明顺序如下:**​​​​​​​

复制代码
# LIMIT的格式:严格来说:LIMIT 位置偏移量,条目数;# 结构"LIMIT 0,条目数" 等价于 "LIMIT 条目数"SELECT employee_id,last_name,salaryFROM employeesWHERE salary > 6000ORDER BY salary DESC#limit 0,10;LIMIT 10;

#练习:表里有107条数据,我们只想要显示第 32、33 条数据怎么办呢?SELECT * FROM employees LIMIT 31,2;

**2.3 MySQL8.0新特性:LIMIT ... OFFSET ...**​​​​​​​

复制代码
#练习:表里有107条数据,我们只想要显示第 32、33 条数据怎么办呢?SELECT * FROM employees LIMIT 2 OFFSET 31;#练习:查询员工表中工资最高的员工信息SELECT * FROM employees ORDER BY salary DESC LIMIT 1;

2.4 LIMIT 可以使用在MySQL、PGSQL、MariaDB、SQLite 等数据库中使用,表示分页。

不能使用在SQL Server、DB2、Oracle!

排序与分页的课后练习

  1. 查询员工的姓名和部门号和年薪,按年薪降序,按姓名升序显示

    SELECT last_name,department_id,salary*12 FROM employees ORDER BY salary DESC,last_name ASC;

  2. 选择工资不在 8000 到 17000 的员工的姓名和工资,按工资降序,显示第21到40位置的数据 ​​​​​​​

    SELECT last_name,salary FROM employees WHERE salary NOT BETWEEN 8000 AND 17000ORDER BY salary DESC LIMIT 20 OFFSET 20;

  3. 查询邮箱中包含 e 的员工信息,并先按邮箱的字节数降序,再按部门号升序​​​​​​​

    SELECT * FROM employeesWHERE email LIKE '%e%'#WHERE email REGEXP '[e]'ORDER BY LENGTH(email) DESC,department_id ASC;

相关推荐
冉冰学姐36 分钟前
SSM学生竞赛模拟系统4x1nt(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·用户管理·ssm 框架·学生竞赛模拟系统
zqmattack41 分钟前
SQL优化与索引策略实战指南
java·数据库·sql
lang201509281 小时前
Jackson 1.x到2.x的演进与Spring集成
数据库·sql·spring
我星期八休息1 小时前
MySQL数据可视化实战指南
数据库·人工智能·mysql·算法·信息可视化
五阿哥永琪2 小时前
MySQL面试题 事务的隔离级别
数据库·mysql
不染尘.2 小时前
Linux的rpm与yum
linux·mysql·jdk·centos·tomcat·ssh
DK.千殇2 小时前
前四天总结
数据库
Red丶哞2 小时前
[Django Message超全总结教程](武沛齐老师)
数据库·django·sqlite
数据知道3 小时前
PostgreSQL实战:一文掌握 pg_hba.conf 配置,涵盖密码认证、IP限制与安全策略
数据库·tcp/ip·postgresql
数据知道3 小时前
PostgreSQL实战:序列深度解析,高并发下的ID生成陷阱与优化
数据库·postgresql