INNER JOINを使って表を結合する
複数の表を結合するときにWHERE句で結合条件を指定する他にINNER JOINを使って表を結合することができます。
<例題>
売上表の顧客CDと顧客表の顧客CDが一致する行を表示させる。
| 商品CD | 商品名 | 単価 |
|---|---|---|
| 10 | 鉛筆 | 30 |
| 20 | 消しゴム | 50 |
| 30 | シャープペン | 250 |
| 40 | ボールペン | 150 |
| 50 | 色鉛筆 | 700 |
| 60 | ノート | 100 |
| 売上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 |
| 売上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 | 21 |
| 4 | 2 | 40 | 21 |
| 5 | 1 | 10 | 17 |
| 5 | 2 | 20 | 5 |
| 顧客CD | 顧客名 |
|---|---|
| 101 | 二島商店 |
| 102 | 姫路商事 |
| 103 | 大阪物産 |
| 104 | 神戸商店 |
| 105 | 福岡商事 |
SELECT * ← すべての列
FROM 売上表 INNER JOIN 顧客表 ON 売上表.顧客CD=顧客表.顧客CD
↑ 売上表の顧客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 | 神戸商店 |
また、3つ以上の表を結合する場合は、カッコでくくって記述します。カッコ内のINNER JOINを1つのテーブルとみなして結合します。
<例題>
売上表の日付、商品表の商品名と単価、売上明細の数量を表示させる
SELECT 日付,商品名, 単価, 数量 ← 表示させる列
FROM 商品表 INNER JOIN (売上表 INNER JOIN 売上明細 ON 売上表.売上No = 売上明細.売上No) ON 商品表.商品CD = 売上明細.商品CD;
↑商品表の商品CDと売上明細の商品CDと売上表の売上Noと売上明細の売上Noが一致する行を結合
| 日付 | 商品名 | 単価 | 数量 |
|---|---|---|---|
| 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 |
例題のSQL文動作は次のとおりです。
正月のおせち料理に使われる食材について使われるいわれや意味を解説します。