在数据库查询中,`UNION` 是一个非常实用的 SQL 操作符,用于将两个或多个 `SELECT` 语句的结果合并成一个结果集。它能够帮助我们高效地组合来自不同表的数据,同时去重,确保返回的结果唯一。
UNION 的基本语法
```sql
SELECT column1, column2, ...
FROM table1
WHERE condition1
UNION [ALL]
SELECT column1, column2, ...
FROM table2
WHERE condition2;
```
- `SELECT` 子句:定义了需要从表中检索的列。
- `FROM` 子句:指定数据来源的表。
- `WHERE` 子句:可选,用于过滤数据。
- `UNION` 关键字:用于合并两个或多个 `SELECT` 语句的结果。
- `UNION ALL`:如果不希望去重,可以使用 `UNION ALL`。
UNION 和 UNION ALL 的区别
- `UNION`:默认情况下会去除重复的行,只保留唯一的记录。
- `UNION ALL`:不会去除重复的行,所有行都会被包含在结果集中。
示例
假设我们有两个表 `employees` 和 `managers`,它们都包含员工的基本信息。我们希望通过 `UNION` 将两个表中的数据合并在一起。
```sql
SELECT employee_id, name, department
FROM employees
WHERE department = 'Sales'
UNION
SELECT manager_id, name, department
FROM managers
WHERE department = 'Sales';
```
在这个例子中,`UNION` 会将 `employees` 表和 `managers` 表中部门为 "Sales" 的记录合并,并自动去除重复的行。
注意事项
1. 列的数量和类型必须匹配:`SELECT` 语句中的列数和数据类型必须相同,否则会导致错误。
2. 排序问题:如果需要对合并后的结果进行排序,可以在最后添加 `ORDER BY` 子句。
3. 性能考虑:使用 `UNION ALL` 可以提高性能,因为它不需要去重操作。
总结
`UNION` 是 SQL 中一个强大的工具,能够在处理复杂查询时提供灵活性。通过合理使用 `UNION` 和 `UNION ALL`,我们可以有效地整合来自不同表的数据,满足各种业务需求。在实际应用中,根据具体场景选择合适的选项(`UNION` 或 `UNION ALL`)可以显著提升查询效率。