SQL - 右結合: 初心者向けの包括ガイド

こんにちは、将来のデータベース魔法使いさんたち!今日は、SQLの右結合の魔法の世界に飛び込みます。コードを書いたことがない人も心配しないでください – この旅であなたの親切なガイドになるつもりです。このチュートリアルの終わりまでに、プロのようにテーブルを右結合するスキルを身につけるでしょう!

SQL - Right Join

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