答え ア
【解説】
問題となっているSQL文は「“社員”表から任意の社員S1と選び、S1と同じ部署の社員(S2)の職務が’プログラマ’の人の数を数え、それが5人未満だったら、S1の部署コードを重複しないように出力する」になります。
まず、社員S1と同じ部署コードの社員S2を数えるSQLは、数を数えるCOUNTコマンドを使用して
SELECT COUNT(S2.社員番号) FROM 社員 S2
WHERE S1.部署コード = S2.部署コード)
になります。
ここに、社員S2がプログラマであるという条件を加えると、SQLは
SELECT COUNT(S2.社員番号) FROM 社員 S2
WHERE S1.部署コード = S2.部署コード)
AND S2.職務 = ’プログラマ’)
になります。
この数が、5未満な場合なのでSQLとしては、
WHERE 5 > (SELECT COUNT(S2.社員番号) FROM 社員 S2
WHERE S1.部署コード = S2.部署コード
AND S2.職務 = ’プログラマ’)
になります。
社員S1の部署コードを出力するSQLは
SELECT 部署コード FROM 社員 S1
ですが、同じ部署コードを複数出力するのを防ぐため、重複行をまとめるDISTINCTコマンドを使用して、SQLは
SELECT DISTINCT 部署コード FROM 社員 S1
になります。
これをまとめると
SELECT DISTINCT 部署コード FROM 社員 S1
WHERE 5 > (SELECT COUNT(S2.社員番号) FROM 社員 S2
WHERE S1.部署コード=S2.部署コード
AND S2.職務 = ’プログラマ’)
(ア)です。なお、社員S1と社員S2が同じ社員でもいいところに注意です。