この記事では、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条件をすばやく簡単に管理できます。