SQL 查询总是先执行SELECT语句吗?你们都错了!
2021/8/6 19:05:52
本文主要是介绍SQL 查询总是先执行SELECT语句吗?你们都错了!,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
SELECT语句中子句的顺序。SELECT语句中使用时必须遵循的次序。
经过一段时间的学习,我们知道了SELECT语句超简版的语法如下:
SELECT 字段名 FROM 表名
后来,我们又陆续学习了WHERE/GROUP BY/HAVING/ORDER BY等子句……
因此,我们今天就来说下SELECT语句较为完整的语法结构(如下)与它的执行顺序是怎么样的?
SELECT [DISTINCT] [TOP] 字段名 FROM 表名 [WHERE] 行级过滤 [GROUP BY] 分组 [HAVING] 组级过滤 [ORDER BY] 排序
文字版较完整的SELECT语句执行顺序如下:
1)SQL首先执行的是FROM子句,根据FROM子句中指定的一个或多个表创建表。
2)如果存在WHERE子句,则对步骤1获得的表进行条件过滤,删除不符合条件的行记录。
3)如果存在GROUP BY子句,则对步骤2生成的表按指定字段进行分组,生成一份新的数据表。
4)如果存在HAVING子句,则对步骤3的表按指定条件进行过滤,删除不满足过滤条件的记录。
5)执行SELECT子句,删除不包含在SELECT子句所指定的字段。如果SELECT子句中包含关键字DISTINCT,则执行去重运算。
6)如果有ORDER BY子句,则按指定的排序规则对结果表进行排序操作。
7)如果有TOP谓词,则再进行TOP运算。
表格版较完整的SELECT语句执行顺序如下:
顺序 |
子句 |
说明 |
是否必须使用 |
1 |
FROM |
从中检索数据的表 |
仅在从表中选择数据时使用 |
2 |
WHERE |
行级过滤 |
否 |
3 |
GROUP BY |
分组说明 |
仅在按组计算聚集时使用 |
4 |
HAVING |
组级过滤 |
否 |
5 |
SELECT |
要返回的列或表达式 |
是 |
6 |
DISTINCT |
返回唯一不同的值 |
否 |
7 |
ORDER BY |
输出排序顺序 |
否 |
8 |
TOP |
规定要返回的记录的数目 |
否 |
总结:SQL的执行顺序,既不是语句的先后顺序,也不是由内到外的顺序;比如,最先出现的SELECT 子句并非首先执行的,它的执行顺序处在HAVING之后和ORDER BY之前。DISTINCT的位置处在TOP之前,但TOP的运算顺序又在DISTINCT之后。
点击关注“SQL数据库运维”,后台回复关键字:进群,带你进入高手如云的技术交流群。
这篇关于SQL 查询总是先执行SELECT语句吗?你们都错了!的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享