IPA公式正解:ア ON C1.社員コード = C2.社員コード
AND C1.資格 = 'FE' AND C2.資格 = 'AP'
WHERE C1.資格 = 'FE'
※ 正解はIPA公表の解答です。解説は当サイトが生成AIを用いて作成しています。誤りにお気づきの場合はお問い合わせください。
【解説】正解は選択肢【ア】です。結果表には資格1が'FE'である社員S001, S002, S003が出力され、資格2にはS001のみ'AP'、他は'NULL'が入っています。LEFT OUTER JOINで左表C1を資格'FE'に絞り込むにはWHERE句に「C1.資格 = 'FE'」が必要です。
【詳細解説】■ 本問の核心・解法のポイント
LEFT OUTER JOIN(左外部結合)におけるON句とWHERE句の役割の違いを理解しているかを問う問題です。
得たい結果を確認すると:
・資格1(C1.資格)はすべて「FE」であること。
・社員コードは「FE」を保有するS001, S002, S003が出力されていること。
・資格2(C2.資格)は、S001について「AP」が結合され、APを持たないS002, S003についてはNULLになっていること。
SQL文の構造:
LEFT OUTER JOINでは、左外部表(C1)の行を保持しながら右表(C2)を結合します。
ON句の条件に「C1.社員コード = C2.社員コード AND C1.資格 = 'FE' AND C2.資格 = 'AP'」を指定することで、C2側からAPの資格情報のみをマッチングさせます。
さらに、C1側の対象行そのものを「FE」を持つ行だけに限定するためには、結合後の絞り込みを行うWHERE句で「WHERE C1.資格 = 'FE'」とする必要があります。
・各選択肢の徹底解説:
・ア:【選択肢ア★】ON句で社員コードの一致およびAPとの対応条件を指定し、WHERE句で左表C1の資格を'FE'に絞り込んでいるため、意図した結果が得られます。
・イ:WHERE句で「C1.資格 IS NOT NULL」とすると、FE以外の資格を持つ行(S001のAP, DB、S002のSMなど)も左表として出力されてしまいます。
・ウ:WHERE句で「C2.資格 = 'AP'」としてしまうと、外部結合でNULLとなったS002やS003が除外され、内部結合と同じ(S001のみ)になってしまいます。
・エ:ON句が結合キーのみで、WHERE句に「C2.資格 = 'AP'」が含まれるため、C2がNULLの行がWHERE句で排除されてS001のみが出力されます。
よって正解はアです。