MySQL之数据查询语言(三)

219 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

本章对分页查询及其案例和执行顺序进行学习总结。

一、分页查询

分页操作在业务系统开发时,也是非常常见的一个功能,我们在网站中看到的各种各样的分页条,后台都需要借助于数据库的分页操作。

业务场景:某宝的商品评价假设有100条时,肯定不是一页存放100条评价的数据,肯定会对其进行分页(例如:一页20条评价,分五页)。

(1) 语法

SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数 ;
注意事项:

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

②分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。

③如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10。

案例一:查询第1页员工数据, 每页展示10条记录。

-- 思路:limit 10

select * from emp limit 0,10;
# or
select * from emp limit 10;

案例二:查询第2页员工数据, 每页展示10条记录。

-- 思路: (页码-1)*页展示记录数,所以(2-1)*10=10。

select * from emp limit 10,10;

二、SQL执行顺序

在我之前所总结的MySQL之数据查询语言(一)中所总结的是SQL的编写顺序,而非执行顺序。

image.png

验证:查询年龄大于15的员工姓名、年龄,并根据年龄进行升序排序。

select name , age from emp where age > 15 order by age asc;

在查询时,我们给emp表起一个别名 e,然后在select 及 where中使用该别名。

select e.name , e.age from emp e where e.age > 15 order by age asc;

执行上述SQL语句后,我们看到依然可以正常的查询到结果,此时就说明: from 先执行, 然后where 和 select 执行。那 where 和 select 到底哪个先执行呢?

此时,此时可以给select后面的字段起别名,然后在 where 中使用这个别名,然后看看是否可以执行成功。

select e.name ename , e.age eage from emp e where eage > 15 order by age asc;

结果是,执行上述SQL报错了:

image.png

由此可以得出结论: from 先执行,然后执行 where,再执行select。

接下来,再执行如下SQL语句,查看执行效果:

select e.name ename , e.age eage from emp e where e.age > 15 order by eage asc;

结果:执行成功。

那么也就验证了: order by 是在select 语句之后执行的。

三、小结

综上所述,我们可以看到DQL语句的执行顺序如下: 
from ... where ... group by ... having ... select ... order by ... limit ...
到此,MySQL数据查询语言(DQL)就总结归纳完毕了。
下一章将对数据控制语言(DCL)进行简单的总结归纳。