左外部結合、右外部結合、全外部結合は、いずれも連結キーで複数のテーブルを結合します。以下のように結果がそれぞれ異なります。
以上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(部門コード)
1つの表に対し別名(相関名)を使うことにより、あたかも2つの表を結合したように出力することを自己結合と呼びます。
以下の通りSQL文を記述することで、上記「自己結合の例」の結合処理を行うことができます。部門テーブルにX、Yという2つの名前を付与し、Xの上位部門コードとYの部門コードを結合キーとして結合します。
SELECT X.部門コード, X.部門名, X.上位部門コード, Y.部門名 AS 上位部門名 FROM 部門 X, 部門 Y WHERE X.上位部門コード=Y.部門コード
複数の事業部、部、課及び係のような組織階層の概念データモデルを、第3正規形の表、
として実装した。組織の親子関係を表示するSQL文中のaに入れるべき適切な字句はどれか。ここで、“組織”表記述中の下線部は、主キーを表し、追加の属性を想定する必要がある。また、モデルの記法としてUMLを用いる。{階層}は組織の親子関係が循環しないことを指示する制約記述である。
ア 組織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表以上の結合の例」を行う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.