ここでのベン図の制限について、Cadeに同意します。より適切な視覚的表現はこれかもしれません。
テーブル
SELECT A.Colour、B.Colour FROM A CROSS JOIN B SQL Fiddle
クロス結合(またはデカルト積)は、2つのテーブルの行のすべての組み合わせで結果を生成します。各テーブルには4行あるため、結果に16行が生成されます。
SELECT A.Colour、B.Colour FROM A INNER JOIN B ON A.Colour =B.Colour SQLフィドル
内部結合は、結合条件に一致するクロス結合からのすべての行を論理的に返します。この場合、5つです。
SELECT A.Colour、B.Colour FROM A INNER JOIN B ON A.Colour NOT IN('Green'、'Blue')SQLフィドル
内部結合条件は、必ずしも等式条件である必要はなく、両方(またはいずれか)のテーブルの列を参照する必要はありません。 A.Colour NOT IN ('Green','Blue')
の評価 クロスジョインの各行で戻ります。
1=1
の内部結合条件 クロス結合のすべての行でtrueと評価されるため、2つは同等です( SQL Fiddle
。
SELECT A.Colour、B.Colour FROM A LEFT OUTER JOIN B ON A.Colour =B.Colour SQLフィドル
外部結合は内部結合と同じ方法で論理的に評価されますが、左側のテーブルの行(左側の結合の場合)が右側のテーブルの行とまったく結合しない場合は、NULL
右側の列の値。
SELECT A.Colour、B.Colour FROM A LEFT OUTER JOIN B ON A.Colour =B.Colour WHERE B.Colour IS NULL SQLフィドル
これにより、前の結果がB.Colour IS NULL
の行のみを返すように制限されます。 。この特定のケースでは、これらは右側のテーブルで一致しなかったために保持された行になり、クエリはテーブルB
で一致しなかった単一の赤い行を返します。 。これは、アンチセミジョインとして知られています。
IS NULL
の列を選択することが重要です null許容でないか、結合条件によってNULL
が確認されるテスト このパターンが正しく機能し、たまたまNULL
を持つ行を戻すことを避けるために、値は除外されます。 一致しない行に加えて、その列の値。
SELECT A.Colour、B.Colour FROM A RIGHT OUTER JOIN B ON A.Colour =B.Colour SQLフィドル
右外部結合は、左外部結合と同様に機能しますが、右側のテーブルから一致しない行を保持し、左側の列をnullで拡張する点が異なります。
SELECT A.Colour、B.Colour FROM A FULL OUTER JOIN B ON A.Colour =B.Colour SQLフィドル
完全外部結合は、左結合と右結合の動作を組み合わせて、左テーブルと右テーブルの両方から一致しない行を保持します。