码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 图解 SQL 执行顺序,通俗易懂!


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

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

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

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

    • group by 分组

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

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

    • 将查询结果去重distinct

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

    数据的关联过程

    数据库中的两张表

    from&join&where

    用于确定我们要查询的表的范围,涉及哪些表。另外,最新最全的 MySQL 面试题整理好了,微信搜索Java面试库小程序在线刷题。

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

    from table1 join table2 on table1.id=table2.id 

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

    from table1,table2 where table1.id=table2.id 

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

    group by

    按照我们的分组条件,将数据进行分组,但是不会筛选数据。最新面试题整理好了,大家可以在Java面试库小程序在线刷题。

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

    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无法实现的。

    当前数据分组情况

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

    select

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

    select employee.id,distinct name,salary, avg(salary)
    

    将各组having之后的数据再合并数据。最新面试题整理好了,大家可以在Java面试库小程序在线刷题。

    order by

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

    limit

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

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

  • 相关阅读:
    SpringCloud之入门
    用户中心系统开发--表设计以及表说明
    [附源码]Python计算机毕业设计Django的中点游戏分享网站
    Lingo基础语法笔记
    十年后依然火热,大厂内部强推Spring Boot实战类图书
    “蔚来杯“2022牛客暑期多校训练营5 I题: Board Game
    Compose中的FlowLayout
    两台电脑mysql数据迁移,各版本mysql迁移(亲测)
    新形势下农商行数据安全体系建设的思考
    Redis集群
  • 原文地址:https://blog.csdn.net/m0_73311735/article/details/126765212
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号