1
2

More than 1 year has passed since last update.

【SQL結合の深掘り】内部結合と外部結合を理解する

Last updated at Posted at 2023-05-21

データベースでの作業において、単一のテーブルからデータを取得するだけでなく、複数のテーブルから情報を集めることがよくあります。これを実現するために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の結合は、データ分析や情報取得において非常に重要なツール。内部結合、外部結合を適切に使い分けることで、データベースから求める情報をより効率的に取り出すことができます。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2