0

例如假设我们有两个关系

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 的原因。

如果这个结果是正确的,那么它与简单连接和交叉连接运算符基本相同,我错了吗?

4

2 回答 2

0

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
于 2012-02-03T17:57:56.240 回答
0

LEFT OUTER JOIN总是一些常见的列上完成。对于您的示例CROSS JOIN是唯一适用的示例 - 它会为您提供您提供的结果。

Rebeca M. Riordan摘录(第 5 章,关系代数:Designing Relational Database Systems,Microsoft Press 出版

外连接返回由内连接返回的所有记录,以及来自其他一个或两个记录集中的所有记录。缺失的(“不匹配”)值将为 Null。

于 2012-02-03T16:43:49.143 回答