sql >> データベース >  >> RDS >> Mysql

SQLがベン図として結合する

    ここでのベン図の制限について、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フィドル

    完全外部結合は、左結合と右結合の動作を組み合わせて、左テーブルと右テーブルの両方から一致しない行を保持します。



    1. MySQLの大文字と小文字を区別するクエリ

    2. MySQLフィールドの先頭と末尾の空白を削除するにはどうすればよいですか?

    3. MySQL-GroupByにない列を選択する

    4. OracleのABS()関数