工作,如果我有两个表如何左联接和右联接在关系代数
CREATE TABLE R
(
a int,
b int
);
CREATE TABLE S
(
b int,
c int,
d int
);
INSERT INTO R
VALUES (3,1),(2,3),(2,0),(3,3),(1,1);
INSERT INTO S
VALUES (2,2,3),(3,0,0),(1,3,3),(2,2,0);
然后我做R outer join S
。我试图找出结果。如果我尝试使用SQL代码,我会做:
SELECT r.a,r.b,s.c,s.d
FROM R r
LEFT JOIN S s ON r.b=s.b
UNION
SELECT r.a,r.b,s.c,s.d
FROM R r
RIGHT JOIN S s ON r.b=s.b
该查询的结果是:
A B C D
3 1 3 3
2 3 0 0
2 0 - -
3 3 0 0
1 1 3 3
- - 2 3
- - 2 0
如果我试图用手工来解决它:
的3 1
两胜1 3 3
与3 0 0
2 3
比赛场
的2 0
比赛用- - -
的3 3
比赛用3 0 0
的1 1
比赛用1 3 3
这使得上述在该结果的第一5行。剩下的两行来自正确的连接。但我不明白的是,为什么正确的连接生成
- - 2 3
- - 2 0
因为左侧加入2 0
不匹配任何东西,然而b
柱保留和0在那里。
但在右侧加入,2 2 3
和2 2 0
与任何内容都不匹配,但b列变为空。不应该像在左连接一样保存b列吗?
任何人都可以解释这是怎么回事吗?
谢谢。
但是在关系代数(不是sql)中,它是选择'r.b'还是's.b'? – omega