第9章 JOIN句
準備
まずは、2つのテーブルを作成してデータを挿入し、その後でJOIN句の概念を説明します。
Employees テーブルを作成します。
CREATE TABLE Employees (
EmployeeID int,
Name varchar(255),
DepartmentID int
);
INSERT INTO Employees (EmployeeID, Name, DepartmentID)
VALUES (1, 'Bob', 1), (2, 'Alice', 2), (3, 'Charlie', 3), (4, 'Daniel', NULL);
Departments テーブルを作成します。
CREATE TABLE Departments (
DepartmentID int,
DepartmentName varchar(255)
);
INSERT INTO Departments (DepartmentID, DepartmentName)
VALUES (1, 'HR'), (2, 'Sales'), (3, 'IT'), (5, 'Marketing');
これで、テーブルとデータが用意できました。
INNER JOIN
両方のテーブルに存在する行だけを返します。
このクエリは、両方のテーブルに存在するデータ(つまり、EmployeesテーブルのDepartmentIDがDepartmentsテーブルに存在するデータ)だけを取得します。その結果、以下のようなデータが取得されます。
SELECT Employees.Name, Departments.DepartmentName
FROM Employees
INNER JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;
+---------+----------------+ | Name | DepartmentName | +---------+----------------+ | Bob | HR | | Alice | Sales | | Charlie | IT | +---------+----------------+
LEFT JOIN (または LEFT OUTER JOIN)
左のテーブルにある全ての行と、それらの行に一致する右のテーブルの行を返します。右のテーブルに一致する行がない場合は、NULLが返されます。
このクエリは、Employeesテーブルのすべてのデータを取得し、可能な場合はDepartmentsテーブルのデータと結合します。その結果、以下のようなデータが取得されます。
SELECT Employees.Name, Departments.DepartmentName
FROM Employees
LEFT JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;
+---------+----------------+ | Name | DepartmentName | +---------+----------------+ | Bob | HR | | Alice | Sales | | Charlie | IT | | Daniel | NULL | +---------+----------------+
RIGHT JOIN (または RIGHT OUTER JOIN)
右のテーブルにある全ての行と、それらの行に一致する左のテーブルの行を返します。左のテーブルに一致する行がない場合は、NULLが返されます。
このクエリは、Departmentsテーブルのすべてのデータを取得し、可能な場合はEmployeesテーブルのデータと結合します。その結果、以下のようなデータが取得されます。
SELECT Employees.Name, Departments.DepartmentName
FROM Employees
RIGHT JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;
+---------+----------------+ | Name | DepartmentName | +---------+----------------+ | Bob | HR | | Alice | Sales | | Charlie | IT | | NULL | Marketing | +---------+----------------+