R1(A,B) R2(C,d)
这些也是表格
A B
a1 b1
a2 b2
C D
c1 d1
c2 d2
左外连接结果是下表吗?
A B C D
a1 b1 c1 d1
a1 b1 c2 d2
a2 b2 c1 d1
a2 b2 c2 d2
我们没有共同的属性,这就是为什么我不包含任何NULL。
如果此结果是正确的,则它与简单连接和交叉连接运算符基本相同 我错了吗?
答案 0 :(得分:1)
LEFT OUTER JOIN
始终在某个公共列上完成。对于您的示例CROSS JOIN
是唯一适用的例子,它会准确地为您提供结果。
Excrept(第5章,关系代数):
外部联接返回内部联接返回的所有记录 来自其他记录集中的一个或两个的所有记录。该 缺少(“不匹配”)值将为Null。
答案 1 :(得分:1)
r1 LEFT JOIN r2
相当于r1 LEFT JOIN r2 ON (Empty)=(Empty)
。但是,我不认为您可以在SQL中r1 LEFT JOIN r2
发出ON
部分。
您可以做的是发出r1 NATURAL LEFT JOIN r2
(至少在MySQL中):
CREATE TABLE R1
( a int
, b int
) ;
INSERT INTO R1
VALUES
(1,1) ,
(2,2) ;
CREATE TABLE R2
( c int
, d int
) ;
INSERT INTO R2
VALUES
(3,3) ,
(4,4) ;
SELECT
*
FROM
R1
NATURAL LEFT JOIN
R2 ;
结果(正确)与NATURAL INNER JOIN
和CROSS JOIN
相同:
a b c d
-------
1 1 3 3
1 1 4 4
2 2 3 3
2 2 4 4