我正在阅读Learning SQL第2版的书。 SET
操作与JOIN
之间是否存在任何差异。在任何情况下,您都会SET
操作离开JOIN
。
如果我错了,请纠正我,我们可以使用JOIN
使用SET
完成所有操作。
答案 0 :(得分:2)
设置操作为UNION
,INTERSECT
和EXCEPT
。它们用于对具有相同模式的关系进行集合操作。例如:让R1
和R2
属于以下架构:
R1 (A,B,C)
R2 (A,B,C)
R1 UNION
R2 = R1
和R2
中所有行的联合。
R1 INTERSECT
R2 = R1
和R2
中的常见行。
R1 EXCEPT
R2 = R1
中R2
以外的所有行。
请注意,我们对相同的模式关系使用集合操作,但我们可以对不同的模式关系使用连接操作,结果的模式是两个模式的并集。 (通常我们使用连接操作来连接两个或多个表。)
答案 1 :(得分:1)
不,您无法使用join
执行所有可以对设置操作执行的操作。但是,如果两个表具有相同的结构且在每个表上都有唯一标识符,那么您可以:
union
将是:
select driver.id,
coalesce(t1.col1, t2.col1) as col1,
. . . -- repeat this for all columns
from (select distinct coalesce(t1.id, t2.id) as id
from ((select id
from t1
) full outer join
(select id
from t2
)
)
) driver left outer join
t1
on t1.id = driver.id left outer join
t2
on t2.id = driver.id
except
和intersect
可以采用相同的方式进行处理,但会在驱动程序表中的full outer join
上添加条件。
实际上,您可以将此想法扩展为不需要唯一ID,只需假设每个表中的行都是唯一的。在这种情况下,连接更复杂,因为您必须包括所有列,并且还要考虑列中的NULL值。
尽管如此,set
操作有几个优点:
union
和union all
比上述查询更具可读性。union
和intersect
之间的差异。