例如假设我们有两个关系
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 的原因。
如果这个结果是正确的,那么它与简单连接和交叉连接运算符基本相同,我错了吗?
例如假设我们有两个关系
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 的原因。
如果这个结果是正确的,那么它与简单连接和交叉连接运算符基本相同,我错了吗?
r1 LEFT JOIN r2
无条件等价于r1 LEFT JOIN r2 ON (Empty)=(Empty)
. 但是,我认为您不能在r1 LEFT JOIN r2
没有该ON
部分的情况下在 SQL 中发布。
你可以做的是发出一个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 ;
结果(正确)与 aNATURAL INNER JOIN
和 a相同CROSS JOIN
:
a b c d
-------
1 1 3 3
1 1 4 4
2 2 3 3
2 2 4 4
LEFT OUTER JOIN
总是在一些常见的列上完成。对于您的示例CROSS JOIN
是唯一适用的示例 - 它会为您提供您提供的结果。
Rebeca M. Riordan摘录(第 5 章,关系代数):Designing Relational Database Systems,Microsoft Press 出版:
外连接返回由内连接返回的所有记录,以及来自其他一个或两个记录集中的所有记录。缺失的(“不匹配”)值将为 Null。