MySQL --- 数据库查询 - 排序查询、分页查询

排序查询

通过条件查询语句可以查询到符合用户需要的数据,但是查询到的数据一般都是按照数据最初被添加到表中的顺序来显示,先添加的先显示,后添加的后显示。为了使查询结果的顺序满足用户的要求,MySQL 提供了 ORDER BY 关键字来对查询结果进行排序。

在实际应用中经常需要对查询结果进行排序,比如,在网上购物时,可以将商品按照价格、数量进行排序;在医院的挂号系统中,可以按照挂号的先后顺序进行排序等。

语法

SELECT 字段名 FROM 表名 ... ORDER BY 排序字段名 [ASC|DESC],[排序字段名 [ASC|DESC]];

语法说明

  • 排序字段名:表示需要排序的字段名称,如果有多个字段用逗号隔开。

  • 排序规则:ASC|DESC:ASC表示字段按升序排序;DESC表示字段按降序排序。其中 [ ] 表示可选关键字 ASC为默认值,默认按升序排列。

特点

  • ORDER BY子句一般放到查询语句的最后面,LIMIT字句除外。

  • 当排序的字段中存在空值 NULL 时,ORDER BY 会将该空值作为最小值来对待。

  • ORDER BY 指定多个字段进行排序时,MySQL 会按照字段的顺序从左到右依次进行排序。例如,一开始按照 job 排序,当 job 有重复值的时候,就会按指定的下一个字段进行排序

  • 注意:在对多个字段进行排序时,排序的第一个字段必须有相同的值,才会对第二个字段进行排序。如果第一个字段数据中所有的值都是唯一的,MySQL 将不再对第二个字段进行排序。

查询需求

1.根据姓名对员工进行升序排序

SELECT * FROM emp ORDER BY ename ASC;

2.查询入职时间大于1981年6月6日的员工信息,并按照入职时间升序排列

-- SQL表 --

-- 查询入职时间大于1981年6月6日的员工信息

SELECT * FROM emp WHERE hiredate>'1981-6-6';

-- 查询入职时间大于1981年6月6日的员工信息,并按照入职时间升序排列

SELECT * FROM emp WHERE hiredate>'1981-6-6' ORDER BY hiredate ASC;

3.根据工作职位,进行升序排列,职位相同的情况下,再根据入职时间降序排列

对某一个字段先排序,如果第一个排序字段有重复的情况下,就按第二个字段进行排序

-- SQL表 --

-- 根据工作职位进行升序排列
SELECT * FROM emp ORDER BY job ASC;

-- 根据工作职位进行升序排列,在职位相同的情况下,再根据入职时间降序排列 用逗号分隔需要排序的字段
SELECT * FROM emp ORDER BY job ASC,hiredate DESC;

4.查询工资不在1000到2000之间的员工的姓名和工资,工资按降序排列

-- SQL表 --

-- 查询工资不在1000到2000之间的员工的姓名和工资
SELECT ename,sal FROM emp WHERE sal NOT BETWEEN 1000 AND 2000;

-- 查询工资不在1000到2000之间的员工的姓名和工资,工资按降序排列
SELECT ename,sal FROM emp WHERE sal NOT BETWEEN 1000 AND 2000 ORDER BY sal DESC;

5.按工作职位进行分组,查看每个工作职位的人数,工作职位按升序排列

-- SQL表 --

-- 按工作职位进行分组,查看每个工作职位的人数
SELECT job,COUNT(*) FROM emp GROUP BY job;

-- 按工作职位进行分组,查看每个工作职位的人数,工作职位按升序排列
SELECT job,COUNT(*) FROM emp GROUP BY job ORDER BY job ASC;

分页查询

在前面的查询中,一般直接把所有字段都查询出来了,对于比较多的数据,如果在一个页面全部显示,查看起来会眼花缭乱。如果能进行分页显示,将更加快捷、清新的浏览!

语法

SELECT 字段名 FROM 表名 LIMIT 起始索引,查询记录数;

特点

  • 起始索引从0开始编号,起始索引 = (查询页码 - 1) * 每页显示记录数

  • 有 5 条数据,3 条数据分为一页,如果查询的是第一页数据,起始索引可以省略,直接简写为LIMIT 3,如果查询的是第二页数据,起始索引从 3 开始,查询记录数可以直接写 3,如果少了只会显示两条,如果多了最多只显示 3 条

查询需求

1.查询第一页员工数据,每页展示 10 条记录

-- 查询第一页员工数据,每页展示10条记录
SELECT * FROM emp LIMIT 0,10;

-- 查询第二页员工数据,每一页显示10条数据
SELECT * FROM emp LIMIT 10,10;
-- 起始索引从0开始,起始索引 = (查询页码 - 1) * 每页显示记录数 (2-1)*10

2.查询工资大于1500的员工数据,按工资升序排列,并分页,每页展示5条数据

-- 查询工资大于1500的员工数据,按工资升序排列并分页,每页展示5条数据
SELECT * FROM emp WHERE sal>1500 ORDER BY sal ASC LIMIT 0,5;

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qiuqiuyaq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值