intersect y except are both working on same table and multiple tables
EXCEPT 从左查询中返回右查询没有找到的所有非重复值。
INTERSECT 返回 INTERSECT 操作数左右两边的两个查询都返回的所有非重复值。
以下是将使用 EXCEPT 或 INTERSECT 的两个查询的结果集组合起来的基本规则:
· 所有查询中的列数和列的顺序必须相同。
· 数据类型必须兼容。
Examples:
CREATE TABLE projectPerson
(
personId VARCHAR(10),
projectId VARCHAR(10),
PRIMARY KEY (personId, projectId)
)
go
INSERT INTO projectPerson VALUES ('joeb','projBig')
INSERT INTO projectPerson VALUES ('joeb','projLittle')
INSERT INTO projectPerson VALUES ('fredf','projBig')
INSERT INTO projectPerson VALUES ('homerr','projLittle')
INSERT INTO projectPerson VALUES ('stevegr','projBig')
INSERT INTO projectPerson VALUES ('stevegr','projLittle')
go
我们要找出负责projBig,但不负责projLittle的那些人员,我们可以用下面的sql语句:
SELECT personId
FROM projectPerson
WHERE projectId = 'projLittle'
EXCEPT
SELECT personId
FROM projectPerson
WHERE projectId = 'projBig'
我们要找出既负责projBig,又负责projLittle的那些人员,我们可以用下面的sql语句:
SELECT personId
FROM projectPerson
WHERE projectId = 'projBig'
INTERSECT
SELECT personId
FROM projectPerson
WHERE projectId = 'projLittle'