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

例を含むSQLJOINチュートリアル

    この記事では、SQLServerのJOINについて詳しく見ていきます。サポートされているすべてのSQLServerJOINタイプを、構文、視覚的な図、および例とともに確認します。

    ご存知のとおり、テーブルデータはSQLデータベースの中核です。これを効果的に使用するには、データベース管理者は特定の条件に基づいて定期的に複数のテーブルからレコードを抽出する必要があります。そして、それこそがSQLJOINの目的です。

    JOINは取得に使用されるSQL句です テーブル間の論理関係に基づく2つ以上のテーブルからのデータ。 結合は、SQLServerが1つのテーブルのデータを使用して別のテーブルの行を選択する方法を示します。

    SQLのさまざまなタイプのJOIN

    SQL Serverは、 INNER JOIN など、さまざまな種類のJOINをサポートしています。 、自己参加 CROSS JOIN 、および OUTER JOIN 。実際、各結合タイプは、クエリで2つのテーブルが関連付けられる方法を定義します。次に、外部結合は左外部結合に分割できます。 、右外部結合 、および完全外部結合

    JOINがどのように機能するかをよりよく示すために、2つのテーブルを作成します。

    CREATE TABLE AdventureWorks2019.dbo.users (
    auid INT IDENTITY
    ,username VARCHAR(50) NOT NULL
    ,password VARCHAR(50) NOT NULL
    ,createdate DATETIME NOT NULL
    ,isActive TINYINT NOT NULL
    );
    
    CREATE TABLE AdventureWorks2019.dbo.userprofile (
    apid INT NOT NULL
    ,auid INT NOT NULL
    ,firstname VARCHAR(50) NOT NULL
    ,lastname VARCHAR(50) NOT NULL
    ,email VARCHAR(100) NOT NULL
    ,phone VARCHAR(45) NOT NULL
    );

    次に、作成したテーブルにデータを挿入する必要があります。

    USE AdventureWorks2019
    GO
    Insert into dbo.users
    (auid, username,password, createdate, isActive)
    values
    (1,'admin','pswrd123', GETDATE(), 1);
    Insert into dbo.userprofile
    (apid, auid, firstname, lastname, email, phone)
    values
    (1,1,'Jack', 'Wolf', '[email protected]','600075764216');
    Insert into dbo.users
    (auid,username,password, createdate, isActive)
    values
    (2, 'admin1','pass506', GETDATE(), 1);
    Insert into dbo.userprofile
    (apid, auid, firstname, lastname, email, phone)
    values
    (2, 3, 'Tom', 'Collins', '[email protected]','878511311054');
    Insert into dbo.users
    (auid, username,password, createdate, isActive)
    values
    (4,'fox12','[email protected]', GETDATE(), 1);
    Insert into userprofile
    (apid, auid, firstname, lastname, email, phone)
    values
    (4,5,'Bill', 'Fonskin', '[email protected]','450985764216');
    Insert into dbo.users
    (auid,username,password, createdate, isActive)
    values
    (6, 'lexus1267','98hnfRT6', GETDATE(), 1);
    Insert into dbo.userprofile
    (apid, auid, firstname, lastname, email, phone)
    values
    (7, 7, 'John', 'Hopkins', '[email protected]','878511311054');

    SQL内部結合

    INNER JOINステートメントは、両方のテーブルで値が一致するレコードを返します。

    SQLINNERJOIN句の構文は次のとおりです。

    SELECT column_name(s)
    FROM table1
    INNER JOIN table2
     ON table1.column_name = table2.column_name;

    SQL外部結合

    INNER JOIN句とは異なり、OUTER JOINは、一致するレコードだけでなく、一致しないレコードも返します。結合されたテーブルに一致しない行がある場合、それらの行にはNULL値が表示されます。

    SQLServerのOUTERJOINには、SQLLEFTJOINとSQLRIGHTJOINの2種類があります。それぞれを詳しく見ていきましょう。

    SQL LEFT JOIN

    SQL LEFT JOINは、左側のテーブル(テーブルA)からすべてのレコードを返し、右側のテーブル(テーブルB)から一致するレコードを返します。一致するものがない場合、結果は右側から0レコードになります。

    SQLLEFTJOIN句の構文は次のとおりです。

    SELECT column_name(s)
    FROM tableA
    LEFT JOIN tableB
     ON tableA.column_name = tableB.column_name;

    SQL RIGHT JOIN

    RIGHT JOINキーワードは、右側のテーブル(table2)からすべてのレコードを返し、左側のテーブル(table1)から一致するレコードを返します。一致するものがない場合、結果は左側から0レコードになります。

    SQLRIGHTJOIN句の構文は次のとおりです。

    SELECT column_name(s)
    FROM tableA
    RIGHT JOIN tableB
     ON tableA.column_name = tableB.column_name;

    SQL FULL OUTER JOIN

    FULL OUTER JOINは、左(テーブルA)または右(テーブルB)のテーブルレコードに一致がある場合にすべてのレコードを返します。

    SQL FULLOUTERJOIN句の構文は次のとおりです。

    SELECT column_name(s)
     FROM tableA
     FULL OUTER JOIN tableB
     ON tableA.column_name = tableB.column_name
      WHERE condition;

    SQL CROSS JOIN

    SQL CROSS JOINは、デカルトJOINとも呼ばれ、各テーブルから行のすべての組み合わせを取得します。このタイプのJOINでは、追加の条件が導入されていない場合、テーブルAの各行にテーブルBのすべての行を乗算して結果セットが返されます。

    クロス結合をよりよく理解するために、以下のベン図を見てみましょう。

    SQLCROSSJOINの構文は次のとおりです。

    SELECT * 
    FROM tableA 
    CROSS JOIN tableB;

    SQL自己結合

    自己結合は通常のJOINですが、テーブルはそれ自体と結合されます。これは、テーブルの各行がそれ自体およびテーブルの他のすべての行と結合されていることを意味します。

    SQL自己結合の構文は次のとおりです。

    SELECT column_name(s)
    FROM table1 T1, table1 T2
      WHERE condition;

    結論

    SQL JOIN句の使用に関する知識と専門知識は、DBAまたはアナリストにとって不可欠なスキルです。優れたコード補完機能を備えたdbForgeStudio for SQL Server 最も複雑なJOIN句を作成する時間と労力を節約できます。何百もの列名やエイリアスを覚えておく必要はありません。dbForgeStudioforSQLは、完全なSQLJOIN句を要求します。このツールの豊富な機能により、複雑なSQLクエリを設計し、JOIN条件をすばやく簡単に管理できます。


    1. PLSQLで一重引用符をエスケープする

    2. テキストファイルからOracleのテーブルへのデータのロード

    3. WITH句を使用したクエリでPostgresにFROM句のエントリエラーがありません

    4. HA/DRソリューションの自己妄想を避ける