关键字:UNION , UNION ALL , INTERSEC , EXCEPT / MINUS
1. UNION :与JOIN不同,UNION合并的表不需要有关联的列。UNION允许我们在一条SELECT语句中检索不相关的或者部分相关的数据。
SelectStatement1
UNION
SelectStatement2
ORDER BY columnlist
最后的ORDER BY 应用于组合到一起的两条查询语句的最终结果,对单个的查询应用排序是没有意义的。
UNION需遵循:
(1)使用UNION合并到一起的所有SELECT语句,在其SELECT columnlist中必须有相同数目的列;
(2)每个SELECT columnlist中的所有列必须以相同的顺序排列;
(3)’每个SELECT columnlist中的所有相对应的列,都必须有相同的或可兼容的数据类型;
SELECT
OrderDate AS 'Date',
'Order' AS 'Type',
OrderAmount AS 'Amount'
FROM Orders
WHERE CustomerID = 2
UNION
SELECT
ReturnDate AS 'Date',
'Return' AS 'Type',
ReturnAmount AS 'Amount'
FROM Returns
WHERE CustomerID = 2
ORDER BY Date
2. UNION ALL :UNION排除了重复的行,UNION ALL要求包含所有行,即使重复。
3. 交叉查询
INTERSEC:类似于AND操作符,只把两个集合中都能找到的数据提取出来。
Select语句1
INTERSEC
Select语句2
ORDER BY columnlist
同样,ORDER BY作用于两条查询语句交叉的结果。
EXCEPT:返回在一个集合中存在而在另一个集合中不存在的数据。
Select语句1
EXCEPT
Select语句2
ORDER BY columnlist
显示在Select语句1中但不在Select语句2中的数据。
MySQL不支持INTERSEC和EXCEPT。Oracle中与EXCEPT等价的是MINUS。