前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >不要被长SQL吓到,深刻理解SQL执行顺序

不要被长SQL吓到,深刻理解SQL执行顺序

作者头像
吾非同
发布2020-10-23 15:54:37
8140
发布2020-10-23 15:54:37
举报
文章被收录于专栏:吾非同吾非同

不要被长SQL吓到,深刻理解SQL执行顺序

软件测试工程师,基础技能之一就是数据库,不管是基础的功能测试还是自动化测试、性能测试,都需要应用到数据库知识,并且要对数据库的学习不断深入,多学习一些高级的用法和原理。

当我们需要写一个比较长的SQL语句时,常常分不清哪个关键字在前哪个在后,这是因为SQL 语句的执行顺序跟它语法顺序并不一致,导致我们的书写顺序和实际执行有偏差。

示例表

执行如下SQL语句:

  1. select Sclass,count(Ssex) as count
  2. from student
  3. where Sage>18
  4. group by Sclass
  5. having count > 1
  6. order by Sclass desc
  7. limit 2;

结果如下:

mysql的书写顺序如下:

  1. SELECT DISTINCT
  2. < select_list >
  3. FROM
  4. < left_table > < join_type >
  5. JOIN < right_table > ON < join_condition >
  6. WHERE
  7. < where_condition >
  8. GROUP BY
  9. < group_by_list >
  10. HAVING
  11. < having_condition >
  12. ORDER BY
  13. < order_by_condition >
  14. LIMIT < limit_number >

mysql解析器的执行顺序

  1. 1 FROM <left_table>
  2. 2 ON <join_condition>
  3. 3 <join_type> JOIN <right_table>
  4. 4 WHERE <where_condition>
  5. 5 GROUP BY <group_by_list>
  6. 6 HAVING <having_condition>
  7. 7 SELECT
  8. 8 DISTINCT <select_list>
  9. 9 ORDER BY <order_by_condition>
  10. 10 LIMIT <limit_number>
  • FROM:指定了要查询的表
  • where:过滤表中数据的条件
  • group by:对过滤的数据进行分组
  • having:对上面已经分组的数据进行过滤的条件
  • select:查看结果集中的哪个列,或列的计算结果
  • order by :对查询结果进行排序
  • limit:取出指定行的数据,返给用户

上述SQL示例语句执行顺序拆解如下:

所以查询语句并不是从SELECT开始执行的,而是按照下面的顺序执行:FROM子句->WHERE子句->GROUP BY子句->HAVING子句->SELECT子句->ORDER BY子句->LIMIT子句 每个子句执行后都会产生一个虚拟中间表,供接下来的子句使用,如果不存在某个子句,就跳过 。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 吾非同 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 不要被长SQL吓到,深刻理解SQL执行顺序
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档