MySQL 基础 ———— SQL语句的执行顺序与 LIMIT 子句
引言
到目前为止,已经总结了常见的SQL子句,包括 SELECT 、FROM、JOIN ... ON、WHERE、GROUP BY、HAVING、ORDER BY。
虽然SQL的书写顺序是固定的,但在MySQL引擎中执行的顺序并不完全和书写顺序一致。除了上述这些子句,下面将会介绍另一个比较常用的子句 LIMIT ,并且总结一下SQL 语句的执行顺序。
一、LIMIT 子句
LIMIT 子句用于限制查询结果的数量,也常常作为网站页面展示时分页查询的基础支持。
LIMIT 子句可以接收 1 个参数,或 2 个参数。
当接收 1 个参数时,表示仅输出指定的条数,比如,我们查询员工表里薪酬大于平均工资的员工信息,然后按工资降序,取前两个:
首先查薪水大于平均工资的员工信息:
SELECT * FROM emp
WHERE salary > (SELECT AVG(salary) FROM emp
)
然后,根据工资降序,并选出头两个:
SELECT * FROM emp
WHERE salary > (SELECT AVG(salary) FROM emp
)
ORDER BY salary DESC
LIMIT 2
一般,我们使用 LIMIT 子句都会配合 ORDER BY 进行某种业务要求上的排序,然后再进行限制。
大概 LIMIT 子句接收两个参数的时候,表示从某个 index 下标开始,查询指定条数,格式是:
LIMIT record_index, size
其中 record_index 是从 0 开始的,也就是说,表或结果集中的第一条记录就是第 0 条,第二条是 第 1 条,依此类推。size 代表查询出来的数量。
比如下面这条语句:
SELECT * FROM student
ORDER BY class_id, stu_age
LIMIT 0, 10
这句SQL的含义是将 LIMIT 子句之前查询出来的结果集(排序之后),从第 0 条开始,显示 10 条,即第 0 到第 9 条。
如果想再进行 10 条输出,那么就可以改变 record_index 的值,继续往后输出:
SELECT * FROM student
ORDER BY class_id, stu_age
LIMIT 10, 10
于是,就有了初步的分页效果。通过总结,我们也可以得出与页面分页信息有这样的关系:
LIMIT (pageNum - 1) * size, size
其中,pageNum 代表第几页,从第一页开始,这是一个页面给用户展示的信息,肯定不会告诉用户要从第 0 页开始。size 代表每页显示的记录条数,这个值可以由用户自定义,也可以由产品固定写死,具体根据实际需要来设计。总之,这个公式说明了实际业务场景中的页号、记录条数与 LIMIT 子句的关系,可以通过它来设计分页功能。
二、SQL 语句执行顺序
到目前为止,比较常见的子句,及其内部执行顺序如下:
第7步:SELECT 查询列表
第1步:FROM 表名
第2步:JOIN 关联表
第3步:ON 关联条件
第4步:WHERE 筛选条件
第5步:GROUP BY 分组字段
第6步:HAVING 分组后筛选条件
第8步:ORDER BY 排序字段
第9步:LIMIT 输出限制
上面的子句列表中,冒号右侧是 SQL 各个子句的书写顺序,冒号左侧的 “第 xx 步” 是 MySQL 内部的实际执行顺序。
粗体标出的 SELECT 、FROM、WHERE 几乎是每个SQL 都会用到(但不绝对,有时候甚至一个 SELECT 就是一条SQL)。
其中唯一与书写顺序不同的执行就是 SELECT 子句了,虽然写在SQL语句的最前面,执行顺序却相对靠后。而其中大部分执行步骤与书写步骤保持一致。
综上,就是关于SQL 语句执行顺序 和 LIMIT 子句的总结。欢迎文末留言。
MySQL 基础 ———— SQL语句的执行顺序与 LIMIT 子句相关推荐
- 【MySQL】九、数据排序(升序 order by ... asc,降序 desc),sql语句的执行顺序
文章目录 1. 语法 2. 案例 (1)按照工资升序,找出员工名和薪资. (2)按照工资降序,找出员工名和薪资. (3)按照工资的降序排列,当工资相同的时候在按照名字的升序排列. (4)找出员工岗位是 ...
- SQL语句的执行顺序以及流程
目录 1.执行FROM语句 2.执行ON过滤 3.添加外部行 4.执行WHERE过滤 5.执行GROUP BY分组 6.执行HAVING过滤 7.SELECT列表 8.执行DISTINCT子句 9.执 ...
- 面试题:SQL语句的执行顺序
SQL语句的执行顺序,学了才知道还有这么多学问 查询语句都是从 FROM 开始执行的.执行过程中,每个步骤都会为下一个步骤生成一个虚拟表,这个虚拟表将作为下一个执行步骤的输入. 具体解析 FROM 执 ...
- SQL SERVER 一个SQL语句的执行顺序
SQL SERVER 一个SQL语句的执行顺序 原文:SQL SERVER 一个SQL语句的执行顺序 一个SQL 语句的执行顺序 1.From (告诉程序 来自哪张表 如果是表表达式 依旧是如此顺序 ...
- Sqlserver,Mysql基础SQL语句
Sqlserver,Mysql基础SQL语句 SqlServer 建表 修改字段默认值 修改表名 修改字段名 添加字段 例子 更改字段 删除字段 添加表注释 添加字段注释 数据排序 方法一 ROW_N ...
- sql语句的执行顺序以及流程(最新,最全,直接用)
熟练掌握sql语句的执行顺序,才能避免编程中各种bug和错误. 文章目录 一.Select 语句完整的执行顺序 1.from 子句组装来自不同数据源的数据+(ON过滤器)或(JOIN 添加外部行): ...
- 关于SQL语句的执行顺序
首先,要清楚在一select语句中都会用到哪些关键字: -----------select -----------from -----------join -----------where ----- ...
- 数据库:SQL语句的执行顺序,及每一步的详细解释
一.SQL语句的执行顺序举例(sqlServer版): (8) SELECT (9) DISTINCT (11) <TOP_specification> <select_list&g ...
- hive 把mysql语句执行_Hive SQL 语句的执行顺序
提示 Hive SQL 教程 编写中,使用过程中有任何建议,提供意见.建议.纠错.催更加微信 sinbam. 当我们写了一个 sql,但是执行起来很慢,这时如果我们知道这个sql的底层执行流程是怎样的 ...
最新文章
- 开源项目哪家强?Github年终各大排行榜超级盘点(内附开源项目学习资源)
- JS-JavaScript String 对象-string对象方法1:fromCharCode()、charCodeAt()
- FD.io/VPP — VNF 应用场景
- php self this parent
- 3.6 权值初始化-机器学习笔记-斯坦福吴恩达教授
- linux统计某个目录大小,Linux下统计某个目录的文件个数(转)
- 云原生那些顶级开源项目,你都用过哪些?
- centos7 安装 JDK环境
- 【bzoj 4675】 点对游戏
- SSL和数字证书服务慨述(4)
- ezd格式文件怎么打开_EPLAN Electric P8 中的 EDZ 文件格式
- matlab怎么求过渡矩阵,求过渡矩阵的方法
- python整数的用法整理
- 51单片机学习入门(三):串口
- 扩展卡尔曼滤波EKF进行锂电池SOC估计的C语言版本实现,和matlab版本一样包含定参和FFRLS两种情况
- android 7.0刷机教程,【亲测】安卓7.0官方底包线刷教程+刷入第三方recovery+解密+root...
- win7计算机系统还原,win7怎么系统还原 还原步骤详解
- 处理器仿存带宽_存储系统性能 - 带宽计算
- 利器推荐:搜刮一批办公常用软件,你用过哪一款?
- 华师大 OJ 3053
热门文章
- 保姆级教程,终于搞懂脏读、幻读和不可重复读了!
- 多图带你彻底理解Java中的21种锁!
- 聊一聊开发常用小工具
- Qt6 在线安装图文步骤
- KNN算法检测手势动作
- include和require区别
- char数组拷贝wchar数组
- php搜索图片不显示不出来了,PHP CURL采集百度搜寻结果图片不显示问题的解决方法【第1/4页】...
- python2.7如何安装库_python 2.7 安装目录python如何连接数据库
- 小程序中ajax返回数据,微信小程序调用接口返回数据或提交数据