概要 :このチュートリアルでは、2つ以上のテーブルからデータをクエリするためのさまざまな種類のSQLite結合について学習します。
デモンストレーションには、artistsを使用します およびalbums サンプルデータベースのテーブル。
アルバムが1人のアーティストに属している間、アーティストはゼロまたは多数のアルバムを持つことができます。
両方のartistsからデータをクエリするには およびalbums テーブルでは、INNER JOINを使用できます 、LEFT JOIN 、またはCROSS JOIN 句。各結合句は、SQLiteが1つのテーブルのデータを使用して別のテーブルの行と照合する方法を決定します。
SQLiteはRIGHT JOINを直接サポートしていないことに注意してください およびFULL OUTER JOIN 。
SQLite INNER JOIN
次のステートメントは、アルバムのタイトルとそのアーティスト名を返します。
SELECT
Title,
Name
FROM
albums
INNER JOIN artists
ON artists.ArtistId = albums.ArtistId;
Code language: SQL (Structured Query Language) (sql) 部分的な出力は次のとおりです。
この例では、INNER JOIN 句は、albumsの各行に一致します artistsのすべての行を含むテーブル 参加条件に基づくテーブル(artists.ArtistId = albums.ArtistId )ONの後に指定 キーワード。
結合条件がtrue(または1)と評価された場合、両方のalbumsの行の列 およびartists テーブルは結果セットに含まれます。
このクエリはテーブルエイリアス(l)を使用します albumsの場合 テーブルとr artistsの場合 表)クエリを短縮するには:
SELECT
l.Title,
r.Name
FROM
albums l
INNER JOIN artists r ON
r.ArtistId = l.ArtistId;
Code language: SQL (Structured Query Language) (sql)
結合されたテーブルの列名が同じ場合(例:ArtistId) 、USINGを使用できます 構文は次のとおりです:
SELECT
Title,
Name
FROM
albums
INNER JOIN artists USING(ArtistId);Code language: SQL (Structured Query Language) (sql)
句USING(ArtistId) ON artists.ArtistId = albums.ArtistId句と同等です。 。
SQLite LEFT JOIN
このステートメントは、artistsからアーティスト名とアルバムタイトルを選択します およびalbums LEFT JOINを使用したテーブル 条項:
SELECT
Name,
Title
FROM
artists
LEFT JOIN albums ON
artists.ArtistId = albums.ArtistId
ORDER BY Name;
Code language: SQL (Structured Query Language) (sql) 出力は次のとおりです:
LEFT JOIN 句は、左側のテーブルから始まるデータを選択します(artists )および右側のテーブルの一致する行(albums )参加条件に基づく(artists.ArtistId = albums.ArtistId )。
左結合は、artistsからのすべての行を返します テーブル(または左側のテーブル)とalbumsの一致する行 テーブル(または右のテーブル)。
左側のテーブルの行の右側のテーブルに一致する行がない場合、SQLiteには左側のテーブルの行の列とNULLが含まれます 右のテーブルの列用。
INNER JOINに似ています 句では、USINGを使用できます 結合条件の構文は次のとおりです。
SELECT
Name,
Title
FROM
artists
LEFT JOIN albums USING (ArtistId)
ORDER BY
Name;Code language: SQL (Structured Query Language) (sql)
アルバムを持っていないアーティストを探したい場合は、WHEREを追加できます。 次のクエリに示されている句:
SELECT
Name,
Title
FROM
artists
LEFT JOIN albums ON
artists.ArtistId = albums.ArtistId
WHERE Title IS NULL
ORDER BY Name;
Code language: SQL (Structured Query Language) (sql) この写真は部分的な出力を示しています:
通常、このタイプのクエリを使用すると、左側のテーブルで使用できるが、右側のテーブルに対応する行がない行を見つけることができます。
LEFT JOINに注意してください およびLEFT OUTER JOIN 同義語です。
SQLite CROSS JOIN
CROSS JOIN 句は、結合されたテーブルから行のデカルト積を作成します。
INNER JOINとは異なり およびLEFT JOIN 句、CROSS JOIN 結合条件はありません。 CROSS JOINの基本的な構文は次のとおりです。 条項:
SELECT
select_list
FROM table1
CROSS JOIN table2;
Code language: SQL (Structured Query Language) (sql)
CROSS JOIN 最初のテーブルのすべての行を結合します(table1 )2番目のテーブル(table2)のすべての行 )結果セットを作成します。
最初のテーブルにNがある場合 行の場合、2番目のテーブルにはMがあります 行の場合、最終結果はNxMになります 行。
CROSS JOINの実用的な例 句は、さらに処理するための初期データセットを形成するために2つのデータセットを結合することです。たとえば、商品と月のリストがあり、どの商品を販売できるかを計画したいとします。
次のスクリプトは、productsを作成します およびcalendars テーブル:
CREATE TABLE products(
product text NOT null
);
INSERT INTO products(product)
VALUES('P1'),('P2'),('P3');
CREATE TABLE calendars(
y int NOT NULL,
m int NOT NULL
);
INSERT INTO calendars(y,m)
VALUES
(2019,1),
(2019,2),
(2019,3),
(2019,4),
(2019,5),
(2019,6),
(2019,7),
(2019,8),
(2019,9),
(2019,10),
(2019,11),
(2019,12);
Code language: SQL (Structured Query Language) (sql)
このクエリはCROSS JOINを使用します 製品と月を組み合わせる条項:
SELECT *
FROM products
CROSS JOIN calendars;
Code language: SQL (Structured Query Language) (sql) 出力は次のとおりです:
このチュートリアルでは、複数のテーブルからクエリを実行できるさまざまな種類のSQLite結合について学習しました。