sql >> データベース >  >> RDS >> SQLite

SQLite内部結合

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


    1. MariaDBでUNIONを使用する場合の「エラー1222(21000):使用されるSELECTステートメントの列数が異なる」を修正

    2. SQLServerのパフォーマンスのボトルネックについて話す

    3. PL / SQLがロールによって付与された権限を尊重しないのはなぜですか?

    4. PostgreSQL:pg_dump、pg_restoreのパフォーマンスを改善