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

SQLite FULLOUTERJOINエミュレーション

    概要 :このチュートリアルでは、UNIONを使用してSQLiteの完全な外部結合をエミュレートする方法を学習します およびLEFT JOIN 条項。

    SQLの概要FULL OUTER JOIN 条項

    理論的には、FULL OUTER JOINの結果 LEFT JOINの組み合わせです およびRIGHT JOIN 。完全な外部結合の結果セットにはNULLがあります 他のテーブルに一致する行がないテーブルのすべての列の値。一致する行については、FULL OUTER JOIN 両方のテーブルの行の列からの値で単一の行を生成します。

    次の図は、FULL OUTER JOINの結果を示しています。 条項:

    次のcatsを参照してください およびdogs テーブル。

    -- create and insert data into the dogs table
    CREATE TABLE dogs (
        type       TEXT,
        color TEXT
    );
    
    INSERT INTO dogs(type, color) 
    VALUES('Hunting','Black'), ('Guard','Brown');
    
    -- create and insert data into the cats table
    CREATE TABLE cats (
        type       TEXT,
        color TEXT
    );
    
    INSERT INTO cats(type,color) 
    VALUES('Indoor','White'), 
          ('Outdoor','Black');Code language: SQL (Structured Query Language) (sql)

    次のステートメントは、FULL OUTER JOINを使用しています dogsからデータをクエリする句 およびcats テーブル。

    SELECT *
    FROM dogs 
    FULL OUTER JOIN cats
        ON dogs.color = cats.color;Code language: SQL (Structured Query Language) (sql)

    上記のステートメントの結果を次に示します。

    タイプ 色 タイプ 色
    ハンティング 黒 屋外 黒
    ガード ブラウン NULL NULL
    NULL NULL 屋内 白

    残念ながら、SQLiteはRIGHT JOINをサポートしていません 句とFULL OUTER JOIN 句。ただし、FULL OUTER JOINは簡単にエミュレートできます。 LEFT JOINを使用して 条項。

    SQLite完全外部結合のエミュレート

    次のステートメントは、FULL OUTER JOINをエミュレートします SQLiteの句:

    SELECT d.type,
             d.color,
             c.type,
             c.color
    FROM dogs d
    LEFT JOIN cats c USING(color)
    UNION ALL
    SELECT d.type,
             d.color,
             c.type,
             c.color
    FROM cats c
    LEFT JOIN dogs d USING(color)
    WHERE d.color IS NULL;Code language: SQL (Structured Query Language) (sql)

    クエリの仕組み。

    • SQLilteはRIGHT JOINをサポートしていないため 句では、LEFT JOINを使用します 2番目のSELECTの句 代わりにステートメントを使用して、catsの位置を切り替えてください およびdogs テーブル。
    • UNION ALL 句は、両方のクエリの結果セットから重複する行を保持します。
    • WHERE 2番目のSELECTの句 ステートメントは、最初のSELECTの結果セットにすでに含まれている行を削除します ステートメント。

    このチュートリアルでは、UNION ALLの使用方法を学習しました。 およびLEFT JOIN SQLite FULL OUTER JOINをエミュレートする句 条項。


    1. MySQLでデフォルトの制約を追加する方法

    2. Oracle 12:コンマ区切りのリストに参加しますか?

    3. データを失うことなくPostgreSQLをバージョン9.6からバージョン10.1にアップグレードするにはどうすればよいですか?

    4. PostgreSQLでのAtanh()のしくみ