专栏名称: Java基基
一个苦练基本功的 Java 公众号,所以取名 Java 基基
目录
相关文章推荐
非法加冯  ·  PostgreSQL取得对MySQL的压倒性优势 ·  8 小时前  
非法加冯  ·  PostgreSQL取得对MySQL的压倒性优势 ·  8 小时前  
非法加冯  ·  对比Oracle与PostgreSQL事务系统 ·  昨天  
Alibaba Cloud International  ·  刷新世界纪录!阿里云PolarDB凭借创新的 ... ·  2 天前  
Alibaba Cloud International  ·  刷新世界纪录!阿里云PolarDB凭借创新的 ... ·  2 天前  
数据中心运维管理  ·  能源行业加大力度解决数据中心电力短缺问题 ·  3 天前  
51好读  ›  专栏  ›  Java基基

图解 SQL 执行顺序,通俗易懂!

Java基基  · 公众号  · 数据库  · 2024-09-30 17:03

主要观点总结

文章介绍了关于社群交流、资料分享、开源项目和数据库查询语句的内容。包括求职交流、项目实战、面试准备等。同时,文章详细解释了数据库查询语句的执行顺序和各个组成部分的作用,如from、join、where、group by、having、select、order by和limit等关键词的使用和关联过程。

关键观点总结

关键观点1: 社群交流和资料分享

文章介绍了一个有用的社群,提供了一对一交流、面试小册、简历优化、求职解惑等服务,并分享了开源项目和部分资料,如《项目实战(视频)》、《互联网高频面试题》等。

关键观点2: 开源项目和数据库查询语句介绍

文章提到了一个开源项目,包括前端管理后台、微信小程序、后端架构等功能,并提供了数据库查询语句的详细解释,包括查询语句的组成部分和执行顺序,如from、join、where、group by等关键词的使用。

关键观点3: 数据库查询语句的执行顺序和关联过程

文章详细解释了数据库查询语句的执行顺序和关联过程,包括from确定查询表的范围,join连接表,where做关联条件,group by按分组条件分组数据,having进行分组后的条件筛选,select查询数据,order by排序结果,limit限制结果集等。


正文

👉 这是一个或许对你有用 的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入 芋道快速开发平台 知识星球。 下面是星球提供的部分资料:

👉 这是一个或许对你有用的开源项目

国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。

功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号等等功能:

  • Boot 仓库:https://gitee.com/zhijiantianya/ruoyi-vue-pro
  • Cloud 仓库:https://gitee.com/zhijiantianya/yudao-cloud
  • 视频教程:https://doc.iocoder.cn
【国内首批】支持 JDK 21 + SpringBoot 3.2.2、JDK 8 + Spring Boot 2.7.18 双版本

来源:blog.csdn.net/weixin_44141495/
article/details/108744720/

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

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

  • 我们先执行from,join来确定表之间的连接关系,得到初步的数据
  • where对数据进行普通的初步的筛选
  • group by 分组
  • 各组分别执行having中的普通筛选或者聚合函数筛选。
  • 然后把再根据我们要的数据进行select,可以是普通字段查询也可以是获取聚合函数的查询结果,如果是集合函数,select的查询结果会新增一条字段
  • 将查询结果去重distinct
  • 最后合并各组的查询结果,按照order by的条件进行排序

数据的关联过程

数据库中的两张表

from&join&where

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

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

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

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

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

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

group by

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

比如我们按照即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之后的数据再合并数据。







请到「今天看啥」查看全文