SQL

【SQL】INNER JOINの使い方(テーブル内部結合)

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

[外部結合のイメージ例]

LEFT JOIN

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で内部結合した結果と同じになりました。

よろしければ記事の評価をお願いします

© 2021 ITを分かりやすく解説