GROUP BY,WHERE,HAVING之间的区别和用法

哎呀,这个 SQL 语句中的东西真的很容易混淆。
我们来一一分解。

查看他们在哪里执行不同的任务,将它们分组并确保他们完成不同的任务。

1 .首先,我们来谈谈在哪里。
这东西是干什么用的?筛选。
我告诉你,这是按照执行顺序需要完成的第一个任务。
在分组和拥有之前。
如果要过滤掉数据,请使用where。
例如,如果要查看部门ID为2 的用户,可以在where后面写入“部门ID=2 ”。
就是这么简单。
看一下这个例子: sql 选择城市、人数()、年龄 来自 dbo.user 其中部门 ID=2 ; 此处,部门 ID=2 过滤器仅显示部门 ID 等于 2 的用户。

2 .我们来谈谈分组依据。
这东西是干什么用的?团体。
使用Where 过滤数据后,想要按一个或多个字段对数据进行分类,例如:例如,按城市和年龄,您可以使用“按城市和年龄分组”。
请注意,此处选择后返回的字段要么在 group by 中,要么在聚合函数中(例如 count()、sum() 等)。
看看这个例子: sql 选择城市、人数()、年龄 来自 dbo.user 其中部门 ID=2 按城市、年龄分组; 这里,按城市和年龄分组就是将部门ID为2 的用户分组,然后按城市和年龄分组。

3 终于,有了。
这东西是干什么用的?再次过滤组结果。
请注意,“having”用在“group by”之后。
只能用于按查询结果分组,不能单独使用。
如果您想通过分组来过滤满足特定条件的组,请使用“have”。
例如,如果您想查看年龄超过 4 0 岁的群组,请输入“Age>4 0”。
查看示例: sql 选择城市、人数()、年龄 来自 dbo.user 其中部门 ID=2 按城市、年龄分组 年龄 > 4 0 岁; 这里,指定“年龄 > 4 0”意味着过滤,并且仅考虑年龄超过 4 0 岁的群体。

我们来谈谈顺序。
这东西是干什么用的?种类。
让我告诉你,它通常出现在句子的末尾以澄清事实。
asc 是升序,desc 是降序。
例如,如果您想按成绩升序排序: sql 选择课程编号和年级 来自分数 WHERE 学生 ID='2 006 09 1 1 1 ' 按类别 ASC 排序; 这里,ORDER BY Scores ASC 将学号为“2 006 09 1 1 1 ”的分数从小到大排序。

你看where是先过滤,Group By是分组,Have是对分组结果进行过滤,最后Sort By是排序。
顺序一定不能搞混,必须一次一个地完成。

SQL多表查询的几种连接方式

ON 仅连接,WHERE 仅过滤。

内连接分为显式和隐式两种,隐式不带ON,显式带ON。
自然连接是没有用的,会自动找到具有相同名称的列。
独立连接意味着连接到自身,MySQL 不支持完整的外部连接。

外连接分为左连接和右连接,左连接全部来自右表,右连接全部来自左表,全连接都是两个表。
ON之后,放入连接状态和WHERE来过滤结果。

交叉连接是笛卡尔积,不使用ON,直接乘法。

根据您的需求选择联接类型:对于相关相似性使用内部联接,对于子集使用左右联接,对于完整性使用完全联接,对于差异使用联合联接。
多表连接可以混合使用,先内连接,后外连接。

您具体想使用哪一个?