UNION
UNION 把两条(或多条)SELECT 的结果上下合并成一张表,自动去重。每条 SELECT 的列数、列顺序、列的数据类型必须兼容。列名以第一条 SELECT 的列名为准。
UNION 是标准的集合操作——两堆数据并到一起,相同的行只保留一份。去重过程需要排序比较,有一定性能开销。如果确定两堆数据不可能重复,或者重复也无所谓,应该用 UNION ALL。
UNION 的每条 SELECT 可以有自己的 WHERE、ORDER BY(需配合括号)、LIMIT。但最终的 ORDER BY 只能出现在最后一条 SELECT 之后,对合并后的整个结果排序。
以飞翔科技为例:
-- 合并技术部和运营部的员工列表
SELECT emp_name, dept_code, basic_salary
FROM employees
WHERE dept_code = 2
UNION
SELECT emp_name, dept_code, basic_salary
FROM employees
WHERE dept_code = 3;
-- 合并飞翔小店和飞翔旗舰店的高价商品(价 > 100)
SELECT product_name, price, shop_name
FROM products
WHERE shop_name = '飞翔小店' AND price > 100
UNION
SELECT product_name, price, shop_name
FROM products
WHERE shop_name = '飞翔旗舰店' AND price > 100
ORDER BY price DESC;
第一个例子合了两个部门的员工,如果某个员工碰巧在两个部门(不会发生,但逻辑上),UNION 会去重只留一条。第二个例子按价格降序排——ORDER BY 放在最后,对整个合并结果生效。