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

SQLite参加

    概要 :このチュートリアルでは、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.ArtistIdONの後に指定 キーワード。

    結合条件が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結合について学習しました。


    1. MySQLでブログ管理用のデータベースを設計するためのガイド

    2. Oracle 12:コンマ区切りのリストに参加しますか?

    3. 2016年に登場するOracle12.2.0.1

    4. ツリービューノードへの画像の割り当て-2