データベースでの作業において、単一のテーブルからデータを取得するだけでなく、複数のテーブルから情報を集めることがよくあります。これを実現するためにSQLでは「結合」を使用します。この記事では、SQLの結合について掘り下げ、内部結合と外部結合について解説します。
1. 結合の基本
結合とは、2つ以上のテーブルを特定の条件でつなげ、一つの結果セットとして表示する操作です。結合にはいくつか種類があります。
- 内部結合(INNER JOIN)
- 左外部結合(LEFT JOIN)
- 右外部結合(RIGHT JOIN)
- 完全外部結合(FULL JOIN)
それぞれの結合の特性と使用例について解説していきます。
2. 内部結合(INNER JOIN)
内部結合は、結合するテーブルの共通部分のみを取得します。共通しない部分は結果セットに含まれません。
SELECT Employees.EmployeeName, Departments.DepartmentName
FROM Employees
INNER JOIN Departments
ON Employees.DepartmentID = Departments.DepartmentID;
このクエリでは、Employees
テーブルとDepartments
テーブルをDepartmentID
を基に結合しています。結果として、DepartmentID
が一致する行のみが出力されます。
3. 左外部結合(LEFT JOIN)
左外部結合は、左のテーブルの全ての行と、それと一致する右のテーブルの行を取得します。右のテーブルに一致する行がない場合でも、左のテーブルの行は全て表示され、一致しなかった列はNULLとなります。
SELECT Employees.EmployeeName, Departments.DepartmentName
FROM Employees
LEFT JOIN Departments
ON Employees.DepartmentID = Departments.DepartmentID;
このクエリでは、Employees
テーブルとDepartments
テーブルを結合しますが、Departments
テーブルに一致する行がなくても、Employees
テーブルの行は全て表示されます。
4. 右外部結合(RIGHT JOIN)
右外部結合は左外部結合の逆で、右のテーブルの全ての行と、それと一致する左のテーブルの行を取得します。左のテーブルに一致する行がない場合でも、右のテーブルの行は全て表示され、一致しなかった列はNULLとなります。
SELECT Employees.EmployeeName, Departments.DepartmentName
FROM Employees
RIGHT JOIN Departments
ON Employees.DepartmentID = Departments.DepartmentID;
このクエリでは、Employees
テーブルとDepartments
テーブルを結合しますが、Employees
テーブルに一致する行がなくても、Departments
テーブルの行は全て表示されます。
5. 完全外部結合(FULL JOIN)
完全外部結合は、左テーブルと右テーブルの全ての行を取得します。一致しない行がある場合でもその行は表示され、一致しなかった列はNULLとなります。
SELECT Employees.EmployeeName, Departments.DepartmentName
FROM Employees
FULL JOIN Departments
ON Employees.DepartmentID = Departments.DepartmentID;
このクエリでは、Employees
テーブルとDepartments
テーブルを結合しますが、一方のテーブルに一致する行がなくても、その行は表示され、一致しなかった列はNULLと表示されます。
まとめ
SQLの結合は、データ分析や情報取得において非常に重要なツール。内部結合、外部結合を適切に使い分けることで、データベースから求める情報をより効率的に取り出すことができます。