SQL - ジョインの使用: 初心者向けの包括的なガイド
こんにちは、データベースの愛好家さんたち!コンピュータサイエンスの教師として多年間の経験を積んでいる者として、SQLジョインのエキサイティングな世界をお手伝いして楽しんでいただきます。プログラミングが初めての方でも心配しないでください。基本的なところから始めて、少しずつ進んでいきます。このチュートリアルが終わる頃には、プロのようにテーブルを結合できるようになるでしょう!
SQLジョインとは?
大きな家族の再会を計画しているとしましょう。名前と年齢のリストと、名前とお気に入りの食べ物のリストを持っています。これらのリストを結合して、各家族の一貫した像を得ることができたら素晴らしいでしょう。これが、SQLジョインがデータベースのテーブルに対して行うことです!
SQLでは、ジョイン句を使用して、関連する列に基づいて2つ以上のテーブルの行を結合します。複数のソースからの情報を持つスーパーテーブルを作成するようなものです。
SQLジョイン句
基本的なSQL JOINの構文は以下の通りです:
SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name = table2.column_name;
以下に分解します:
-
SELECT
句で表示したい列を指定します。 -
FROM
句で最初のテーブル(table1)を指定します。 -
JOIN
を使用して他のテーブル(table2)と結合することを示します。 -
ON
句でテーブルの一致方法を指定します。
SQLのジョインの種類
さまざまなジョインの種類を探ってみましょう。これらは家族再会のゲストリストを組み合わせるさまざまな方法として考えられます!
1. INNER JOIN
INNER JOINは、あなたのリストとあなたの姉のリストの両方に記載されているいとこだけを招待するようなものです。両方のテーブルに一致する値を持つレコードを返します。
SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
このクエリは、すべての注文と顧客名を返しますが、注文をした顧客に限定されます。
2. LEFT (OUTER) JOIN
LEFT JOINは、姉のリストに載っていない人でもあなたのリストに載っている人をすべて含めるようなものです。左テーブルのすべてのレコードと右テーブルの一致したレコードを返します。
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
これはすべての顧客を表示しますが、注文をした顧客に限定されません(注文IDがNULLになる場合があります)。
3. RIGHT (OUTER) JOIN
RIGHT JOINはLEFT JOINの逆で、姉のリストを主要なリストとして使用します。右テーブルのすべてのレコードと左テーブルの一致したレコードを返します。
SELECT Orders.OrderID, Employees.LastName
FROM Orders
RIGHT JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID;
これはすべての従業員を表示しますが、注文を処理した従業員に限定されません。
4. FULL (OUTER) JOIN
FULL JOINは、あなたとあなたの姉のリストを両方とも組み合わせるようなものです。左テーブルまたは右テーブルのいずれかで一致がある場合すべてのレコードを返します。
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
これはすべての顧客とすべての注文を表示しますが、一致しない場合はNULL値が表示されます。
実用的な例
実際のシナリオで知識を試してみましょう!
例1: 顧客と注文情報の結合
Customers
とOrders
の2つのテーブルがあるとします。すべての顧客とその注文(場合によっては)を見たいと思っています。
SELECT Customers.CustomerName, Orders.OrderID, Orders.OrderDate
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerName;
このクエリは以下のことを行います:
- すべての顧客をリストアップします(注文がない場合でも)。
- 注文をした顧客に対してOrderIDとOrderDateを表示します。
- 注文がない顧客に対してOrderIDとOrderDateはNULLになります。
- 顧客名で結果を並べ替えます。
例2: 販売していない従業員の特定
従業員がまだ注文を処理していない場合を特定したいとします。
SELECT Employees.EmployeeID, Employees.LastName, Employees.FirstName
FROM Employees
LEFT JOIN Orders ON Employees.EmployeeID = Orders.EmployeeID
WHERE Orders.OrderID IS NULL;
このクエリは以下のことを行います:
- 従業員と注文のテーブルを結合します。
-
WHERE
句を使用して、一致しない注文をフィルタリングします。 - 注文を処理していない従業員のみを返します。
チップとコツ
- 基本的なジョインから始めて、段階的に複雑さを増やしてください。
- 読みやすさのためにテーブルの別名を使用してください:
SELECT c.CustomerName, o.OrderID FROM Customers c LEFT JOIN Orders o ON c.CustomerID = o.CustomerID;
- 大規模なデータセットではパフォーマンスに注意してください。ジョインはリソースを多く消費します。
一般的なジョインメソッド
以下の表に、私たちが議論したジョインメソッドをまとめます:
ジョイントYPE | 説明 |
---|---|
INNER JOIN | 両方のテーブルに一致する値を持つレコードを返します |
LEFT JOIN | 左テーブルのすべてのレコードと右テーブルの一致したレコードを返します |
RIGHT JOIN | 右テーブルのすべてのレコードと左テーブルの一致したレコードを返します |
FULL JOIN | 左テーブルまたは右テーブルのいずれかで一致がある場合すべてのレコードを返します |
練習を重ねることで完璧になります!さまざまなデータセットでこれらのジョインを試してみてください。そして、あなたのジョインがいつも成功するよう祈っています!ハッピーコーディング!
Credits: Image by storyset