我正在阅读Learning SQL 2nd Edition书。SET操作和. 之间有什么区别JOIN吗?是否有任何情况下您会选择SET操作离开JOIN。
如果我错了,请纠正我,我们可以用JOIN我们能做的事情来做所有的事情SET。
我正在阅读Learning SQL 2nd Edition书。SET操作和. 之间有什么区别JOIN吗?是否有任何情况下您会选择SET操作离开JOIN。
如果我错了,请纠正我,我们可以用JOIN我们能做的事情来做所有的事情SET。
集合操作UNION是INTERSECT和EXCEPT。它们用于对具有相同模式的关系进行集合操作。例如:让R1和R2成为以下模式:
R1 (A,B,C)
R2 (A,B,C)
R1 UNIONR2 = 和 中所有行的R1并集R2。
R1 R2 =和INTERSECT中的公共行。R1R2
R1 R2 =中不存在的EXCEPT所有行。R1R2
请注意,我们对相同的模式关系使用集合操作,但我们可以对不同的模式关系使用连接操作,结果的模式是两个模式的并集。(通常我们使用连接操作来连接两个或多个表。)
不,你不能用 a 来做所有join你可以用 set 操作做的事情。但是,如果两个表具有相同的结构并且每个表都有唯一的标识符,那么您可以:
一个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。