SkillStack
テクノロジ系8 / 25問

データベーススペシャリスト試験 令和3年度 秋期 午前II 問8

"社員取得資格"表に対し、SQL文を実行して結果を得た。SQL文の「a」に入れる字句はどれか。

〔SQL文〕  SELECT C1.社員コード、C1.資格 AS 資格1、C2.資格 AS 資格2    FROM 社員取得資格 C1 LEFT OUTER JOIN 社員取得資格 C2      「a」

データベーススペシャリスト試験 令和3年度 秋期 午前II 問8の図表

選択肢を押すと答え合わせができます。

正解と解説を見る

【正解】ア

求める結果では、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に質問できる
SkillStackで無料で始める