IPA公式正解:ア ON C1.社員コード = C2.社員コード AND C1.資格 = 'FE' AND C2.資格 = 'AP' WHERE C1.資格 = 'FE'
※ 正解はIPA公表の解答です。解説は当サイトが生成AIを用いて作成しています。誤りにお気づきの場合はお問い合わせください。
【解説】正解は選択肢【ア】です。結果表ではFEを取得している全社員(S001, S002, S003)が表示され、AP資格があれば資格2に'AP'、なければNULLが表示されています。左外部結合でC1側のFE保持者を全件残すためWHERE句で「C1.資格 = 'FE'」を指定し、結合条件(ON句)に「C2.資格 = 'AP'」を指定します。
【詳細解説】■ 本問の核心・解法のポイント
本問は、同一テーブルに対する左外部結合(LEFT OUTER JOIN)における結合条件(ON句)と絞り込み条件(WHERE句)の評価順序・役割の違いを問う問題です。
結果表を見ると、資格1に「FE」を持つ社員(S001, S002, S003)がすべて出力されており、さらにAPを取得しているS001のみ資格2が「AP」、取得していないS002とS003は「NULL」となっています。
左外部結合では、ON句に指定された結合条件に一致しない右表(C2)の行はNULLとして補完されて左表(C1)の行が残ります。一方、WHERE句は結合結果全体に対してフィルタリングを行います。
・各選択肢の徹底解説:
・【選択肢ア★】:結合条件(ON句)で社員コードの一致および「C1.資格 = 'FE' AND C2.資格 = 'AP'」を指定し、WHERE句で「C1.資格 = 'FE'」を指定しています。これにより、左表からはFE保持者のみが抽出され、APを持つ社員のみ右表の資格(AP)が結合され、持たない社員は資格2がNULLとして出力されるため、結果と完全に一致します。
・イ:WHERE句が「C1.資格 IS NOT NULL」となっているため、C1側からFE以外の資格(AP, DB, SMなど)を持つ行も除外されずに残ってしまい、結果の行数が多くなります。
・ウ:WHERE句で「WHERE C2.資格 = 'AP'」としてしまうと、左外部結合でNULLになった行(S002, S003)がWHERE句で排除されてしまい、S001しか残りません(実質的に内部結合と同じになります)。
・エ:WHERE句に「C1.資格 = 'FE' AND C2.資格 = 'AP'」を置いているため、ウと同様にC2.資格がAPである行しか残らず、NULL行を含む結果を得ることができません。
よって正解はアです。