0

たとえば、2つの関係があるとします

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

LEFT OUTER JOIN常にいくつかの一般的な列で行われます。あなたの例CROSS JOINは適用可能な唯一のものです-そしてそれはあなたが提供した結果を正確にあなたに与えるでしょう。

Rebeca M. Riordan:Designing Relational Database Systemsからの抜粋(第5章、関係代数)、Microsoft Press発行

外部結合は、内部結合によって返されたすべてのレコードに加えて、他のレコードセットのいずれかまたは両方からのすべてのレコードを返します。欠落している(「一致しない」)値はNullになります。

于 2012-02-03T16:43:49.143 に答える
0

r1 LEFT JOIN r2条件なしは。と同等r1 LEFT JOIN r2 ON (Empty)=(Empty)です。r1 LEFT JOIN r2ただし、SQLaでパーツなしで発行できるとは思いません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そして、結果は(正しく)aおよび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 に答える