gpt4 book ai didi

sql - 在 SQL 中,Join 实际上是一个 Intersection?它也是一个链接还是一个 "Sideway Union"?

转载 作者:可可西里 更新时间:2023-11-01 06:28:38 26 4
gpt4 key购买 nike

我一直认为 SQL 中的连接是两个表之间的某种链接。

例如,

select e.name, d.name from employees e, departments d 
where employees.deptID = departments.deptID

在本例中,它链接了两个表,以显示每个员工的部门名称而不是部门 ID。有点像横向的“链接”或“联合”。

但是,在了解了 inner join vs outer join 之后,它表明一个 Join(内连接)实际上是一个交集。

例如,当一张表的ID为1、2、7、8,而另一张表的ID只有7和8时,求交集的方式是:

select * from t1, t2 where t1.ID = t2.ID

得到“7”和“8”两条记录。所以它实际上是一个十字路口。

所以我们有 2 个表的“交集”。将此与 2 个表上的“联合”操作进行比较。可以将 Join 视为“交集”吗?但是它的“链接”或“横向联合”方面呢?

最佳答案

您走在正确的轨道上; INNER JOIN 返回的行是满足连接条件的行。但这就像一个交集,只是因为您在连接条件中使用了相等,应用于每个表中的列。

另请注意,INTERSECTION 已经是一个 SQL 操作,它具有另一个含义——它与 JOIN 不同。

SQL JOIN 可以生成一种新类型的行,其中包含来自两个连接表的所有列。例如:col4、col5 和 col6 在表 A 中不存在,但在与表 B 的连接结果中存在:

SELECT a.col1, a.col2, a.col3, b.col4, b.col5, b.col6
FROM A INNER JOIN B ON a.col2=b.col5;

SQL INTERSECTION 返回两个单独表共有的行,这两个表必须已经具有相同 列。

SELECT col1, col2, col3 FROM A
INTERSECT
SELECT col1, col2, col3 FROM B;

这恰好产生与以下连接相同的结果:

SELECT a.col1, a.col2, a.col3
FROM A INNER JOIN B ON a.col1=b.col1 AND a.col2=b.col2 AND a.col3=b.col3;

并非每个品牌的数据库都支持 INTERSECTION 运算符。

关于sql - 在 SQL 中,Join 实际上是一个 Intersection?它也是一个链接还是一个 "Sideway Union"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2706051/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com