概要 :このチュートリアルでは、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結合について学習しました。