INNER JOINの基本構文
SQLの「INNER JOIN」を使えば、テーブルを内部結合できます。
内部結合の基本構文(INNER JOIN)
SELECT 列名
FROM テーブル名1 INNER JOIN テーブル名2 ON 結合条件;
また「INNER JOIN」を使わなくても、WHERE句でテーブルを内部結合することもできます。
内部結合の基本構文(WHERE)
SELECT 列名
FROM テーブル名1, テーブル名2
WHERE 結合条件;
本記事では、テーブルの内部結合を行う方法を解説していきます。
また「userテーブル」と「departmentテーブル」には、次のようなデータが格納されていることを前提としています。
【userテーブル】
ID (id) ※PK | 名前 (name) | 住所 (address) | 年齢 (age) | 部署ID (department_id) |
202000001 | 鈴木一郎 | 東京都 | 44 | 1 |
202000002 | 佐藤次郎 | 埼玉県 | 32 | 1 |
202000003 | 田中三郎 | 千葉県 | 24 | 3 |
202000004 | 伊藤四郎 | 東京都 | 22 | 2 |
202000005 | 斎藤五郎 | 東京都 | 55 | 4 |
【departmentテーブル】
部署ID (department_id) ※PK | 部署名 (name) |
1 | 営業部 |
2 | 開発部 |
3 | 総務部 |
スポンサーリンク
テーブルの内部結合
テーブルの結合には「内部結合」と「外部結合」があります。
「内部結合」とは両方のテーブルに存在するデータを抽出する結合のことで、「外部結合」とは、基準となるテーブルに存在すれば抽出する結合のことです。
[内部結合のイメージ例]
[外部結合のイメージ例]
INNER JOINを使った内部結合
次の例では、INNER JOINを使い「userテーブル」と「departmentテーブル」を「user.department_id = department.id」の条件で内部結合しています。
■INNER JOINを使った内部結合の例
SELECT
user.id, user.name, user.address, user.age, department.name
FROM
user INNER JOIN department ON user.department_id = department.id;
■実行結果
+-----------+----------+---------+------+--------+
| id | name | address | age | name |
+-----------+----------+---------+------+--------+
| 202000001 | 鈴木一郎 | 東京都 | 44 | 営業部 |
| 202000002 | 佐藤次郎 | 埼玉県 | 32 | 営業部 |
| 202000003 | 田中三郎 | 千葉県 | 24 | 総務部 |
| 202000004 | 伊藤四郎 | 東京都 | 22 | 開発部 |
+-----------+----------+---------+------+--------+
4 rows in set (0.00 sec)
INNER JOINを使って内部結合した結果、結合条件で指定した「部署ID」が一致するデータのみ抽出されています。
WHERE句を使った内部結合
次の例では、WHERE句を使い「userテーブル」と「departmentテーブル」を「user.department_id = department.id」の条件で内部結合しています。
■WHERE句を使った内部結合の例
SELECT
user.id, user.name, user.address, user.age, department.name
FROM
user, department
WHERE
user.department_id = department.id;
■実行結果
+-----------+----------+---------+------+--------+
| id | name | address | age | name |
+-----------+----------+---------+------+--------+
| 202000001 | 鈴木一郎 | 東京都 | 44 | 営業部 |
| 202000002 | 佐藤次郎 | 埼玉県 | 32 | 営業部 |
| 202000003 | 田中三郎 | 千葉県 | 24 | 総務部 |
| 202000004 | 伊藤四郎 | 東京都 | 22 | 開発部 |
+-----------+----------+---------+------+--------+
4 rows in set (0.00 sec)
WHERE句を使って内部結合した結果、INNER JOINで内部結合した結果と同じになりました。