PR

 正解は4です。

 今回の問題は,3つの表の結合に関する問題です。ここでは,下記のデータを使用して実行結果を考えていきます。

◆ EMP表

EMPNOENAMESALDEPTNO
100Tanaka250,00010
101Yamamoto350,00020
102Takahashi200,000NULL
103Shimizu400,00010
104Sakai300,00020

◆ DEPT表

DEPTNODNAMELOC_ID
10Admin10
20Sales20
30Dev20

◆ LOC表

LOC_IDPREFCITY
10KanagawaYokohama
20HyogoKobe
30MiyagiSendai

 3つの表の結合結果を考える場合,2段階に分けて考えると状況が整理しやすくなります。

 まず,1つ目の表と2つ目の表の結合を考え,結合結果をイメージします。その結合結果に対し,3つ目の表を結合すると最終的な結果が得られます。4つ以上の表を結合する場合も同様です。

 それでは,正しい結果が得られる選択肢4を例に,実際に確認してみます。

 選択肢4のFROM句は,

FROM emp RIGHT OUTER JOIN dept ON emp.deptno = dept.deptno
LEFT OUTER JOIN loc ON dept.loc_id = loc.loc_id

です。

 まずFROMキーワード直後の

emp RIGHT OUTER JOIN dept ON emp.deptno = dept.deptno

に着目し,1つ目の結合を考えます。ここでは,emp表とdept表を右側外部結合していますので,実行結果は,

EMPNOENAMESALDEPTNODNAMELOC
100Tanaka250,00010Admin10
101Yamamoto350,00020Sales20
103Shimizu400,00010Admin10
104Sakai300,00020Sales20
NULLNULLNULL30Dev20

となります。

 次に,この結果に対し,

LEFT OUTER JOIN loc ON dept.loc_id = loc.loc_id

を実行します。ここでは,1つ目の結果表とloc表で左側外部結合を行っています。

 実行結果は,

EMPNOENAMESALDEPTNODNAMELOCPREFCITY
100Tanaka250,00010Admin10KanagawaYokohama
101Yamamoto350,00020Sales20HyogoKobe
103Shimizu400,00010Admin10KanagawaYokohama
104Sakai300,00020Sales20HyogoKobe
NULLNULLNULL30Dev20HyogoKobe

となります。

 この実行結果は,設問の要件である

a. すべての部門を表示すること(3つの部門が表示される)
b. 部門に所属しない社員は表示しない(empno=102のデータは表示されない)
c. 部門が置かれていない場所は表示しない(loc_id=30のデータは表示されない)


の3つの条件を満たしますので,正しいことになります。