データベース設計

【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テーブル」には、次のようなデータが格納されていることを前提としています。

ID (id) ※PK名前 (name)住所 (address)年齢 (age)部署ID (department_id)
1鈴木一郎東京都441
2佐藤次郎埼玉県321
3田中三郎千葉県243
4伊藤四郎東京都222
5斎藤五郎東京都554
【userテーブル】
部署ID (department_id) ※PK部署名 (name)
1営業部
2開発部
3総務部
【departmentテーブル】

テーブルの内部結合

テーブルの結合には「内部結合」と「外部結合」があります。

「内部結合」とは両方のテーブルに存在するデータを抽出する結合のことで、「外部結合」とは、基準となるテーブルに存在すれば抽出する結合のことです。

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

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

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;

■実行結果

idnameaddressage department.name
1鈴木一郎東京都44営業部
2佐藤次郎埼玉県32営業部
3田中三郎千葉県 24総務部
4伊藤四郎東京都22開発部

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;

WHERE句を使って内部結合した結果、INNER JOINで内部結合した結果と同じになります。

学習書の紹介

SQLはデータベース操作に特化した言語で、柔軟にデータを操作できます。ただし、独自のロジックに基づいているため、それを正しく理解しなければ、読みづらくパフォーマンスの出ないSQLになってしまいます。本書では、「条件分岐」「集約」「ループ」「結合」「更新」など日常的に実行する処理の良い書き方・悪い書き方を解説します。その際、データベース内部でどう処理が実行されているかを示す実行計画を読み解くことで、「なぜそう書くと効率が良いのか」「可読性や保守性が向上するのか」を実感を持って理解することを目指します。

本書は「そもそもデータベース(リレーショナルデータベース)とはどういうものであるか」から解説を始めます。基礎知識を身につけ、データの操作を実際に試して学ぶことができる一冊です。

「設計」まで見えてくる入門書
「標準SQL」&「データ設計」を土台に、SQL&データベースの基本を学べる入門書。
「SQLでどんなことができるのか」
「どんなときに便利なのか」
「なぜそんなしくみになっているのか」

一つ一つ、ステップアップしながら解説します。

-データベース設計

error: Content is protected !!