组合查询 UNION
UNION 运算符用于合并两个或多个 SELECT 语句的结果集,去除重复行。它在 SQL 中非常有用,可以用于多种场景,例如:
1. 从不同的表中获取相似数据:
假设有两个表,customers 和 leads,都包含姓名和邮箱信息。可以使用 UNION 合并两个表中的数据,获取所有潜在客户的信息:
SELECT name, email FROM customers
UNION
SELECT name, email FROM leads;
2. 将多个查询结果合并成一个结果集:
例如,想要获取某个产品类别下价格低于 100 的产品,以及另一个类别下价格高于 500 的产品,可以使用 UNION:
SELECT name, price FROM products WHERE category = 'A' AND price < 100
UNION
SELECT name, price FROM products WHERE category = 'B' AND price > 500;
3. 处理 NULL 值:
UNION 默认会去除重复行,包括 NULL 值。如果想保留 NULL 值,可以使用 UNION ALL:
SELECT name, email FROM customers
UNION ALL
SELECT name, email FROM leads;
UNION 的使用规则
-
参与 UNION 的 SELECT 语句必须拥有相同数量的列。
-
对应列的数据类型必须兼容。
-
默认情况下,UNION 会去除重复行。使用 UNION ALL 保留所有行,包括重复行。
-
可以使用 ORDER BY 对最终结果集进行排序,但 ORDER BY 子句必须放在最后一个 SELECT 语句之后。
UNION 的优势
-
简化查询: 可以将多个查询合并成一个,提高代码可读性。
-
提高效率: 某些情况下,使用 UNION 比多次执行查询更有效率。
-
数据整合: 可以方便地从不同数据源获取数据,并进行整合分析。
示例
查询所有用户的名字和邮箱,并按名字排序:
SELECT name, email FROM users
UNION
SELECT name, email FROM admins
ORDER BY name;
查询价格低于 50 的产品,或者库存数量大于 100 的产品:
SELECT name, price FROM products WHERE price < 50
UNION
SELECT name, price FROM products WHERE quantity > 100;