概要 :このチュートリアルでは、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句は、両方のクエリの結果セットから重複する行を保持します。 -
WHERE2番目のSELECTの句 ステートメントは、最初のSELECTの結果セットにすでに含まれている行を削除します ステートメント。
このチュートリアルでは、UNION ALLの使用方法を学習しました。 およびLEFT JOIN SQLite FULL OUTER JOINをエミュレートする句 条項。