あの“津崎さん”さんも保有する難関資格「データベーススペシャリスト」。本企画では、データベーススペシャリスト試験 午前/午後試験対策のための「基礎知識」を抜粋してお届けします。今回は、「相関副問合せの見分け方」を解説します。
書籍の中から有用な技術情報をピックアップして紹介する本シリーズ。今回は、秀和システム発行の書籍ポケットスタディ データベーススペシャリスト [第2版](2015年12月22日発行)』からの抜粋です。
ご注意:本稿は、著者及び出版社の許可を得て、そのまま転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。あらかじめご了承ください。
※編集部注:前回記事「SQLで「テーブルの結合」を行う」はこちら
出題頻度 午前II:●-- 午後I:--- 午後II:---
●--:過去14年間での過去問出題数が1〜9回
●●-:過去14年間での過去問出題数が10〜19回
●●●:過去14年間での過去問出題数が20回以上
●相関副問合せの見分け方、相関副問合せ処理の流れ
下図のように、副問合せの文中で、副問合せの外側の属性(検索結果)を利用して検索している問合せを、相関副問合せと呼びます。
相関副問合せでは、以下のように特殊な流れの処理が行われます。
(1)外側のSELECT文を1行分だけ実行
外側の「SELECT 社員番号, 社員名 FROM 社員」について、社員テーブルの最初の1行目分(2回目には2行目分、3回目には3行目分、…)だけ実行し、結果を取り出します。
(2)取り出した表を副問合せに代入して実行
(1)で取り出した1行を副問合せの文中のS1に代入し実行します。ここで「S1.性別」は「男」となるため、代入するとSQL文は次のようになります。
SELECT MIN(生年月日) FROM 社員 AS S2 WHERE '男' = S2.性別
この処理の結果は、「1977/4/21」となります。
(3)外側のSELECT文における、1行目のWHERE句の判定を行う
(2)により、外側のSQL文は次のようになります。
SELECT 社員番号, 社員名 FROM 社員 AS S1 WHERE 生年月日 > 1977/4/21
この処理の結果は、以下の通りとなります。
尚、以上は外側のSQL文実行における1行目の処理結果ですが、以上(1)〜(3)を全ての行について行うと、相関副問合せの結果となります。
相関副問合せは(少なくとも過去14年間は)午後試験分野について過去に1問しか出題されておらず、午前分野でも過去に2種類しか出題されていません。理解するに越したことはありませんが、割り切って以下の問題の解答だけを暗記し、学習における優先度を下げることも有効な戦略です。
本試験過去問題による類題演習 | |
---|---|
□H23 午前II問11 | 社員表から最年長社員を除く社員を抽出する相関副問合せSQL文の完成(Chance問題) |
Copyright © ITmedia, Inc. All Rights Reserved.