「1日1問」仕事や勉強に役立つIT知識を充電!
リクルートが運営する「ITキャパチャージ」は、最初に会員登録が必要ですが、無料で仕事から情報処理技術者試験まで幅広く活用できるWebサイトです。IT担当者のスキルアップに役立つ情報処理に関する問題を、毎日1問ずつ、メールやサイト上で提供するサービスです。解答ページはIT初心者でも分かる丁寧な解説つきで、サイト上では過去の問題にも挑戦できます。
また、IT用語が調べられるIT単語帳は、説明も詳しく簡単に調べられ、たいへん便利です。ぜひ、会員登録して活用したいサイトです。

INNER JOINを使って表を結合する

SELECT文において複数の表を結合するときはWHERE句で結合条件を指定するほかにFROM句でINNER JOINを指定して表を結合することもできる。

INNER JOINの記述形式

SELECT 列名1,列名2,〜列名n ← どの列を表示させるか
FROM 表名1 INNER JOIN表名2 ON 表名1.フィールド名 = 表名2.フィールド名
WHERE 抽出条件

【例題1】

売上表の顧客CDと顧客表の顧客CDで表を結合する。

売上表
売上No日付顧客CD
12001/05/27105
22001/05/27101
32001/05/27103
42001/06/27102
52001/06/27104
顧客表
顧客CD顧客名
101二島商店
102姫路商事
103大阪物産
104神戸商店
105福岡商事
SELECT文

SELECT *

FROM 売上表 INNER JOIN 顧客表 ON 売上表.顧客CD=顧客表.顧客CD

実行結果
売上No日付売上表.顧客CD顧客表.顧客CD顧客名
12001/05/27105105福岡商事
22001/05/27101101二島商店
32001/05/27103103大阪物産
42001/06/27102102姫路商事
52001/06/27104104神戸商店

実行結果は以下の図のようにして得られる。

INNER JOINによる結合のイメージ

参考までにWHERE句で表を結合させたときのSELECT文は次のとおりである。

表の結合条件をWHERE句で指定した場合

SELECT *
FROM 売上表,顧客表
WHERE 売上表.顧客CD=顧客表.顧客CD

また、3つ以上の表を結合する場合は、カッコでくくって記述する。カッコ内のINNER JOINを1つのテーブルとみなして結合する。

【例題2】

売上表の日付、商品表の商品名と単価、売上明細の数量を表示させる。

売上表
売上No日付顧客CD
12001/05/27105
22001/05/27101
32001/05/27103
42001/06/27102
52001/06/27104
商品表
商品CD商品名単価
10鉛筆30
20消しゴム50
30シャープペン250
40ボールペン150
50色鉛筆700
60ノート100
売上明細
売上No連番商品CD数量
111010
12307
136025
212015
22403
31308
324030
335012
346050
41209
424021
511017
52205
SELECT文

SELECT 日付,商品名, 単価, 数量

FROM 商品表
INNER JOIN (売上表 INNER JOIN 売上明細 ON 売上表.売上No = 売上明細.売上No) ON 商品表.商品CD = 売上明細.商品CD

実行結果
日付商品名単価数量
2001/05/27鉛筆3010
2001/05/27シャープペン2507
2001/05/27ノート10025
2001/05/27消しゴム5015
2001/05/27ボールペン1503
2001/05/27シャープペン2508
2001/05/27ボールペン15030
2001/05/27色鉛筆70012
2001/05/27ノート10050
2001/06/27消しゴム509
2001/06/27ボールペン15021
2001/06/27鉛筆3017
2001/06/27消しゴム505

売上表の売上Noと売上明細表の売上Noで結合した表と商品表の商品CDが一致する行で結合

実行結果は以下の図のようにして得られる。

SELECT文においてInnerJoinを使って3つの表を結合するイメージ

WHERE句で表の結合条件を指定したSELECT文はつぎのとおりである。

SELECT文

SELECT 日付,商品名, 単価, 数量
FROM 商品表,売上表,売上明細
WHERE 売上表.売上No = 売上明細.売上No AND 商品表.商品CD = 売上明細.商品CD