文章目录
在 SQL Server
中, JOIN
和 UNION
是两种不同的操作,它们用于合并来自两个或多个表的数据。
JOIN
JOIN
操作用于将两个或多个表中的行结合起来,基于它们之间的某种关系。SQL Server
支持多种类型的JOIN
:
INNER JOIN
:只返回两个表中连接条件相匹配的行。LEFT JOIN
(或LEFT OUTER JOIN
):返回左表中的所有行,即使右表中没有匹配的行。右表中不匹配的行将为NULL。RIGHT JOIN
(或RIGHT OUTER JOIN
):返回右表中的所有行,即使左表中没有匹配的行。左表中不匹配的行将为NULL。FULL JOIN
(或FULL OUTER JOIN
):返回左表和右表中的行,只要其中一个表存在匹配。不匹配的行在另一侧为NULL。CROSS JOIN
:返回两个表的笛卡尔积,即第一个表中的每一行与第二个表中的每一行组合。
JOIN的基本语法如下:
sql
SELECT columns
FROM table1
JOIN_TYPE table2
ON table1.column_name = table2.column_name;
UNION
UNION
操作用于合并两个或多个SELECT
语句的结果集,但与JOIN
不同,UNION
操作要求所有合并的列数和数据类型必须相同。
UNION
:返回不同的(唯一的)行。默认情况下,UNION
会去除重复的行。UNION ALL
:返回所有行,包括重复的行。
UNION的基本语法如下:
sql
SELECT columns
FROM table1
UNION [ALL]
SELECT columns
FROM table2;
- 示例
假设有两个表Employees
和Departments
:
sql
CREATE TABLE Employees (
EmployeeID int,
Name varchar(255),
DepartmentID int
);
CREATE TABLE Departments (
DepartmentID int,
DepartmentName varchar(255)
);
- 使用
JOIN
来获取员工及其部门名称:
sql
SELECT Employees.Name, Departments.DepartmentName
FROM Employees
INNER JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;
- 使用
UNION
来合并两个查询的结果集:
sql
SELECT Name FROM Employees
UNION
SELECT DepartmentName FROM Departments;
请注意,UNION
要求两个查询选择的列数相同,并且相应的列数据类型兼容。而UNION ALL
则不需要去除重复的行,因此可能会包含重复的数据。