首页 > 代码库 > INTERSECT(交集)集合运算
INTERSECT(交集)集合运算
在集合论中,两个集合(记为集合A和B)的交集是由既属于A,也属于B的所有元素组成的集合。
在T-SQL 中,INTERSECT 集合运算对两个输入查询的结果集取其交集,只返回在两个查询结果集中都出现的行。
INTERSECT DISTINCT集合运算
INTERSECT 集合运算在逻辑上首先删除两个输入多集中的重复行(把多集变为集合),然后返回只在两个集合中都出现的行。换句话说,如果一个行在两个输入多集中都至少出现一次,那么交集返回的结果中将包含这一行。
SELECT c FROM a
INTERSECT
SELECT d FROM b
INTERSECT ALL 集合运算
ANSI SQL 支持带有ALL选项的INTERSECT集合运算,但SQL Server 2008现在还没有实现这种运算。
回忆一下 UNION ALL 集合运算中 ALL 关键字的含义:要求返回所有重复行。类似地,INTERSECT ALL 集合运算中的 ALL 关键字也意味着不会删除重复行。但INTERSECT ALL 与UNION ALL有所不同:前者不会返回所有重复行,而只返回重复行数目较少的那个多集的所有重复行。换句话说,INTERSECT ALL 运算不仅关心一个行是否在两个多集同时存在,还关心它在每个多集中出现的次数。就好像这个集合运算会查找每行的每次匹配一样。
SELECT
ROW_NUMBER() OVER(PARTITION BY country,region,city ORDER BY(SELECT 0)) AS rownum,
country,region,city
FROM dbo.Employees
INTERSECT
SELECT
ROW_NUMBER() OVER(PARTITION BY country,region,city ORDER BY (SELECT 0)),
country,region,city
FROM dbo.Customers;