SQL联合查询(UNION)是一种强大的工具,它允许将两个或多个 SELECT 语句的结果集合并成一个单一的结果集。这种操作可以跨越同一个表或不同的表进行。本文将深入探讨 UNION 的基础知识,并探索其不同的使用方式。此外,将使用一些示例表来实验 UNION 命令。
SQL UNION 将两个或多个 SELECT 语句的结果集合并起来,即从 SELECT 语句中获得的结果集。将它们堆叠在一起以完成 UNION 操作。执行 UNION 语句有一些条件。UNION 中的每个 SELECT 语句必须在结果集中具有相同数量的列和相似的数据类型。SQL UNION 操作符默认从结果集中删除重复的行。
以下是两个 SELECT 语句的 SQL UNION 的基本语法。
SELECT column1, column2, ...
FROM table1
UNION
SELECT column1, column2, ...
FROM table2;
首先,将创建两个示例表:Employees 和 Contractors,并插入一些样本数据。
CREATE TABLE Employees (
employee_id INT PRIMARY KEY,
name VARCHAR(50),
department VARCHAR(50),
salary DECIMAL(10, 2)
);
INSERT INTO Employees (employee_id, name, department, salary)
VALUES
(1, 'Alice', 'HR', 60000.00),
(2, 'Bob', 'IT', 75000.00),
(3, 'Charlie', 'Finance', 70000.00),
(4, 'Dana', 'IT', 80000.00);
CREATE TABLE Contractors (
contractor_id INT PRIMARY KEY,
name VARCHAR(50),
department VARCHAR(50),
hourly_rate DECIMAL(10, 2)
);
INSERT INTO Contractors (contractor_id, name, department, hourly_rate)
VALUES
(1, 'David', 'IT', 50.00),
(2, 'Eve', 'Finance', 45.00),
(3, 'Frank', 'HR', 40.00),
(4, 'Grace', 'IT', 55.00);
将使用 UNION 来合并 Employees 和 Contractors 表中的数据。
SELECT *
FROM Employees
UNION
SELECT *
FROM Contractors;
注意,SQL UNION 从第一个 SELECT 语句中获取列名。
在最终的结果集中,根据工资对记录进行排序。因此,可以使用 ORDER BY 对最终结果集中的记录进行排序。请注意,只能根据所选列进行排序,而不是未选择的列。
SELECT name, department
FROM Employees
UNION
SELECT name, department
FROM Contractors
ORDER BY salary;
在上面的示例中,只有满足 WHERE 子句条件的选定列和记录才会出现。WHERE 子句将帮助根据 SQL UNION 中的条件过滤记录。
SELECT name, department
FROM Employees
WHERE department = 'IT'
UNION
SELECT name, department
FROM Contractors
WHERE department = 'IT';