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

あの“津崎さん”も保有する難関資格「データベーススペシャリスト」。本企画では、データベーススペシャリスト試験 午前/午後試験対策のための「基礎知識」を抜粋してお届けします。今回は、「テーブル結合の基礎」を解説します。

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

連載目次

ポケットスタディ データベーススペシャリスト [第2版]

書籍の中から有用な技術情報をピックアップして紹介する本シリーズ。今回は、秀和システム発行の書籍ポケットスタディ データベーススペシャリスト [第2版](2015年12月22日発行)』からの抜粋です。

ご注意:本稿は、著者及び出版社の許可を得て、そのまま転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。あらかじめご了承ください。


※編集部注:前回記事「「SQLによる検索」を実践する」はこちら

SQLによるテーブルの結合

出題頻度 午前II:●●- 午後I:●●● 午後II:●--


 ●--:過去14年間での過去問出題数が1〜9回
 ●●-:過去14年間での過去問出題数が10〜19回
 ●●●:過去14年間での過去問出題数が20回以上


Key Word

結合処理の種類、内部結合、左外部結合、右外部結合、全外部結合、自己結合、3表以上の結合、自然結合、午後演習


「内部結合」と「外部結合」

 複数の表(テーブル)を組み合わせる処理を結合と呼びます。まずは出題の要である内部結合、外部結合の全体像を押えましょう。外部結合には、左(ひだり)外部結合、右(みぎ)外部結合、全(ぜん)外部結合があります。

結合の種類

 上記の「属性A」のように、テーブルとテーブルをつなぐために仲立ちとなる属性を連結キーと呼び、あるテーブルの列は、結合先のテーブルのどの列に対応するかという「つながり」を管理します。

内部結合

 内部結合は、連結キーで複数テーブルを結合し、両テーブルに共通に存在する列のみを出力する結合です。

内部結合の例

 内部結合の指定方法として、以下の3種類を押えて下さい。

構文1 SELECT 列名1, 列名2,…
 FROM テーブル1, テーブル2
 WHERE テーブル1.列名1=テーブル2.列名2
構文2 SELECT 列名1, 列名2,…
 FROM テーブル1 INNER JOIN テーブル2
 ON テーブル1.列名=テーブル2.列名
構文3 SELECT 列名1, 列名2,…
 FROM テーブル1 INNER JOIN テーブル2
 USING(列名1, …)
SELECT句 結合後に表示する列名を指定
※「列名 X, 列名 Y」のように別の名称X,Y で表示させることも可能
FROM句 結合するテーブルを指定
※構文2、3の「INNER」は省略可能
WHERE句
ON句
連結キーを「=」で指定する(上記構文1、2は、テーブル1 の属性「列名1」とテーブル2 の属性「列名2」を連結キーとする例)
USING句 連結キーを指定する
※この指定方法(構文3)は連結キーの名称が等しい場合のみ利用可能

 下記3つのSQL文は、全て「内部結合の例」の結合処理を行います。

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

 なお、以下のようにSELECT文の中で、社員テーブルをX、部門テーブルをYといった別名を付けて、各種条件を指定することも可能です。この別名のことを相関名と呼びます。

SELECT X.社員コード, X.社員名, Y.部門コード, Y.部門名
	FROM 社員 X, 部門 Y
	WHERE X.部門コード=Y.部門コード
SELECT 社員コード, 社員名, 部門コード, 部門名
	FROM 社員 X, 部門 Y
	WHERE X.部門コード=Y.部門コード
※上記2種類のSQL 文は同じ処理結果になります。

本試験過去問題による類題演習
□H21 午前II問9 社員表と人事異動表から、社員毎の勤務成績の平均を求めるSQL文
□H19 午前問34 CREATE文により作成した2表の結合と、同結果が得られるSQL文
□H14午前問30 社員表と部門表からcount(*)を用いたSQLにより得られた結果
□H27 午前II問11 一度でも訪れた野鳥は、観測されなかった時の観測数を0にするSQL文
□H27 午前II問8 “ 社員取得資格” 表の左外部結合のSQL
       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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