SQL 联合查询(UNION)详解

SQL联合查询(UNION)是一种强大的工具,它允许将两个或多个 SELECT 语句的结果集合并成一个单一的结果集。这种操作可以跨越同一个表或不同的表进行。本文将深入探讨 UNION 的基础知识,并探索其不同的使用方式。此外,将使用一些示例表来实验 UNION 命令。

目录

  • 什么是 SQLUNION
  • 基本语法
  • 创建示例数据
  • SQLUNION 的基本使用
  • 结合数据并排序结果
  • 使用 WHERE 子句与UNION
  • 最佳实践和注意事项
  • SQLJOIN 与 SQL UNION 的比较
  • 常见问题解答

什么是 SQLUNION

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);

SQLUNION 的基本使用

将使用 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 子句与UNION

在上面的示例中,只有满足 WHERE 子句条件的选定列和记录才会出现。WHERE 子句将帮助根据 SQL UNION 中的条件过滤记录。

SELECT name, department FROM Employees WHERE department = 'IT' UNION SELECT name, department FROM Contractors WHERE department = 'IT';

最佳实践和注意事项

SQLJOIN 与 SQL UNION 的比较

  • JOIN:基于它们之间的相关列将两个或多个表的列组合起来。
  • UNION:将两个或多个 SELECT 语句的结果组合成一个单一的结果集,将它们垂直堆叠。
Q1. UNION 对列有什么要求?
A. 所有在 UNION 中使用的 SELECT 语句必须具有相同数量的列,并且它们的相应列必须具有兼容的数据类型。
Q2. 可以在 UNION 中使用 ORDER BY 吗?
A. 是的,可以在 UNION 中使用 ORDER BY,但它应该放在最后一个 SELECT 语句之后,以对整个结果集进行排序。
Q3. JOIN 与 UNION 相比对性能有何影响?
A. JOIN 可能更加资源密集,特别是对于大型表或多个连接,因为需要在表之间匹配行。UNION 也可能成本较高,特别是当删除重复项时。如果可以接受重复项,使用 UNION ALL 可以提高性能。
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485