SQL - 右結合: 初心者向けの包括ガイド
こんにちは、将来のデータベース魔法使いさんたち!今日は、SQLの右結合の魔法の世界に飛び込みます。コードを書いたことがない人も心配しないでください – この旅であなたの親切なガイドになるつもりです。このチュートリアルの終わりまでに、プロのようにテーブルを右結合するスキルを身につけるでしょう!
SQLの右結合: あなたの新しいベストフレンド
什么は右結合?
基本から始めましょう。右結合は、一つのグループ(右側のテーブルと呼びましょう)の全ての友達をパーティに招待し、他のグループ(左側のテーブル)にいる共通の友達がいるかどうかを確認するようなものです。共通の友達がいる場合は素晴らしい!ない場合は、問題ありません – 彼らもパーティに来ることができます。
SQLの言葉では、右結合は右側のテーブル(table2)の全てのレコードと、左側のテーブル(table1)の一致するレコードを返します。一致しない場合は、左側の結果はNULLになります。
基本構文
基本的な右結合は以下のようになります:
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;
これを分解すると:
- 表示したいカラムを選択します
-
table1
(左側のテーブル)から始めます -
table2
(右側のテーブル)と右結合します - ON句でどのように接続されているかを指定します
シンプルな例
想象して見てください。私たちには「従業員」テーブルと「部署」テーブルの二つがあります。すべての部署には従業員がいませんが、空の部署も含めてすべて表示したいとします。
SELECT Employees.Name, Departments.DepartmentName
FROM Employees
RIGHT JOIN Departments
ON Employees.DepartmentID = Departments.DepartmentID;
このクエリは、従業員がいない部署も含めてすべての部署を表示します。従業員がいない部署の場合、NameカラムはNULLを表示します。
右結合で複数のテーブルを結合: もっと、もっと!
時々、二つのテーブルだけでは十分ではありません。例えば、給料情報を「給料」テーブルから追加したいとします。
SELECT e.Name, d.DepartmentName, s.Salary
FROM Employees e
RIGHT JOIN Departments d ON e.DepartmentID = d.DepartmentID
RIGHT JOIN Salaries s ON e.EmployeeID = s.EmployeeID;
ここでは、テーブルのエイリアス(e, d, s)を使用してクエリを読みやすくしています。このクエリはすべての部署とすべての給料を表示します。従業員が一致しない場合でも表示されます。
プロのヒント:順序は重要です
複数のテーブルを右結合する際、結合の順序は結果に影響を与えることがあります。必ず完全に表示したいテーブルから始めてください(この場合、Departments)。
右結合とWHERE句:選別する
時々、データを少し選別したい場合があります。WHERE句が役立ちます。
SELECT e.Name, d.DepartmentName
FROM Employees e
RIGHT JOIN Departments d ON e.DepartmentID = d.DepartmentID
WHERE d.Location = 'New York';
このクエリは、ニューヨークにあるすべての部署と、その部署にいる従業員を表示します。
孤独な部署を見つける
従業員のいない部署を見つけたい場合は、以下のようにします:
SELECT d.DepartmentName
FROM Employees e
RIGHT JOIN Departments d ON e.DepartmentID = d.DepartmentID
WHERE e.EmployeeID IS NULL;
このクエリは右結合を使用してすべての部署を含め、従業員がいない部署をフィルタリングします。
すべてをまとめて:現実のシナリオ
学校のデータベースを運用していると想象してみてください。私たちには「生徒」、「クラス」、「受講」の三つのテーブルがあります。すべてのクラス、受講している生徒の数、平均点を表示したいとします。
SELECT
c.ClassName,
COUNT(s.StudentID) AS EnrolledStudents,
AVG(e.Grade) AS AverageGrade
FROM Classes c
LEFT JOIN Enrollments e ON c.ClassID = e.ClassID
LEFT JOIN Students s ON e.StudentID = s.StudentID
GROUP BY c.ClassName;
このクエリはすべてのクラスを表示し、受講している生徒がいない場合でも表示します。COUNTとAVG関数はNULL値を適切に処理します。
一般的な右結合メソッド
以下は、役立つ一般的な右結合メソッドの表です:
メソッド | 説明 | 例 |
---|---|---|
基本的な右結合 | 二つのテーブルを結合し、右側のテーブルの全てのレコードを保持 | SELECT * FROM table1 RIGHT JOIN table2 ON table1.id = table2.id |
WHERE句を含む右結合 | 右結合の結果をフィルタリング | SELECT * FROM table1 RIGHT JOIN table2 ON table1.id = table2.id WHERE table2.column = 'value' |
複数の右結合 | 二つ以上のテーブルを結合 | SELECT * FROM table1 RIGHT JOIN table2 ON table1.id = table2.id RIGHT JOIN table3 ON table2.id = table3.id |
USINGを含む右結合 | 列名が同じ場合の結合条件を簡略化 | SELECT * FROM table1 RIGHT JOIN table2 USING (id) |
GROUP BYを含む右結合 | 右結合の結果をグループ化 | SELECT table2.column, COUNT(*) FROM table1 RIGHT JOIN table2 ON table1.id = table2.id GROUP BY table2.column |
練習が大事です!これらのクエリを自分のデータベースで実験してみてください。幸せなコーディング、そしてJOINがあなたと共にありますように!
Credits: Image by storyset