概要 :このチュートリアルでは、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
をエミュレートする句 条項。