6. テーブルの結合
JOIN、結合と SQL 問い合わせ
1
URL: https://www.kkaneko.jp/de/ds/index.html
金子邦彦
謝辞:この資料では「いらすとや」のイラストを使用しています
論理的思考と問題解決能力
データ分析と洞察の獲得
データ管理とSQLスキルの強化
2
アウトライン
1. イントロダクション
2. 結合の基本概念
3. SQL での結合の書き方
4. 結合条件のない結合と、結合条
件のある結合
5. 演習
3
SQLFiddle のサイトにアクセス
Webブラザを使用
1. ェブブラザを開く
2. アドレスバーにSQLFiddleURLを入力
http://sqlfiddle.com/
URLが分からないときは、Googleなどの検索エンジンを利
用。「SQLFiddle」と検索し、表示された結果から
SQLFiddleェブサイトをクリック。
4
SQLFiddle の画面
5
右側のパネル: SQL問い合わせ
SELECT などを入力。
左側のパネル: テーブル定義、デー
タの追加など。SQLCREATE TABLE
INSERT INTO などを入力。
実行ボタン
結果ィンド
実行ボタン
SQLFiddle でのデータベース管理システムの選択
(高度な機能)
6
データベース管理システムの選択
(この授業では MySQL を使用)
6-1. イントロダクション
7
リレーショナルデータベースの仕組み
データをテーブルと呼ばれる表形式で保存
テーブル間関連で結ばれる。複雑な構造を持ったデータ
を効率的に管理することを可能に。
8
関連
リレーショナルデータベースの重要性
1. データの整合性: リレーショナルデータベースは、デー
タの整合性を保持するための機能を有する。これにより、
誤ったデータや矛盾したデータが保存されるのを防ぐこ
とができる。
2. 柔軟な問い合わせ(クエリ)能力: リレーショナルデー
タベースのSQLStructured Query Language)の使用に
より、複雑な検索やデータの抽出が可能になる。
3. トランザクションの機能: 一連の操作全体を一つの単位
として取り扱ことができる機能。これにより、データ
の一貫性と信頼性が向上する。
4. セキュリティ: アクセス権限の設定などにより、セキュ
リティを確保。
データの安全な保管、効率的なデータ検索・操作、ビジネス
や研究の意思決定をサポート。 9
SQL 理解のための前提知識
テーブル
データをテーブルと呼ばれる表形式で保存
問い合わせ(クエリ)
問い合わせ(クエリ)は、データベースから必要なデータ
を検索、加工するための指令
SELECT, FROM, WHERE など、多様なコマンドが存在。
結合、集計、ソート、副問い合わせなど、高度な操作も可
10
ID
商品名
単価
1
みかん
50
2
りんご
100
3
メロン
500
購入者
商品番号
X
1
X
3
Y
2
11
テーブル「商品」からデータを取得すSQLの例
SELECT *FROM 商品;
SELECT 商品名 FROM 商品;
SELECT DISTINCT 商品名 FROM 商品;
SELECT 商品名, 単価 FROM 商品 WHERE 単価 > 80;
SELECT 商品名, 単価 FROM 商品 WHERE 単価 BETWEEN 80 AND 85;
SELECT AVG(単価)FROM 商品;
AVG, MAX, MIN, SUM: 平均、最大、最小、合計
COUNT: 行数
SELECT * FROM 商品 WHERE 商品名 LIKE '%';
*ん」、「ん*」「**」のよに書くことができる
Access では % でなく *
SELECT *FROM 商品 WHERE 商品名 IN ('みかん', 'りんご');
SQL によるテーブル定義
テーブル名商品
属性名ID、商品名、単価
属性のデータ型数値、テキスト、数値
データの整合性を保つための制約なし
12
CREATE TABLE 商品 (
ID INTEGER,
商品名 TEXT,
単価 INTEGER);
データ追加のSQL
13
商品
INSERT INTO 商品 VALUES(1, 'みかん', 50);
INSERT INTO 商品 VALUES(2, 'りんご', 100);
INSERT INTO 商品 VALUES(3, 'メロン', 500);
ID
商品名
単価
1
みかん
50
2
りんご
100
3
メロン
500
演習1.テーブル定義と
データの追加
トピックス
1. SQL によるテーブル定義
2. SQL によるデータの追加
3. 問い合わせ(クエリ)による
確認
14
Webブラザを使用
アドレスバーにSQLFiddleURLを入力
http://sqlfiddle.com/
URLが分からないときは、Googleなどの検索エンジンを利
用。「SQLFiddle」と検索し、表示された結果から
SQLFiddleェブサイトをクリック。
15
左側のパネルに、テーブル定義データの追加を行
SQL を入れる。
16
CREATE TABLE 商品 (
ID INTEGER,
商品名 TEXT,
単価 INTEGER);
INSERT INTO 商品 VALUES(1, 'みかん', 50);
INSERT INTO 商品 VALUES(2, 'りんご', 100);
INSERT INTO 商品 VALUES(3, 'メロン', 500);
Build Schema」をクリック
17
右側のパネルに、問い合わせ(クエリ)を行SQL を入
れる。
Run SQL」をクリック
SQL 文が実行され、結果が表示される。
下側のインドで、結果を確認
18
select * FROM 商品;
6-2. 結合の基本概念
19
結合とその目的
結合は、異なるテーブルを結合して、新たなテーブルを生成
する操作
主な目的 データベース内の異なるテーブルからデータを
組み合わせて、有用なデータを作成
結合条件結合条件通常2つのテーブルの特定の属性
同士の値が等しいとい条件を指定。その他の複雑な条件
も指定できる
結合を行ことで、データベースの柔軟性と効率性を向上。
意思決定や問題解決に役立つデータを得ることができる。
20
商品テーブルと購入テーブ
21
関連
商品
ID
商品名
単価
1
みかん
50
2
りんご
100
3
メロン
500
購入者
X
X
Y
購入
商品
22
商品
ID
商品名
単価
1
みかん
50
2
りんご
100
3
メロン
500
購入
23
購入
購入者
X
X
Y
商品テーブルと購入テーブ
24
関連
商品
ID
商品名
単価
1
みかん
50
2
りんご
100
3
メロン
500
購入者
X
X
Y
購入
Xさんは、1みかんと,
3 メロンを買った
Yさんは、 2 りんごを買った
商品テーブルの情報
購入テーブルの情報
結合と結合条件
結合条件
商品テーブルのIDと購入テーブルの商品
番号等しい」とい結合条件を考えるこ
とができる
結合結果の例
結合結果は新しいテーブル
結合の有用性
どの購入者がどの商品を購入したかを調
べるなど。
さまざまなテーブルを組み合わせて、有
用なデータを得て、分析できる。 25
関連
商品
ID
商品名
単価
1
みかん
50
2
りんご
100
3
メロン
500
購入者
X
X
Y
購入
結合の例
26
SQLの実行により
新しく生成される
テーブル
ID 商品名 単価
購入者
商品番号
1
みかん
50
X
1
3
メロン
500
X
3
2
りんご
100
Y
2
SELECT * FROM 商品
JOIN 購入
ON 商品.ID = 購入.商品番号;結合条件
結合のためのSQL
関連
商品
ID
商品名
単価
1
みかん
50
2
りんご
100
3
メロン
500
購入者
X
X
Y
購入
演習2.SQL による結合
トピックス
1. 結合
2. JOIN ON の使用
27
Webブラザを使用
アドレスバーにSQLFiddleURLを入力
http://sqlfiddle.com/
URLが分からないときは、Googleなどの検索エンジンを利
用。「SQLFiddle」と検索し、表示された結果から
SQLFiddleェブサイトをクリック。
28
左側のパネルに、テーブル定義データの追加を行
SQL を入れる。(以前の SQL は不要なので消す
29
CREATE TABLE 商品 (
ID INTEGER,
商品名 TEXT,
単価 INTEGER);
INSERT INTO 商品 VALUES(1, 'みかん', 50);
INSERT INTO 商品 VALUES(2, 'りんご', 100);
INSERT INTO 商品 VALUES(3, 'メロン', 500);
CREATE TABLE 購入 (
購入者 TEXT,
商品番号 INTEGER);
INSERT INTO 購入 VALUES('X', 1);
INSERT INTO 購入 VALUES('X', 3);
INSERT INTO 購入 VALUES('Y', 2);
Build Schema」をクリック
30
右側のパネルに、問い合わせ(クエリ)を行SQL を入
れる。(以前の SQL は不要なので消す
Run SQL」をクリック
SQL 文が実行され、結果が表示される。
下側のインドで、結果を確認
31
SELECT * FROM 商品
JOIN 購入
ON 商品.ID = 購入.商品番号;
演習2の実行結果
商品テーブルと購入テーブルを
して、購入者がどの商品を購
入したかのデータを取得。
結合条件は、商品テーブルのID
属性と購入テーブルの商品番号
属性が等しい場合に結合
32
関連
商品
ID
商品名
単価
1
みかん
50
2
りんご
100
3
メロン
500
購入者
X
X
Y
購入
SELECT * FROM 商品
JOIN 購入
ON 商品.ID = 購入.商品番号;
結合の利点
結合はリレーショナルデータベースにおいて重要な操作であ
り、以下の利点がある
データの統合:異なるテーブルを結合して、新たなテーブ
ルを生成。これにより、関連のあるデータを1つにまとめ
るデータ統合を実現。
データの洞察:異なるデータを組み合わせて意思決定に役
立つ洞察を得る。
データの整合性:データの冗長性を排除し、データの整合
性を保つために、テーブルを分割して、データベース内に
保持。必要に応じて結合して必要なデータを取得できる。
33
ここまでのまとめ
結合は、異なるテーブルを結合して、新たなテーブルを生成
する操作
主な目的 データベース内の異なるテーブルからデータを
組み合わせて、有用なデータを作成
結合条件は、例えば、「商品テーブルのIDと購入テーブル
の商品番号が等しい」といな結合条件を考えること
ができる
有用性:結合を利用することで、購入者がどの商品を購入
したかなどのデータを得ることができる
結合を行SQL の例
34
SELECT * FROM 商品
JOIN 購入
ON 商品.ID = 購入.商品番号;
自習1
目的:結合の結果をさらに加工する方法をマスターする
指示:演習1の結果のテーブルは5列です。このち、「商
品名」と「購入者」の列のみを表示し、他の列は表示しな
いよな(下図のよに) SQL を作成してください
ヒント:SELECT * を変更して、必要な列のみを指定して
ください。
35
自習2
目的:結合の結果をさらに加工する方法をマスターする
指示:演習1の結果のテーブルは、3行のテーブルです。
の行数
3
を得る(下図のよに)
SQL
を作成
してください
ヒント:COUNT(*) を使用してください。
36
自習1の解答例
自習2の解答例
37
6-3. SQL での結合の書き方
38
結合のための JOIN ON
JOIN
JOIN は、テーブルの結合を実行するために使用
異なるテーブルの結合を可能にする
ON
ON は、 JOINキーワードと一緒に使用される
結合条件を指定に使用
結合条件は、通常、結合したいテーブルの特定の属性同士
の値が等しい場合に使用される。複雑な条件も指定可能
39
SELECT * FROM 商品
JOIN 購入
ON 商品.ID = 購入.商品番号;
結合条件の指定
商品テーブルの「ID」と購入テーブルの「商品
号」属性が等しいとい結合条件
等しい値を持つ」とい合条件の表し
40
SELECT * FROM 商品
JOIN 購入
ON 商品.ID = 購入.商品番号;結合条件
結合のためのSQL
商品.ID = 購入.品番号
テーブル1.属性3 = テーブル2.属性4
複数の条件の指定
複数の条件を組み合わせるために、ANDORを使用
AND すべての条件が真(成り立つこと)が条件
OR いずれかの条件が真(成り立つこと)が条件
商品テーブルと購入テーブルを結合し、特定の購入者が特定
の商品を購入した場合に結合する場合の例
41
商品.ID = 購入.商品番号 AND 購入.購入者 = 'X'
より詳細なデータの絞り込みが可能となり、必要なデータ
を正確に取得できるようになる。
演習3.複数の条件の指定
トピックス
1. 結合
2. 複数の結合条件
3. AND
42
Webブラザを使用
アドレスバーにSQLFiddleURLを入力
http://sqlfiddle.com/
URLが分からないときは、Googleなどの検索エンジンを利
用。「SQLFiddle」と検索し、表示された結果から
SQLFiddleェブサイトをクリック。
43
左側のパネルに、テーブル定義データの追加を行
SQL を入れる。(「演習2」と同じものである
44
CREATE TABLE 商品 (
ID INTEGER,
商品名 TEXT,
単価 INTEGER);
INSERT INTO 商品 VALUES(1, 'みかん', 50);
INSERT INTO 商品 VALUES(2, 'りんご', 100);
INSERT INTO 商品 VALUES(3, 'メロン', 500);
CREATE TABLE 購入 (
購入者 TEXT,
商品番号 INTEGER);
INSERT INTO 購入 VALUES('X', 1);
INSERT INTO 購入 VALUES('X', 3);
INSERT INTO 購入 VALUES('Y', 2);
Build Schema」をクリック
45
右側のパネルに、問い合わせ(クエリ)を行SQL を入
れる。(以前の SQL は不要なので消す
Run SQL」をクリック
SQL 文が実行され、結果が表示される。
下側のインドで、結果を確認
46
SELECT * FROM 商品
JOIN 購入
ON 商品.ID = 購入.商品番号 AND 購入.購入者 = 'X';
右側のパネルに、問い合わせ(クエリ)を行SQL を入
れる。(以前の SQL は不要なので消す
Run SQL」をクリック
SQL 文が実行され、結果が表示される。
下側のインドで、結果を確認
47
SELECT 商品名, 購入者, 単価 FROM 商品
JOIN 購入
ON 商品.ID = 購入.商品番号 AND 購入.購入者 = 'X';
自習3
目的:複数の条件を指定するための AND をマスターする
指示:演習3において、次の SQL を実行したら、どのよ
な結果になるか、予想してください。そして、実際に動作
させてください
ヒント:購入.購入者 = 'X' でなく、購入.購入者 = 'Y' になっ
ていることに注意
48
SELECT 商品名, 購入者, 単価 FROM 商品
JOIN 購入
ON 商品.ID = 購入.商品番号 AND 購入.購入者 = 'Y';
自習3の解答例
49
6-4. 結合条件のない結合と
結合条件のある結合
50
関連性とリレーショナルデータベースのテーブル
関連性:異なるデータ間のつながりや対応関係を示す
例:2つのデータセット {1, 2, 3} {a, b}
対応関係 1-a, 2-b, 3-a
関連性をリレーショナルデータベースのテーブルで扱
き、1つの対応が、テーブルの1行になる
1つ目の列は {1, 2, 3} の要素。2つ目の列は {a, b} の要素。
テーブルを使用することで、関連性を見やすく整理し、明
確にできる。 51
1
a
2
b
3
a
2つのテーブルの間の関連
52
ID
商品名
単価
1
みかん
50
2
りんご
100
3
メロン
500
購入
購入者
商品番号
X
1
X
3
Y
2
①,②,③ ,, の間の関連性は、リレーショナルデータベースでは、
次のように示す
ID 商品名 単価
購入者
商品番号
1
みかん
50
X
1
2
りんご
100
Y
2
3
メロン
500
X
3
関連性
a
b
c
-
--
a
a
b
b
c
c
結合条件のある結合
53
ID
商品名
単価
1
みかん
50
2
りんご
100
3
メロン
500
購入
購入者
商品番号
X
1
X
3
Y
2
ID 商品名 単価 購入
商品番
1
みかん
50
X
1
2
りんご
100
Y
2
3
メロン
500
X
3
SELECT * FROM 商品
JOIN 購入
ON 商品.ID = 購入.商品番号;結合条件
結合のためのSQL(結合条件あり)
結合の結果
結合条件のない結合
54
ID
商品名
単価
1
みかん
50
2
りんご
100
3
メロン
500
購入
購入者
商品番号
X
1
X
3
Y
2
ID 商品名 単価 購入
商品番号
1
みかん
50
X
1
1
みかん
50
X
3
1
みかん
50
Y
2
2
りんご
100
X
1
2
りんご
100
X
3
2
りんご
100
Y
2
3
メロン
500
X
1
3
メロン
500
X
3
3
メロン
500
Y
2
SELECT * FROM 商品
JOIN 購入;
結合のためのSQL(結合条件なし)
結合操作
テーブルを結合することで、新しいテーブルが生成される
結合結果のテーブル
結合結果のテーブルは、元の2つのテーブルの間の関係性
を示している
データの結合によって、関連性1つのテーブルの中に、
明確に示されるになる。
結合条件の有無
結合条件が指定されない場合、元の2つのテーブルの間の
すべてのペアを含むテーブルが作成される。
55
演習4.結合条件のない結
トピックス
1. 結合
2. 結合条件のない結合
56
Webブラザを使用
アドレスバーにSQLFiddleURLを入力
http://sqlfiddle.com/
URLが分からないときは、Googleなどの検索エンジンを利
用。「SQLFiddle」と検索し、表示された結果から
SQLFiddleェブサイトをクリック。
57
左側のパネルに、テーブル定義データの追加を行
SQL を入れる。(「演習2」と同じものである
58
CREATE TABLE 商品 (
ID INTEGER,
商品名 TEXT,
単価 INTEGER);
INSERT INTO 商品 VALUES(1, 'みかん', 50);
INSERT INTO 商品 VALUES(2, 'りんご', 100);
INSERT INTO 商品 VALUES(3, 'メロン', 500);
CREATE TABLE 購入 (
購入者 TEXT,
商品番号 INTEGER);
INSERT INTO 購入 VALUES('X', 1);
INSERT INTO 購入 VALUES('X', 3);
INSERT INTO 購入 VALUES('Y', 2);
Build Schema」をクリック
59
右側のパネルに、問い合わせ(クエリ)を行SQL を入
れる。(以前の SQL は不要なので消す
Run SQL」をクリック
SQL 文が実行され、結果が表示される。
下側のインドで、結果を確認
60
SELECT * FROM 商品
JOIN 購入;
6-5. 演習
61
次の情報を扱
織田 を買った
豊臣 納豆 を買った
徳川 納豆 を買った
織田、豊臣、徳川に、通し番号の ID を付ける
1:織田、2:豊臣、3:徳川
ふ、納豆に、通し番号の ID を付ける
1:とふ、2:納 62
次の2つのテーブルを扱
63
関連
ID name buy
1
織田
1
2
豊臣
2
3
徳川
2
テーブル名:
名簿
テーブル名:
食材
ID name
1
とうふ
2
納豆
演習5.結合の演習
トピックス
1. 結合
2. 結合条件
3. JOINON
64
Webブラザを使用
アドレスバーにSQLFiddleURLを入力
http://sqlfiddle.com/
URLが分からないときは、Googleなどの検索エンジンを利
用。「SQLFiddle」と検索し、表示された結果から
SQLFiddleェブサイトをクリック。
65
左側のパネルに、テーブル定義データの追加を行
SQL を入れる。(以前の SQL は不要なので消す
66
create table 名簿(
ID integer,
name text,
buy integer
);
INSERT INTO 名簿 VALUES(1, '織田', 1);
INSERT INTO 名簿 VALUES(2, '豊臣', 2);
INSERT INTO 名簿 VALUES(3, '徳川', 2);
create table 食材(
ID integer,
name text
);
INSERT INTO 食材 VALUES(1, 'とうふ');
INSERT INTO 食材 VALUES(2, '納豆');
Build Schema」をクリック
67
右側のパネルに、問い合わせ(クエリ)を行SQL を入
れる。(以前の SQL は不要なので消す
Run SQL」をクリック
SQL 文が実行され、結果が表示される。
下側のインドで、結果を確認
68
SELECT * FROM 名簿
JOIN 食材;
右側のパネルに、問い合わせ(クエリ)を行SQL を入
れる。(以前の SQL は不要なので消す
Run SQL」をクリック
SQL 文が実行され、結果が表示される。
下側のインドで、結果を確認
69
SELECT * FROM 名簿
JOIN 食材
ON 名簿.buy = 食材.ID;
右側のパネルに、問い合わせ(クエリ)を行SQL を入
れる。(以前の SQL は不要なので消す
Run SQL」をクリック
SQL 文が実行され、結果が表示される。
下側のインドで、結果を確認
70
SELECT 名簿.name, 食材.name FROM 名簿
JOIN 食材
ON 名簿.buy = 食材.ID;
右側のパネルに、問い合わせ(クエリ)を行SQL を入
れる。(以前の SQL は不要なので消す
Run SQL」をクリック
SQL 文が実行され、結果が表示される。
下側のインドで、結果を確認
71
SELECT 名簿.name, 食材.name FROM 名簿
JOIN 食材
ON 名簿.buy = 食材.ID AND 食材.name ='とうふ';
右側のパネルに、問い合わせ(クエリ)を行SQL を入
れる。(以前の SQL は不要なので消す
Run SQL」をクリック
SQL 文が実行され、結果が表示される。
下側のインドで、結果を確認
72
SELECT count(*) FROM 名簿
JOIN 食材
ON 名簿.buy = 食材.ID;
全体まとめ
テーブルの結合の基本
結合は、異なるテーブルを一つにまとめる操作
結合条件は通常、テーブルの特定の属性同士の値が等しい場合に使用。
その他、より複雑な結合条件などを指定できる。
結合によって、データベースの柔軟性と効率性が向上
SQLでの結合の書き方
JOINONを使用してテーブルの結合を行
SELECT * FROM 商品 JOIN 購入 ON 商品.ID = 購入.商品番号; のよ
に書く
複数の条件を指定する場合は、ANDORを使用して結合条件を追加
結合の応用
結合操作を通じて、関連あるデータを1つのテーブルに明確に示す
とができるよになり、データの絞り込みや分析が容易になる。
結合条件を工夫することで、さまざまなビジネス要件に対応したデー
タの抽出や分析が可能
73
論理的思考と問題解決能力
テーブルの結合を学ぶことで、異なるテーブルからか
ら必要な情報を組み合わせ、欲しいデータを得て、具
体的な問題を解決する能力が身につきます。この過程
で、論理的思考の能力が向上します。
データ分析と洞察の獲得
複数のテーブルから必要な情報を得て、分析する技術
を習得します。データを用いて、より深い洞察を得て、
意思決定ができるよになります。
データ管理とSQLスキルの強化
結合をSQLで実行するスキルを学ぶことで、効率的に
データを管理・操作するスキルが向上します。
74