データベーススペシャリスト試験 令和3年度 秋期 午前II 問8
"社員取得資格"表に対し、SQL文を実行して結果を得た。SQL文の「a」に入れる字句はどれか。
〔SQL文〕 SELECT C1.社員コード、C1.資格 AS 資格1、C2.資格 AS 資格2 FROM 社員取得資格 C1 LEFT OUTER JOIN 社員取得資格 C2 「a」

選択肢を押すと答え合わせができます。
正解と解説を見る
【正解】ア
求める結果では、FEを取得したS001、S002、S003だけが資格1に表示され、そのうちAPも取得したS001だけが資格2にAPを表示しています。そこで、左側のC1はWHERE C1.資格='FE'によってFEの行に限定します。その上で、LEFT OUTER JOINの結合条件に、社員コードが同じであることと、右側のC2の資格がAPであることを指定します。
具体的には、S001のFE行はS001のAP行と結合され、資格2がAPになります。S002とS003にはAP行がないので右側と結合できませんが、左外部結合では左側の行が残り、資格2がNULLになります。したがって、画像の結果と一致するアが正解です。
イは誤りです。WHERE C1.資格 IS NOT NULLでは、C1をFEだけに限定できません。S001のAP及びDB、S002のSM、S004のAPなど、NULL以外の資格をもつ余分なC1の行も結果に残ります。
ウは誤りです。WHERE C2.資格='AP'によって、右側がNULLとなった行が除外されます。そのため、APをもたないS002とS003が消え、S001だけになります。これは左外部結合を実質的に内部結合のようにする条件です。
エも誤りです。WHERE句でC2.資格='AP'を要求するため、APをもたない社員の行が除外されます。単に社員コードだけで結合してからWHERE句で両資格を絞るので、結果にはS001しか残りません。
【ポイント】 LEFT OUTER JOINでは、右側の表を絞る条件をON句に置けば、結合できない左側の行もNULL付きで残せます。 右側列に対する条件をWHERE句に置くと、NULLの行が除かれ、外部結合の効果を失うことがあります。
出典:令和3年度 秋期 データベーススペシャリスト試験 午前II 問8
※ 解説は SkillStack 編集部が作成したものです。Web 表示のため、図表の配置や表記を一部改めています。
この回の25問を、アプリで通しで解く
- 本番と同じ問題数・制限時間で通し演習(模試モード)
- 間違えた問題は自動で「復習すべき問題」に回る
- 解説で分からない点はAIに質問できる