SQL语言包含3个集合操作符(union、intersect、expect)以执行各种集合操作。
此外,每个集合操作符可以有两种修饰符:一个表是包含重复项,另一个表是去除重复项(但不一定时所有的重复项)。
union操作符
union与union all操作符可以连接多个数据集,它们的区别在于union对连接后的集合排序并去除重复项,而union all保留重复项。
使用union all 得到的最终数据集的行数总是等于所要连接的各集合的行数之和,该操作时最易于执行的集合操作(从服务端的观点看),因为服务器不需要检查重复的数据。例:
SELECT 'IND' type_cd, cust_id, lname name
FROM individual
UNION ALL
SELECT 'BUS' type_cd, cust_id, name
FROM business;
如果需要连接后的表排除重复行,那么需要使用union操作符来替代union all:
SELECT emp_id
FROM employee
WHERE assigned_branch_id = 2
AND (title = 'Zifeiy' OR title = 'Zifeiy Wang')
UNION
SELECT DISTINCT open_emp_id
FROM account
WHERE open_branch_id = 2;
intersect操作符
ANSI的SQL规范中定义了intersect操作符来执行集合交操作,但是MySQL6.0还没有支持,不过在Oracle或SQL Server 2008中可以使用它。
except操作符
ANSI SQL规范规定了except操作符以执行集合差操作,MySQL 6.0还未实现except操作符。