概要 :このチュートリアルでは、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の使用方法を学びました。 複数のテーブルからデータをクエリする句。