MySQL Union和Join的区别
Union和Join是在关系数据库管理系统(RDBMS)中用于对多个表执行操作的SQL子句。它们通过将两个或多个表中的数据 组合 起来产生结果。但是,在组合两个或多个关系中的数据方面,这两个子句的方式不同。在进行比较之前,我们将简要讨论这些子句。
Union子句是什么?
MySQL的Union子句允许我们使用多个SELECT查询将两个或多个关系合并为一个结果集。默认情况下,它具有从结果集中删除重复行的功能。
MySQL中的Union子句必须遵循以下规则:
- 所有表中的列的顺序和数量必须相同。
- 数据类型必须与每个SELECT查询的相应位置兼容。
- SELECT查询中的列名应该按照相同的顺序排列。
语法
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2;
什么是Join子句?
在MySQL中使用Join 与 SELECT语句 一起用于从多个表中检索数据。每当我们需要从多个表中获取记录时,就会执行此操作。它仅返回与指定条件匹配的这些表中的记录。
语法
SELECT column_name(s) FROM table_name1
JOIN table_name2 ON conditions;
Union vs. Join
让我们通过以下对比图表来讨论联合(Union)和连接(Join)之间的基本区别。
SN | UNION | JOIN |
---|---|---|
1. | 用于使用 SQL 查询组合多个表的结果。 | 用于使用 SQL 查询从多个表中获取记录。 |
2. | 将记录合并为新行。 | 将记录合并为新列。 |
3. | 允许我们在垂直方向上连接表格。 | 允许我们在垂直方向上连接表格。 |
4. | 作为对多个表的连接的连接词,总结所有记录。 | 产生表之间的交集结果。 |
5. | 在此,所有表中的列的顺序和数量必须相同。 | 在此,所有表中的列的顺序和数量不需要相同。 |
6. | 它具有从结果集中删除重复行的默认功能。 | 它不会从结果集中消除重复行。 |
7. | 在此,所有 SELECT 语句中的数据类型必须相同。 | 在此,不需要相同的数据类型。它可以是不同的。 |
8. | Union 子句仅在列数和对应属性的域相同时适用。 | Join 子句仅在将要使用的两个表至少有一列时适用。 |
9. | Union 子句可以有以下两种类型:Union 和Union All | Join 子句可以有以下不同类型: Inner Join (有时称为 Join) Left Join (Left Outer Join) Right Join (Right Outer Join) Full Join (Outer Join) |
现在,我们将通过一个示例来理解它。
Union 示例
假设我们的数据库中有以下表: “Student1” 和 “Student2” 包含以下数据:
下面的语句将两张表合并,并产生包含所有学生姓名和科目的输出。
SELECT stud_name, subject FROM student1
UNION
SELECT stud_name, subject FROM student2;
执行成功后,我们将得到一个包含所有唯一学生姓名和科目的输出:
Join 示例
假设我们的数据库有以下表格: “students” 和 “technologies” 包含以下数据:
我们可以使用以下查询从两个表中提取记录:
SELECT students.stud_fname, students.stud_lname, students.city, technologies.technology
FROM students
JOIN technologies
ON students.student_id = technologies.tech_id;
我们将得到以下输出: