我正在阅读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 UNION
R2 = 和 中所有行的R1
并集R2
。
R1 R2 =和INTERSECT
中的公共行。R1
R2
R1 R2 =中不存在的EXCEPT
所有行。R1
R2
请注意,我们对相同的模式关系使用集合操作,但我们可以对不同的模式关系使用连接操作,结果的模式是两个模式的并集。(通常我们使用连接操作来连接两个或多个表。)
不,你不能用 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
。