あの“津崎さん”も保有する難関資格「データベーススペシャリスト」。本企画では、データベーススペシャリスト試験 午前/午後試験対策のための「基礎知識」を抜粋してお届けします。今回は、「テーブル結合の基礎」を解説します。
書籍の中から有用な技術情報をピックアップして紹介する本シリーズ。今回は、秀和システム発行の書籍ポケットスタディ データベーススペシャリスト [第2版](2015年12月22日発行)』からの抜粋です。
ご注意:本稿は、著者及び出版社の許可を得て、そのまま転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。あらかじめご了承ください。
※編集部注:前回記事「「SQLによる検索」を実践する」はこちら
出題頻度 午前II:●●- 午後I:●●● 午後II:●--
●--:過去14年間での過去問出題数が1〜9回
●●-:過去14年間での過去問出題数が10〜19回
●●●:過去14年間での過去問出題数が20回以上
●結合処理の種類、内部結合、左外部結合、右外部結合、全外部結合、自己結合、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.部門コード
本試験過去問題による類題演習 | |
---|---|
□H21 午前II問9 | 社員表と人事異動表から、社員毎の勤務成績の平均を求めるSQL文 |
□H19 午前問34 | CREATE文により作成した2表の結合と、同結果が得られるSQL文 |
□H14午前問30 | 社員表と部門表からcount(*)を用いたSQLにより得られた結果 |
□H27 午前II問11 | 一度でも訪れた野鳥は、観測されなかった時の観測数を0にするSQL文 |
□H27 午前II問8 | “ 社員取得資格” 表の左外部結合のSQL |
Copyright © ITmedia, Inc. All Rights Reserved.