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()のしくみ