SQLで「テーブルの結合」を行う「データベーススペシャリスト試験」戦略的学習のススメ(13)(2/3 ページ)

» 2017年07月18日 05時00分 公開
[具志堅融, 河科湊ITmedia]

外部結合

 左外部結合、右外部結合、全外部結合は、いずれも連結キーで複数のテーブルを結合します。以下のように結果がそれぞれ異なります。

外部結合の例

 以上2種類の構文で「左外部結合」を行います。FROM句を変更することで、「右外部結合」「全外部結合」を行うことができます。

構文1
(左外部結合)
SELECT 列名1, 列名2,…
 FROM テーブル1 LEFT OUTER JOIN テーブル2
 ON テーブル1.列名=テーブル2. 列名
構文2
(左外部結合)
SELECT 列名1, 列名2,…
 FROM テーブル1 LEFT OUTER JOIN テーブル2
 USING(列名1, …)
SELECT 句 結合後に表示する列名を指定
※その他は通常のSELECT句と同じ
FROM 句 結合するテーブル名を指定。RIGHT OUTER JOINと記述すれば右外部結合、FULL OUTER JOINと記述すれば全外部結合になる
※「OUTER」は省略可能
WHERE 句
ON 句
連結キーを「=」で指定する
※その他は通常のWHERE句と同じ
USING 句 連結キーを指定する
※連結キーの名称が等しい場合のみ利用可能

 以下のようにSQL文を記述することで「左外部結合」の処理結果を出力することができます。

SELECT 社員.社員コード, 社員.社員名, 部門.部門コード, 部門.部門名
	FROM 社員 LEFT OUTER JOIN 部門
	ON 社員.部門コード=部門.部門コード
SELECT 社員.社員コード, 社員.社員名, 部門.部門コード, 部門.部門名
	FROM 社員 LEFT OUTER JOIN 部門
	USING(部門コード)
※上記2種類のSQL文は同じ処理結果になります。

自己結合

 1つの表に対し別名(相関名)を使うことにより、あたかも2つの表を結合したように出力することを自己結合と呼びます。

自己結合の例

 以下の通りSQL文を記述することで、上記「自己結合の例」の結合処理を行うことができます。部門テーブルにX、Yという2つの名前を付与し、Xの上位部門コードとYの部門コードを結合キーとして結合します。

SELECT X.部門コード, X.部門名, X.上位部門コード, Y.部門名 AS 上位部門名
	FROM 部門 X, 部門 Y
	WHERE X.上位部門コード=Y.部門コード

Chance問題

演習12-1

 複数の事業部、部、課及び係のような組織階層の概念データモデルを、第3正規形の表、

組織(組織ID、組織名、…)

として実装した。組織の親子関係を表示するSQL文中のaに入れるべき適切な字句はどれか。ここで、“組織”表記述中の下線部は、主キーを表し、追加の属性を想定する必要がある。また、モデルの記法としてUMLを用いる。{階層}は組織の親子関係が循環しないことを指示する制約記述である。

演習12-1

 ア 組織1.親組織ID = 組織2.子組織ID

 イ 組織1.親組織ID = 組織2.組織ID

 ウ 組織1.組織ID = 組織2.親組織ID

 エ 組織1.組織ID = 組織2.子組織ID

(H21春DB午前II問6)


解答 演習12-1 

 *囲み内をクリックすると解答を表示します(表示後ページをリロードすると、再び非表示になります)

本試験過去問題による類題演習
H17 午前問34 SQL 文の実行結果(会員表同士を自己結合するSELECT 文)

3表以上の結合

 3つ以上の表についても結合ができます。

3表以上の結合の例

 上図「3表以上の結合の例」を行うSQL文についても押えて下さい。以下3種類のSQL文は、どれも上図の結合処理を行います。

SELECT 社員.社員コード, 社員.社員名, 社員所属.部門コード, 部門.部門名
	FROM 社員, 社員所属, 部門
WHERE 社員.社員コード=社員所属.社員コード
	AND 社員所属,部門コード=部門.部門コード
SELECT 社員.社員コード, 社員.社員名, 社員所属.部門コード, 部門.部門名
	FROM 社員
	INNER JOIN 社員所属 ON 社員.社員コード=社員所属.社員コード
	INNER JOIN 部門 ON 社員所属.部門コード=部門.部門コード
SELECT 社員.社員コード, 社員.社員名, 社員所属.部門コード, 部門.部門名
	FROM 社員
	INNER JOIN 社員所属 USING (社員コード)
	INNER JOIN 部門 USING (部門コード)

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。