これさえ読めば基本はカンペキ!「データベース」
オープンソースのデータベースの機能充実が進んでいる中、商用データベースでは従来の「性能重視」に加えて「管理性の向上」に力を入れ始めている。その背景には、Webアプリケーションとの連携が加速し、データベース管理者のすそ野が広がり、管理者スキルへの依存度を下げていく必要に迫られてきたという事情がある。そこで今回は、データ基盤としての製品強化が進んでいる商用データベースの最新事情と注目機能について詳しく取り上げていく。ぜひ、キーマンズネットに無料会員登録してデータベースの知識を深めてください。

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