- 「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 |
---|---|---|
1 | 2001/05/27 | 105 |
2 | 2001/05/27 | 101 |
3 | 2001/05/27 | 103 |
4 | 2001/06/27 | 102 |
5 | 2001/06/27 | 104 |
顧客CD | 顧客名 |
---|---|
101 | 二島商店 |
102 | 姫路商事 |
103 | 大阪物産 |
104 | 神戸商店 |
105 | 福岡商事 |
SELECT文
SELECT *
FROM 売上表 INNER JOIN 顧客表 ON 売上表.顧客CD=顧客表.顧客CD
売上No | 日付 | 売上表.顧客CD | 顧客表.顧客CD | 顧客名 |
---|---|---|---|---|
1 | 2001/05/27 | 105 | 105 | 福岡商事 |
2 | 2001/05/27 | 101 | 101 | 二島商店 |
3 | 2001/05/27 | 103 | 103 | 大阪物産 |
4 | 2001/06/27 | 102 | 102 | 姫路商事 |
5 | 2001/06/27 | 104 | 104 | 神戸商店 |
実行結果は以下の図のようにして得られる。
参考までにWHERE句で表を結合させたときのSELECT文は次のとおりである。
表の結合条件をWHERE句で指定した場合
SELECT *
FROM 売上表,顧客表
WHERE 売上表.顧客CD=顧客表.顧客CD
また、3つ以上の表を結合する場合は、カッコでくくって記述する。カッコ内のINNER JOINを1つのテーブルとみなして結合する。
【例題2】
売上表の日付、商品表の商品名と単価、売上明細の数量を表示させる。
売上No | 日付 | 顧客CD |
---|---|---|
1 | 2001/05/27 | 105 |
2 | 2001/05/27 | 101 |
3 | 2001/05/27 | 103 |
4 | 2001/06/27 | 102 |
5 | 2001/06/27 | 104 |
商品CD | 商品名 | 単価 |
---|---|---|
10 | 鉛筆 | 30 |
20 | 消しゴム | 50 |
30 | シャープペン | 250 |
40 | ボールペン | 150 |
50 | 色鉛筆 | 700 |
60 | ノート | 100 |
売上No | 連番 | 商品CD | 数量 |
---|---|---|---|
1 | 1 | 10 | 10 |
1 | 2 | 30 | 7 |
1 | 3 | 60 | 25 |
2 | 1 | 20 | 15 |
2 | 2 | 40 | 3 |
3 | 1 | 30 | 8 |
3 | 2 | 40 | 30 |
3 | 3 | 50 | 12 |
3 | 4 | 60 | 50 |
4 | 1 | 20 | 9 |
4 | 2 | 40 | 21 |
5 | 1 | 10 | 17 |
5 | 2 | 20 | 5 |
SELECT文
SELECT 日付,商品名, 単価, 数量
FROM 商品表
INNER JOIN (売上表 INNER JOIN 売上明細 ON 売上表.売上No = 売上明細.売上No)
ON 商品表.商品CD = 売上明細.商品CD
日付 | 商品名 | 単価 | 数量 |
---|---|---|---|
2001/05/27 | 鉛筆 | 30 | 10 |
2001/05/27 | シャープペン | 250 | 7 |
2001/05/27 | ノート | 100 | 25 |
2001/05/27 | 消しゴム | 50 | 15 |
2001/05/27 | ボールペン | 150 | 3 |
2001/05/27 | シャープペン | 250 | 8 |
2001/05/27 | ボールペン | 150 | 30 |
2001/05/27 | 色鉛筆 | 700 | 12 |
2001/05/27 | ノート | 100 | 50 |
2001/06/27 | 消しゴム | 50 | 9 |
2001/06/27 | ボールペン | 150 | 21 |
2001/06/27 | 鉛筆 | 30 | 17 |
2001/06/27 | 消しゴム | 50 | 5 |
売上表の売上Noと売上明細表の売上Noで結合した表と商品表の商品CDが一致する行で結合
実行結果は以下の図のようにして得られる。
WHERE句で表の結合条件を指定したSELECT文はつぎのとおりである。
SELECT文
SELECT 日付,商品名, 単価, 数量
FROM 商品表,売上表,売上明細
WHERE 売上表.売上No = 売上明細.売上No AND 商品表.商品CD = 売上明細.商品CD