一、前言
这里只是一个对SQLift中SELECT查询语句结构的简单理解,没有对其结构更进一步拓展。(末尾小彩蛋是一个对LIMIT OFFSET的一个‘分页’应用的分析)
二、基本内容
语法格式
顺序及功能
---------------------------------------------------------------------------------
SELECT 字段名 5.查询的内容
FROM 表名 1.数据来源
WHERE 条件 2.过滤数据行
GROUP BY 分组字段 3.进行分组
HAVING 分组后的过滤 4.过滤分组后的数据
ORDER BY 字段名 6.进行排序
LIMIT 显示的行数 OFFSET 删除的行数
---------------------------------------------------------------------------------
其结构实现的功能
SELECT FROM ,实现查询哪一个表中的什么数据,是查询一个表中的数据的必不可少的组成部分。
WHERE ,是初步对表中的数据进行筛选。
GROUP BY ,是对表中的数据进行分组。
HAVING ,是对分组后的数据进行的筛选。
ORDER BY , 是对查找完的数据进行排序。
LIMIT OFFSET ,是将查询后的结果显示出满足一定条件的数量(先执行OFFSET删除部分行的数据,在执行LIMIT显示部分行的数据)。
三、注意
WHERE 与 GROUP BY的区别
1. WHERE是在分组前对个体进行筛选,HAVING是分组之后对群体进行筛选。
2. WHERE可以独立存在,HAVING必须依赖于GROUP BY子句。
3. WHERE不适用统计函数,HAVING通常使用统计函数。
一个LIMIT OFFSET的‘分页’操作
设每页显示的条数为n,当前页码为m,得分页查询公式为:
SELECT * FROM 表名 LIMIT n OFFSET (m-1)*n;
分析:LIMIT OFFSET是对一行行数据进行的截取与删除。‘分页’的原理就是用OFFSET将你需要显示数据之前的数据全部删除,然后用LIMIT显示出你需要的行数。
![](https://i-blog.csdnimg.cn/blog_migrate/14a088731446a78f2e346f81e0344491.png)
橙色为数据,蓝色与绿色为页,想要只显示第三页(绿色页),就需要先用OFFSET删除前两页,然后用LIMIT再选第一页(因为已经删除了前两页蓝色的,所以第一页就是想要的那一页绿色的)。
套用公式
SELECT * FROM 表名 LIMIT n OFFSET (m-1)*n;
先进行删除数据:
OFFSET (3-1)*3 将前两页的6条数据删除(删除前两个蓝色页)
再进行显示数据
LIMIT 3 显示3条数据(只显示绿色页)