概要 :このチュートリアルでは、SQLite内部結合句を使用して複数のテーブルからデータをクエリする方法を示します。
SQLite内部結合句の概要
リレーショナルデータベースでは、データは多くの場合、関連する多くのテーブルに分散されます。テーブルは、外部キーを使用して別のテーブルに関連付けられています。
複数のテーブルからデータをクエリするには、INNER JOIN
を使用します 句。 INNER JOIN
句は、相関テーブルの列を結合します。
AとBの2つのテーブルがあるとします。
Aにはa1、a2、およびf列があります。 Bにはb1、b2、およびf列があります。 Aテーブルは、fという名前の外部キー列を使用してBテーブルにリンクします。
次に、内部結合句の構文を示します。
SELECT a1, a2, b1, b2
FROM A
INNER JOIN B on B.f = A.f;
Code language: SQL (Structured Query Language) (sql)
Aテーブルの各行について、INNER JOIN
句は、f列の値をBテーブルのf列の値と比較します。 Aテーブルのf列の値がBテーブルのf列の値と等しい場合、a1、a2、b1、b2、列のデータを結合し、この行を結果セットに含めます。
つまり、INNER JOIN
句は、Bテーブルに対応する行があるAテーブルから行を返します。
このロジックは、3つ以上のテーブルを結合する場合に適用されます。
次の例を参照してください。
結果セットには、Aテーブルの行のみ:(a1,1)、(a3,3)のBテーブルの対応する行(b1,1)、(b2,3)が含まれます。
次の図は、INNER JOIN
を示しています。 条項:
SQLite INNER JOIN
例
tracks
を見てみましょう およびalbums
サンプルデータベースのテーブル。 tracks
albums
へのテーブルリンク AlbumId
経由のテーブル 列。
tracks
内 テーブル、AlbumId
列は外部キーです。そしてalbums
で テーブル、AlbumId
主キーです。
両方のtracks
からデータをクエリするには およびalbums
テーブルでは、次のステートメントを使用します:
SELECT
trackid,
name,
title
FROM
tracks
INNER JOIN albums ON albums.albumid = tracks.albumid;
Code language: SQL (Structured Query Language) (sql)
試してみてください
トラックテーブルの各行について、SQLiteはalbumid
の値を使用します tracks
の列 albumid
の値と比較するテーブル albums
の テーブル。 SQLiteが一致するものを見つけると、結果セットの両方のテーブルの行のデータを結合します。
AlbumId
を含めることができます 最終結果セットの両方のテーブルの列を使用して、効果を確認します。
SELECT
trackid,
name,
tracks.albumid AS album_id_tracks,
albums.albumid AS album_id_albums,
title
FROM
tracks
INNER JOIN albums ON albums.albumid = tracks.albumid;
Code language: SQL (Structured Query Language) (sql)
試してみてください
SQLite内部結合–3つのテーブルの例
次の表を参照してください:tracks
albums
およびartists
1つのトラックは1つのアルバムに属し、1つのアルバムには多くのトラックがあります。 tracks
albums
に関連付けられたテーブル albumid
経由のテーブル 列。
1つのアルバムは1つのアーティストに属し、1つのアーティストには1つまたは複数のアルバムがあります。 albums
artists
へのテーブルリンク artistid
経由のテーブル 列。
これらのテーブルからデータをクエリするには、SELECT
で2つの内部結合句を使用する必要があります 次のようなステートメント:
SELECT
trackid,
tracks.name AS track,
albums.title AS album,
artists.name AS artist
FROM
tracks
INNER JOIN albums ON albums.albumid = tracks.albumid
INNER JOIN artists ON artists.artistid = albums.artistid;
Code language: SQL (Structured Query Language) (sql)
試してみてください
WHERE句を使用して、次のステートメントとしてID10のアーティストのトラックとアルバムを取得できます。
SELECT
trackid,
tracks.name AS Track,
albums.title AS Album,
artists.name AS Artist
FROM
tracks
INNER JOIN albums ON albums.albumid = tracks.albumid
INNER JOIN artists ON artists.artistid = albums.artistid
WHERE
artists.artistid = 10;
Code language: SQL (Structured Query Language) (sql)
試してみてください
このチュートリアルでは、SQLite INNER JOIN
の使用方法を学びました。 複数のテーブルからデータをクエリする句。