Ank*_*iya 5 join database-theory
我遇到了 1 个查询,它是
Select * from R Natural Outer Join S
Run Code Online (Sandbox Code Playgroud)
哪里R=(A,B)
有元组{(1,2),(1,2),(3,4)}
和S=(B,C)
有元组{(2,5),(2,5),(4,6),(7,10)}
。
为了实现这一点,我创建了 2 个名为R
和 的关系S
。
create table R
(
A number(5),
B number(5)
)
create table S
(
B number(5),
C number(5)
)
Run Code Online (Sandbox Code Playgroud)
我在其中插入了提供的元组。
现在在实现这个时,我开始知道我使用的数据库工具(Oracle)不支持“自然外连接”,所以我使用了以下查询
select *
from R
natural full outer join S
Run Code Online (Sandbox Code Playgroud)
输出
2 1 5
2 1 5
2 1 5
2 1 5
4 3 6
7 10
Run Code Online (Sandbox Code Playgroud)
现在来回答我的问题
因为在任何表中都没有定义主键,所以我认为它应该进行交叉连接并显示 16 条记录,但事实并非如此。
如果有人可以向我解释这种行为,那将非常有帮助。
维基百科上的快速检查没有提到当这个重要的位被省略时“外连接”是否意味着左、右或完整。
几乎,
这意味着
在这种情况下,索引/键无关紧要,没有区别。
您得到的结果符合标准
select *
from
R
full outer join
S ON R.B = S.B
Run Code Online (Sandbox Code Playgroud)
或者
select *
from
R
full outer join
S USING (B)
Run Code Online (Sandbox Code Playgroud)
注意:并非所有 RDBMS 都支持所有语法:
自然连接无论如何都是危险的(SO 链接)