0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SQL的执行顺序图解

jf_ro2CN3Fa 来源:csdn 2023-09-16 12:49 次阅读

数据的关联过程

from&join&where

group by

having&where

select

order by

limit

这是一条标准的查询语句:

e509d22c-53b0-11ee-a25d-92fbcf53809c.png

这是我们实际上SQL执行顺序:

我们先执行from,join来确定表之间的连接关系,得到初步的数据

where对数据进行普通的初步的筛选

group by 分组

各组分别执行having中的普通筛选或者聚合函数筛选。

然后把再根据我们要的数据进行select,可以是普通字段查询也可以是获取聚合函数的查询结果,如果是集合函数,select的查询结果会新增一条字段

将查询结果去重distinct

最后合并各组的查询结果,按照order by的条件进行排序

eb1453cc-53b0-11ee-a25d-92fbcf53809c.png

数据的关联过程

数据库中的两张表

eb5d540a-53b0-11ee-a25d-92fbcf53809c.png

from&join&where

用于确定我们要查询的表的范围,涉及哪些表。

选择一张表,然后用join连接

fromtable1jointable2ontable1.id=table2.id

选择多张表,用where做关联条件

fromtable1,table2wheretable1.id=table2.id

我们会得到满足关联条件的两张表的数据,不加关联条件会出现笛卡尔积。

eb7739b0-53b0-11ee-a25d-92fbcf53809c.png

group by

按照我们的分组条件,将数据进行分组,但是不会筛选数据。

比如我们按照即id的奇偶分组

eb918a86-53b0-11ee-a25d-92fbcf53809c.png

having&where

having中可以是普通条件的筛选,也能是聚合函数。而where只能是普通函数,一般情况下,有having可以不写where,把where的筛选放在having里,SQL语句看上去更丝滑。

使用where再group by

先把不满足where条件的数据删除,再去分组

使用group by再having

先分组再删除不满足having条件的数据,这两种方法有区别吗,几乎没有!

举个例子:

100/2=50,此时我们把100拆分(10+10+10+10+10…)/2=5+5+5+…+5=50,只要筛选条件没变,即便是分组了也得满足筛选条件,所以where后group by 和group by再having是不影响结果的!

不同的是,having语法支持聚合函数,其实having的意思就是针对每组的条件进行筛选。我们之前看到了普通的筛选条件是不影响的,但是having还支持聚合函数,这是where无法实现的。

当前数据分组情况

eb918a86-53b0-11ee-a25d-92fbcf53809c.png

执行having的筛选条件,可以使用聚合函数。筛选掉工资小于各组平均工资的having salary

ebc315f6-53b0-11ee-a25d-92fbcf53809c.png

select

分组结束之后,我们再执行select语句,因为聚合函数是依赖于分组的,聚合函数会单独新增一个查询出来的字段,这里用紫色表示,这里我们两个id重复了,我们就保留一个id,重复字段名需要指向来自哪张表,否则会出现唯一性问题。最后按照用户名去重。

selectemployee.id,distinctname,salary,avg(salary)

ebd4b950-53b0-11ee-a25d-92fbcf53809c.png

将各组having之后的数据再合并数据。

f1e28674-53b0-11ee-a25d-92fbcf53809c.png

order by

最后我们执行order by 将数据按照一定顺序排序,比如这里按照id排序。如果此时有limit那么查询到相应的我们需要的记录数时,就不继续往下查了。

f1fff146-53b0-11ee-a25d-92fbcf53809c.png

limit

记住limit是最后查询的,为什么呢?假如我们要查询年级最小的三个数据,如果在排序之前就截取到3个数据。实际上查询出来的不是最小的三个数据而是前三个数据了,记住这一点。

我们如果limit 0,3窃取前三个数据再排序,实际上最少工资的是2000,3000,4000。你这里只能是4000,5000,8000了。

f21331c0-53b0-11ee-a25d-92fbcf53809c.png

编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6511

    浏览量

    87600
  • SQL
    SQL
    +关注

    关注

    1

    文章

    738

    浏览量

    43461

原文标题:图解 SQL 的执行顺序,一目了然!

文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    MySQL的执行过程 SQL语句性能优化常用策略

    回顾 MySQL 的执行过程,帮助介绍如何进行 sql 优化。
    的头像 发表于 12-12 10:26 313次阅读
    MySQL的<b class='flag-5'>执行</b>过程 <b class='flag-5'>SQL</b>语句性能优化常用策略

    DRDS分布式SQL引擎—执行计划介绍

    摘要: 本文着重介绍 DRDS 执行计划中各个操作符的含义,以便用户通过查询计划了解 SQL 执行流程,从而有针对性的调优 SQL。DRDS分布式S
    发表于 07-12 17:01

    连接oracle数据库,封装sql执行子vi

    连接oracle数据库,封装sql执行子vi。连接oracle数据库可以安装oracle客户端,或者通过odbc的方式去连接。连接后,可通过封装的子vi,执行sql语句。
    发表于 07-03 12:07

    Win7下sql server 2008 安装图解教程

    以下为:Win7下sql server 2008 安装图解教程 注意: 1. 先走控制面板里找到iis安装,步骤如下 点程序, 点打开或关闭Windows功能 在Internet information servers 可承载的web核心上打勾,点确定,
    发表于 10-22 14:46 2.1w次阅读
    Win7下<b class='flag-5'>sql</b> server 2008 安装<b class='flag-5'>图解</b>教程

    mfc程序执行流程小结,MFC程序的执行顺序

     摘要:本文章主要以MFC程序的执行流程、执行顺序执行过程的剖析做出的结论,下面一起来看看原文的具体介绍。
    发表于 12-08 15:48 9221次阅读
    mfc程序<b class='flag-5'>执行</b>流程小结,MFC程序的<b class='flag-5'>执行</b><b class='flag-5'>顺序</b>

    如何通过explain来验证sql执行顺序

    关于 sql 语句的执行顺序网上有很多资料,但是大多都没进行验证,并且很多都有点小错误,尤其是对于 select 和 group by 执行的先后
    的头像 发表于 09-07 16:24 2321次阅读
    如何通过explain来验证<b class='flag-5'>sql</b>的<b class='flag-5'>执行</b><b class='flag-5'>顺序</b>

    一条SQL语句是怎么被执行

    一直是想知道一条SQL语句是怎么被执行的,它执行顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了。 本文将从MySQL总体架构---》查询
    的头像 发表于 09-12 09:44 1314次阅读
    一条<b class='flag-5'>SQL</b>语句是怎么被<b class='flag-5'>执行</b>的

    sql server执行os-shell

    条件:数据库权限必须是dba权限可利用sql-shll进行命令执行,部分常用ql语句:
    的头像 发表于 10-24 17:42 1597次阅读

    系统上线时SQL脚本的9大坑

    有些小公司,SQL脚本是开发自己执行的,有很大的风险。 有些大厂,有专业的DBA把关,但DBA也不是万能的,还是有可能会让一些错误的SQL脚本被生产环境执行了,比如:update
    的头像 发表于 03-24 14:25 308次阅读

    sql执行顺序优先级是什么

    这是我们实际上SQL执行顺序: 我们先执行from,join来确定表之间的连接关系,得到初步的数据 where对数据进行普通的初步的筛选
    发表于 08-18 12:37 568次阅读
    <b class='flag-5'>sql</b><b class='flag-5'>执行</b><b class='flag-5'>顺序</b>优先级是什么

    sql where条件的执行顺序

    SQL语句中的WHERE条件是用来筛选数据的,它决定了哪些数据会被返回给用户。WHERE条件的执行顺序是影响SQL语句性能的一个重要因素,正确地理解和优化WHERE条件的
    的头像 发表于 11-23 11:31 1021次阅读

    sql的where条件多个and顺序

    SQL中,WHERE子句用于过滤查询结果以提供符合特定条件的记录。当有多个AND操作符时,WHERE子句的顺序并不会影响查询结果,但是正确的AND操作符顺序可以提高查询的可读性和性能。 首先,我们
    的头像 发表于 11-23 11:33 1930次阅读

    oracle执行sql查询语句的步骤是什么

    Oracle数据库是一种常用的关系型数据库管理系统,具有强大的SQL查询功能。Oracle执行SQL查询语句的步骤包括编写SQL语句、解析SQL
    的头像 发表于 12-06 10:49 409次阅读

    Oracle如何执行sql脚本文件

    Oracle是一种关系型数据库管理系统,可用于存储、查询和管理大量的数据。在Oracle中,可以通过执行SQL脚本文件来一次性地执行多个SQL语句或者批量处理数据。在下面的文章中,我将
    的头像 发表于 12-06 10:51 2487次阅读

    plc梯形图顺序执行的原则是什么

    PLC(可编程逻辑控制器)梯形图(或称为梯形逻辑图)是用于描述和编程PLC的一种常用图形化编程语言。它采用了一种顺序执行的原则,即按照图中元素的排列顺序从左到右、从上到下依次执行。 梯
    的头像 发表于 02-05 11:13 754次阅读