上篇复习:
聚合函数
1.COUNT(列名/常量/*)#统计记录的条数,推荐使用count(*)
2.SUM(列名)# 求和,列必须是数值类型
ROUND(数值,小数点的位数)#格式化小数输出格式
3.AVG(列名)# 求平均值,列必须是数值类型
4. MAX(列名) # 求最大值,列必须是数值类型
5. MIN(列名) # 求最小值,列必须是数值类型
分组查询
select 要分组的列,聚合函数(列名)from 表名 group by 要分组的列 having 对分组的结果进行过滤
WHERE子句与HAVING子句的区别
1.WHERE子句:用于在分组前过滤数据行。
2.HAVING子句:用于在分组后对分组结果进行筛选,特别适用于聚合函数的条件过滤。
3.HAVING与GROUP BY:通常与GROUP BY一起使用,便于对分组后的结果进行筛选。
4.WHERE和HAVING的结合使用:先使用WHERE子句进行行级筛选,然后再使用子句HAVING进行分组后的筛选。
联合查询:
1.使用联合查询的步骤
-
明确查询需求 :确定要从两个(或多个)表中查询哪些数据。明确哪些表包含所需信息,哪些字段之间有关系。(笛卡尔积)
-
选择 JOIN 类型:根据需求选择合适的 JOIN 类型:
- INNER JOIN(内连接):只返回两个表中都有匹配的数据。
- LEFT JOIN(左连接) :返回左表的所有数据,右表中没有匹配时显示
NULL
。 - RIGHT JOIN(右连接) :返回右表的所有数据,左表中没有匹配时显示
NULL
。 - FULL JOIN(全连接) :(MySQL 需用
UNION
实现):返回两个表中的所有数据。 - CROSS JOIN(交叉连接):返回两个表的笛卡尔积,生成所有可能的组合。
-
编写 JOIN 查询语句 :编写 SQL 查询语句,指定表之间的连接条件(
ON
条件),通常是表之间的主键和外键。例如:
-
(可选)添加过滤条件 :使用
WHERE
子句进一步限制结果集,比如查询特定条件下的记录。 -
执行并验证查询结果 :运行查询,检查返回的结果是否符合需求。可以使用一些聚合函数(如
COUNT()
、SUM()
等)来检查结果数量。
看完上述使用联合查询的步骤后,相信大家已经对联合查询有了一定的理解。
那么为什么要使用联合查询呢?
联合查询的主要作用是从多个表中查询相关数据,并将数据组合成有意义的结果集。有以下特点
-
避免数据冗余:在设计数据库时,通常会使用范式分割数据,减少冗余。联合查询帮助从分散的表中合并数据,避免重复存储大量数据。
-
高效的数据管理:当数据分布在多个表中时,通过 JOIN 可以快速检索关联数据。例如,在订单系统中,可以通过 JOIN 将订单表和商品表关联,以查看某个订单的所有商品信息。
-
多表关系查询:大部分实际应用场景的数据是相互关联的,比如员工和部门、学生和课程、客户和订单。联合查询能够从关联表中提取相关数据,满足业务需求。
-
简化查询逻辑:在单条 SQL 语句中获取多个表的关联数据,简化了数据提取和处理的逻辑,避免了在应用程序中多次访问数据库的需求。
我将从使用联合查询的步骤中一 一为大家讲解:
1.笛卡尔积的讲解
概念:是指将两个表中的每一条记录都与另一个表中的每一条记录组合,生成所有可能的组合。如果表 A 有 m
条记录,表 B 有 n
条记录,那么笛卡尔积的结果会包含 m * n
条记录。
笛卡尔积通常由 CROSS JOIN 生成。若没有 ON
条件或 WHERE
条件限制,其他类型的 JOIN 也会产生笛卡尔积,然后再从中筛选符合条件的记录。
假设我们有两个表:
INSERT INTO school VALUES (1,'李白'),(2,'白居易');
INSERT INTO subject VALUES (1,'Math'),(2,'English'),(3,'Science');
对这两个表执行 CROSS JOIN:
SELECT school.name, subject.subject01
FROM school
CROSS JOIN subject;
解释 :每个
A
表的记录和B
表的记录组合在一起,生成了 2(表 A 行数)× 3(表 B 行数)= 6 条记录。
笛卡尔积的作用
- 组合所有可能的情况:笛卡尔积列出了两个表之间所有可能的组合,这在需要生成所有情况(如测试数据、组合分析等)时很有用。
- 通常需避免笛卡尔积 :在大部分实际应用中,笛卡尔积会生成大量无用的组合数据,造成查询负担。因此,如果不需要所有组合,应该加上
ON
条件限制,以避免生成笛卡尔积。
2.内连接(INNER JOIN)
内连接(INNER JOIN) 是数据库中最常用的连接方式之一,作用是从多个表中获取符合条件的数据。内连接只返回在两个表中都有匹配关系的记录,未匹配的记录不会出现在结果中。
内连接的工作原理
当我们使用内连接时,数据库会在两个表中查找满足指定条件的记录,将符合条件的记录合并在一起返回。不符合条件的记录会被过滤掉。因此,内连接的结果集仅包含在两个表中都有匹配项的记录。
内连接的语法
表1
和表2
:要进行连接的两个表。ON 表1.列 = 表2.列
:这是连接条件,指定如何在两个表之间匹配记录。通常是通过主键和外键之间的关系来连接。
示例讲解
假设我们有两个表:students
表和 courses
表。students
表记录学生的信息,courses
表记录选课信息。
students
表(学生表)
courses
表(选课表)
students
表中的student_id
是学生的唯一标识符。courses
表中的student_id
表示选课学生的编号,指向students
表中的student_id
,表示哪个学生选了这门课。
问题
我们想要查询每位选了课的学生的姓名和课程名称。
使用 INNER JOIN 查询
根据上面的问题,我们可以使用 INNER JOIN 查询 students
表和 courses
表,将符合条件的数据组合起来:
SELECT students.student_name, courses.course_name
FROM students
INNER JOIN courses ON students.student_id = courses.student_id;
解释
students.student_name
:我们选择学生表中的student_name
列,表示学生姓名。courses.course_name
:我们选择选课表中的course_name
列,表示课程名称。ON students.student_id = courses.student_id
:我们通过student_id
列将students
表和courses
表连接起来。这样可以确保只返回那些在courses
表中有匹配项的学生记录。- 只有在
students
表和courses
表中都有匹配关系的学生记录才会出现在结果中。David
没有选课,所以不会出现在结果中。
详细解析 INNER JOIN 查询流程
总结
3.LEFT JOIN(左连接)
-
选择字段 :首先,确定你需要查询哪些字段。在上面的示例中,我们选择了
students.student_name
和courses.course_name
。 -
指定表 :然后指定进行连接的表。在此例中,我们选择了
students
和courses
。 -
连接条件 :指定两个表之间如何关联。一般通过两个表的主键和外键关系进行连接。在这里,
students
表中的student_id
和courses
表中的student_id
是连接条件。 -
过滤无匹配数据 :在执行内连接时,MySQL 只会返回匹配的记录。如果某个学生没有在
courses
表中找到匹配的课程记录,那么这个学生的数据将不会出现在结果中。
INNER JOIN 的特点和适用场景
- 返回匹配记录:INNER JOIN 只返回在两个表中都有匹配关系的记录。
- 不包含 NULL:如果某个表中的记录在另一个表中没有匹配项,则这些记录不会显示在结果中。
- INNER JOIN 是 SQL 中的基本连接类型,主要用于从多个表中查询匹配的数据。
- 只返回匹配数据:INNER JOIN 查询只会返回两个表中都存在匹配条件的记录,未匹配的记录将被过滤掉。
- 查询流程:选择字段 -> 指定表 -> 定义连接条件 -> (可选)添加 WHERE 过滤条件。
- 适用场景:INNER JOIN 常用于查询两表间有严格关系的数据,比如查询订单和商品、用户和账户信息等。只希望返回那些存在匹配关系的记录。
LEFT JOIN (左连接)是 SQL 中的一种连接方式,用于从两个表中获取数据。左连接会返回左表中的所有记录,以及右表中与左表匹配的记录。如果右表中没有匹配的记录,对应的右表字段会显示为 NULL
。LEFT JOIN 常用于需要保留左表所有记录的查询,即使在右表中没有对应数据。
LEFT JOIN 的工作原理
左表 :在 FROM
关键字后面的表(第一张表)。 右表 :在 JOIN
关键字后面的表(第二张表)。
在 LEFT JOIN 中,左表中的所有记录 都会显示出来;右表中只有那些与左表匹配的记录才会显示,如果没有匹配的数据,右表的列会显示为 NULL
。
LEFT JOIN 语法
- 左表:需要保留所有记录的表。
- 右表:与左表进行匹配的表。
- ON:定义两个表之间的连接条件,通常是通过两个表之间的外键关系。
示例数据库结构
假设我们有两张表:employees
表和 departments
表。
employees
表(员工表)
departments
表(部门表)
employees
表中存储了员工的信息,每个员工有一个department_id
列,用于指向其所属部门。departments
表中存储了部门的信息。
问题
我们想要查询每个员工的姓名和其所在的部门名称。如果员工没有分配部门,那么部门名称应显示为 NULL
。
LEFT JOIN 示例代码
根据上述需求,我们可以使用 LEFT JOIN 进行查询:
SELECT employees.employee_name, departments.department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.department_id;
结果说明 :LEFT JOIN 保留了
employees
表(左表)中的所有记录。对于没有部门(即department_id
为 NULL 或无对应部门)的员工Charlie
和David
,部门名称显示为NULL
。
LEFT JOIN 查询步骤
-
指定选择字段 :在
SELECT
子句中指定需要查询的字段,如employees.employee_name
和departments.department_name
。 -
选择表和 LEFT JOIN :将
employees
表(左表)和departments
表(右表)进行 LEFT JOIN。 -
定义连接条件 :使用
ON
关键字指定连接条件,通过employees.department_id = departments.department_id
来匹配两个表的数据。 -
返回结果 :LEFT JOIN 将保留左表中所有的记录,如果右表中没有匹配项,则右表的字段将显示为
NULL
。
LEFT JOIN 使用场景
LEFT JOIN 通常用于需要查询所有左表数据的情况,即使在右表中没有对应数据。例如:
总结
- 员工和部门:查询所有员工及其所在部门,即使有的员工没有分配部门。
- 订单和支付记录:查询所有订单及其支付情况,即使有的订单还未支付。
- 学生和选课信息:查询所有学生的姓名及所选课程,即使有的学生没有选课。
更多 LEFT JOIN 示例
示例 1:查询每个员工的姓名、部门名称和部门 ID
在上面的例子中,如果想显示每个员工的 department_id
,也可以加入该字段:
-
SELECT employees.employee_name, employees.department_id, departments.department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.department_id;
-
解释 :这里加入了
employees.department_id
列,让我们看到每个员工的部门编号。如果department_id
为 NULL 或者无匹配的部门信息,department_name
列显示 NULL。
LEFT JOIN 与 INNER JOIN 的区别
- LEFT JOIN :保留左表中所有记录,右表中没有匹配的记录显示为
NULL
。 - INNER JOIN:仅返回两表中都有匹配关系的记录,不保留无匹配项的记录。
- LEFT JOIN 用于查询左表的所有记录,不管右表中是否有匹配记录。
- NULL 表示右表中没有匹配项。
- LEFT JOIN 适用于希望保留主表(左表)数据完整性的场景,比如显示所有员工及其部门信息,即使员工没有分配部门。
4.RIGHT JOIN(右连接):
1.什么是RIGHT JOIN
?
RIGHT JOIN
是SQL中的一种连接方式,用于从右表中大约所有记录,把匹配的左表记录填充在一起。如果右表有记录而左表没有对应的,记录查询结果中的这些字段会显示为NULL
。
简单来说,RIGHT JOIN
会保留右表中的所有记录,并根据条件连接左表中的记录。
2.为什么使用RIGHT JOIN
?
RIGHT JOIN
常用于需要保留右表的所有记录的情况,尤其在右表有需要显示完整的信息时,比如菜品表、分区表等,即使左表中没有相关记录,也不希望遗漏右表的数据。
- 右表 :在
RIGHT JOIN
中,右表是我们保留所有记录的表。即使左表中没有匹配的记录,右表的所有记录都会显示。 - 左表 :在
RIGHT JOIN
中,左表的数据仅在与右表的记录匹配时才会显示,如果没有匹配的记录,左表的字段将会显示为NULL
。
RIGHT JOIN 的工作原理
RIGHT JOIN (右连接)是SQL中的一种连接方式,作用与LEFT JOIN (左连接)类似,但它是"左连接"的镜像。具体来说,RIGHT JOIN 会返回右表(即JOIN
后面的表) )中的所有记录,以及左表中与右表匹配的记录。如果左表中没有匹配的记录,右表的对应字段将显示为NULL
。
RIGHT JOIN 语法
- 左表 :在
FROM
关键字后指定的表(第一张表)。 - 右表 :在
RIGHT JOIN
后指定的表(第二张表)。 - ON:连接条件,用于定义两个表之间如何匹配,通常是通过外键和主键的关系进行连接。
示例数据库结构
假设我们有两张表:employees
表和departments
表,和之前 LEFT JOIN 的例子类似,但我们这次重点讲解 RIGHT JOIN。
employees
表(员工表)
departments
表(部门表)
employees
表存储了员工信息,department_id
字段表示员工所属的部门。departments
表存储了部门信息,department_id
字段表示部门的唯一标识。
问题
我们想要查询每个员工的姓名以及他们所在的部门。如果某个部门没有员工(即右表中有部门数据,左表中没有匹配的数据),我们希望显示该部门的员工名称和NULL
员工数据。
RIGHT JOIN 示例代码
根据上述需求,使用RIGHT JOIN
来查询:
SELECT employees.employee_name, departments.department_name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.department_id;
解释:
Alice
和Bob
分别有匹配的部门(HR 和 Sales),因此它们的记录出现在结果中。Marketing
和IT
部门没有员工匹配,右表中的这两个部门仍然显示在结果中,但对应的员工姓名显示为NULL
。- RIGHT JOIN 保留了右表 (
departments
)中的所有记录,即使左表(employees
)中没有相应的匹配项。
RIGHT JOIN 查询步骤
-
选择字段 :在
SELECT
子句中选择您需要返回的字段。在这里,我们选择了employees.employee_name
和departments.department_name
。 -
指定表和 RIGHT JOIN :将
employees
表(左表)和departments
表(右表)进行RIGHT JOIN
。 -
定义连接条件 :通过
ON employees.department_id = departments.department_id
来定义两个表之间的连接条件。 -
返回结果 :RIGHT JOIN 会保留右表 (
departments
)中的所有记录,左表中的记录只有当它们匹配时才会显示。如果不匹配,左表的字段会显示为NULL
。
RIGHT JOIN 使用场景
RIGHT JOIN 常用于需要保留右表所有记录的场景,例如:
- 部门和员工:查询所有部门及其员工,有时即使部门没有员工。
- 订单和支付记录:查询所有支付记录,某些甚至记录没有对应的订单。
- 学生和课程:查询所有课程及其选课学生,即使课程没有学生选修。
这两种 JOIN 都会返回两个表中匹配的数据,唯一的区别是它们保留的表不同。LEFT JOIN 保留左表的数据,而 RIGHT JOIN 保留右表的数据。
总结
RIGHT JOIN 与 LEFT JOIN 的区别
- RIGHT JOIN :保留右表的所有记录,左表中没有匹配的记录会显示为
NULL
。 - LEFT JOIN :保留左表的所有记录,右表中没有匹配的记录会显示为
NULL
。 - RIGHT JOIN 是SQL中的一种连接方式,它会返回右表 (即
JOIN
后面的表)中的所有记录,即使左表中没有匹配的记录。 - 如果左表中没有匹配的记录,左表中的字段会显示为
NULL
。 - RIGHT JOIN 常用于需要确保显示右表中所有记录的场景,比如查询所有部门及其员工信息,即使部门某些没有员工。
5.FULL JOIN(全连接)
FULL JOIN (全连接)是SQL中的一种连接方式,它结合了LEFT JOIN 和RIGHT JOIN 的特性,返回左表和右表中的所有记录。如果一方的表与另一方的记录不匹配,现在没有匹配的部分就会NULL
填充。简单来说,FULL JOIN 会返回两个表中的所有记录,无论是否有匹配的关系。
需要注意的是,MySQL 并不直接支持FULL JOIN ,我们可以通过LEFT JOIN 和RIGHT JOIN 的组合,使用UNION
来模拟实现 FULL JOIN 的效果。
FULL JOIN的工作原理
- 左表(Left Table):FULL JOIN 返回左表中的所有记录,无论右表中是否有匹配的记录。
- 右表(Right Table) :同样,FULL JOIN 还会返回右表中的所有记录,如果左表没有匹配的记录,右表的相关字段将
NULL
填充。 - 如果表中有匹配的记录,则将两个匹配的记录合并在一起组成,一条记录。
FULL JOIN 模拟方法
由于MySQL不支持FULL JOIN,我们通常通过结合LEFT JOIN 和RIGHT JOIN来模拟FULL JOIN。具体的操作是:
UNION
操作会符来重复的记录,因此我们可以确保最终结果是两个表中的所有记录。
示例数据库结构
假设我们有两个表:employees
表和departments
表。
employees
表(员工表)
departments
表(部门表)
为什么使用 FULL JOIN?
FULL JOIN 使用场景
FULL JOIN 与 LEFT JOIN、RIGHT JOIN 的区别
总结
6.CROSS JOIN(交叉连接)
employees
表存储了员工信息,department_id
字段表示员工所属的部门。departments
表存储了部门信息,department_id
字段表示部门的唯一标识。
问题
我们想要查询所有的员工信息和部门信息,无论员工是否有部门,或者部门是否有员工。
FULL JOIN 模拟代码
我们可以通过LEFT JOIN
并RIGHT JOIN
结合UNION
来实现FULL JOIN 的效果。以下是模拟FULL JOIN的SQL查询:
-
-- 模拟 FULL JOIN
SELECT employees.employee_name, departments.department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.department_id
UNION
SELECT employees.employee_name, departments.department_name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.department_id;
-
解释:
- 这条查询返回了员工 表和部门表中的所有记录。
Alice
和Bob
分别有匹配的部门(HR 和 Sales),因此它们的记录出现在结果中。Charlie
是没有部门的员工名称,结果中显示了NULL
部门。Marketing
部门有员工(David),因此它也显示在结果中。IT
部门没有任何员工,因此它显示在结果中,并且员工字段为NULL
。
FULL JOIN 查询步骤
-
LEFT JOIN 查询 :使用
LEFT JOIN
返回左表(employees
)中的所有记录,以及右表(departments
)中匹配的记录。 -
RIGHT JOIN 查询 :使用
RIGHT JOIN
返回右表(departments
)中的所有记录,以及左表(employees
)中匹配的记录。 -
UNION 操作 :使用
UNION
将这两个结果合并为一个结果集。UNION
会删除重复的记录。 -
保留所有记录:FULL JOIN 用于查询两个表的所有记录,无论这些记录是否有匹配的项。它可以确保您不会丢失任何一方的数据。
-
解决不匹配问题:有时你需要查询两个表中的所有记录,即使某些数据没有完全匹配项。例如,想查看所有员工和部门的信息,即使某些员工没有部门,或者某些部门没有员工。
-
员工和部门:查询所有员工所属部门,某些员工即使没有分配部门,或者某些部门没有员工。
-
LEFT JOIN :返回左表中的所有记录,以及右表中与左表匹配的记录。如果右表不匹配,则显示
NULL
。 -
RIGHT JOIN :返回右表中的所有记录,以及左表中与右表匹配的记录。如果左表不匹配,则显示
NULL
。 -
FULL JOIN :返回两个表中的所有记录。如果某个表没有匹配记录,则显示
NULL
。 -
FULL JOIN 在MySQL中无法直接使用,但我们可以通过
LEFT JOIN
和RIGHT JOIN
的结合,对抗UNION
操作来实现其效果。 -
FULL JOIN 会返回两个表中的所有记录,确保不会丢失任何一方的数据,即使数据没有匹配项。
-
在实际应用中,FULL JOIN是一个非常有用的工具,特别适用于需要展示完整数据的场景,例如员工与部门、订单与支付记录等。
- 订单和支付记录:查询所有订单和支付记录,即使某些订单还没有支付,或者某些记录支付没有对应的订单。
- 学生和课程:查询所有学生及其选修的课程,即使某些学生没有选课,或者某些课程没有学生选修。
CROSS JOIN (交叉连接)是SQL中的一种特殊连接方式,用于生成两个表之间的笛卡积 。即,将一个表的每条记录与另一个表的每条记录进行组合,生成所有可能的组合。这意味着如果表 A 有m
条记录,表 B 有n
条记录,那么CROSS JOIN
结果将包含m * n
记录条。
CROSS JOIN也被称为笛卡尔积(Cartesian Product),它通常用于生成所有可能的组合。
CROSS JOIN的工作原理
CROSS JOIN 会返回两个表的每一条记录组成的组合,即每一条左表的记录与右表中的每一条记录都会组合,一个新的记录。 结果集 :如果左表有m
条记录,右表有n
条记录,CROSS JOIN 的结果集将包含m * n
条记录。
交叉连接语法
假设我们有两个表:employees
表和departments
表。
示例数据库结构
- 表1:第一个表(左表),它的每一条记录会和右表的每一条记录进行组合。
- 表2:第二个表(右表),它的每一条记录会与左表的每一条记录组合。
假设我们有两个表:employees
表和departments
表。
employees
表(员工表)
departments
表(部门表)
employees
表存储了员工信息,department_id
字段表示员工所属的部门。departments
表存储了部门信息,department_id
字段表示部门的唯一标识。
问题
我们想要查看所有员工和所有部门的所有可能组合。那么,我们要查询每个员工和部门每个的配置情况。
CROSS JOIN 示例代码
使用CROSS JOIN来查询所有员工与所有部门的组合:
解释:
- 这个返回查询了所有员工和所有部门的组合。由于
employees
表有3个员工,departments
表有2个部门,所以查询结果共有4 * 4 = 16
条记录。- 每个员工与每个部门组合成一条记录。比如,
Alice
和HR
组合,Alice
和Sales
组合,依此类推。
CROSS JOIN 查询步骤
-
选择字段 :在
SELECT
子句中选择您需要返回的字段,这里是employees.employee_name
和departments.department_name
。 -
指定表和 CROSS JOIN :使用
CROSS JOIN
连接employees
表和departments
表。 -
返回结果 :
CROSS JOIN
会返回所有可能的组合,因此它会生成两个表之间的笛卡尔积。
CROSS JOIN 使用场景
交叉连接在以下场景中特别有用:
- 生成所有组合:如果您需要查看两个表的所有可能组合,比如生成员工和部门的所有配置,或者产品与促销的所有可能配置。
- 测试数据:在进行性能测试或生成模拟数据时,CROSS JOIN可以帮助你快速生成海量的数据集,尤其是当你需要创建一个海量的数据集来模拟多种情况时。
- 装备配置或组合问题:在一些算法中,CROSS JOIN 可以用于生成所有可能的装备,或者解答一些组合问题。
CROSS JOIN 与其他 JOIN 类型的区别
CROSS JOIN:返回两个表之间的所有可能组合(笛卡尔积)。它不会使用任何连接条件,因此每条记录都会与另一个表中的每条记录进行组合。
INNER JOIN:只返回两个表中匹配的记录。如果没有匹配项,则不返回任何记录。
LEFT JOIN (左连接):返回左表中的所有记录和右表中匹配的记录。如果右表没有匹配项,右表的字段会显示为NULL
。
RIGHT JOIN (右连接):返回右表中的所有记录和左表中匹配的记录。如果左表没有匹配项,左表的字段会显示为NULL
。
CROSS JOIN 的疑虑
总结
-
数据量激增:由于CROSS JOIN会生成两个表的所有组合之间,其结果集大小会急剧增加很多。因此,如果表中记录,CROSS JOIN生成的结果集可能会非常庞大,导致查询性能问题。
例如,如果表 A 有 1000 条记录,表 B 有 2000 条记录,那么 CROSS JOIN 的结果集将包含 1000 * 2000 = 2,000,000 条记录。这样的数据量可能会给数据库和网络带来负担。
-
字符串使用:CROSS JOIN在实际应用中很少使用,因为它会产生大量的无用数据,通常只在特定的需要生成所有组合的情况下使用。如果不小心使用CROSS JOIN连接大量数据表,可能会导致性能问题。
-
CROSS JOIN 用于生成两个表的笛卡尔积,即返回两个表中每条记录的所有可能组合。
-
它通常用于查看所有可能组合的场景,例如员工需要与部门的配置、产品与颜色的组合等。
-
使用CROSS JOIN时要特别注意结果集的大小,避免由于数据量过大导致性能问题。
结语:SQL联合查询,玩转数据世界!
经过一番探索,我们已经掌握了 SQL 中联合查询 (JOIN)的四大宝藏:INNER JOIN 、LEFT JOIN 、RIGHT JOIN 和CROSS JOIN,每一种连接方式都相当于数据之间的桥梁,帮助我们跨越不同的表格,找到那些"隐藏"的关系和数据。
INNER JOIN ,就像是"好友聚会",只有那些完全匹配的朋友才会被邀请参加。 LEFT JOIN 和RIGHT JOIN ,就像温暖的左边(左表) 和右边(右表) ,总是保证至少一个人能留下来,另一边的人消失。 CROSS JOIN,则犹如一场疯狂的派对,每个人都拥有自己的组合,制作出一个超级庞大的"组合图谱",为你展现无限可能!
希望你能在这个充满乐趣的SQL学习之旅中,不断发现新知识,享受其中的乐趣,成为查询数据库的"魔术师"!无论数据表如何复杂,只要掌握联合查询的奥秘,任何问题都可以迎刃而解,享受与数据互动的每一刻!
祝你在 SQL 的世界里玩得开心,查询自如!🎉
无论你是在寻找匹配的数据,还是需要生成所有可能的组合,SQL联合查询都是你在数据库世界中的得力助手。通过掌握这些技能,你可以轻松地处理复杂的数据需求,产出更丰富的数据、更精彩的查询报告。数据的世界不再茫然,仿佛一扇窗打开了属于你的数据大门。