主要观点总结
文章介绍了关于社群交流、资料分享、开源项目和数据库查询语句的内容。包括求职交流、项目实战、面试准备等。同时,文章详细解释了数据库查询语句的执行顺序和各个组成部分的作用,如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 双版本
这是一条标准的查询语句:
这是我们实际上SQL执行顺序:
-
我们先执行from,join来确定表之间的连接关系,得到初步的数据
-
-
-
各组分别执行having中的普通筛选或者聚合函数筛选。
-
然后把再根据我们要的数据进行select,可以是普通字段查询也可以是获取聚合函数的查询结果,如果是集合函数,select的查询结果会新增一条字段
-
-
最后合并各组的查询结果,按照order by的条件进行排序
数据库中的两张表
用于确定我们要查询的表的范围,涉及哪些表。
选择一张表,然后用join连接
from table1 join table2 on table1.id=table2.id
选择多张表,用where做关联条件
from table1,table2 where table1.id=table2.id
我们会得到满足关联条件的两张表的数据,不加关联条件会出现笛卡尔积。
按照我们的分组条件,将数据进行分组,但是不会筛选数据。
比如我们按照即id的奇偶分组
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语句,因为聚合函数是依赖于分组的,聚合函数会单独新增一个查询出来的字段,这里用紫色表示,这里我们两个id重复了,我们就保留一个id,重复字段名需要指向来自哪张表,否则会出现唯一性问题。最后按照用户名去重。
select employee.id,distinct name,salary, avg(salary)
将各组having之后的数据再合并数据。