プロが教えるわが家の防犯対策術!

平成20年 春期 基本情報技術者 午前 問58 の問題の解説をお願い致したく思っております。

どうしても、なぜ『エ』が不正解なのか、分かりません。

宜しくお願い致します。

----------

問58 “社員”表から,職務がプログラマである社員が5人未満の部署の部署コードを探すSQL文として,適切なものはどれか。ここで,“社員”表は次の構造であり,各列にはナル値は含まれないものとする。

社員(社員番号,社員名,部署コード,職務)



SELECT DISTINCT 部署コード FROM 社員 S1
  WHERE 5 > (SELECT COUNT(S2.社員番号) FROM 社員 S2
        WHERE S1.部署コード = S2.部署コード
        AND S2.職務 = 'プログラマ')


SELECT DISTINCT 部署コード FROM 社員 S1
  WHERE 5 < (SELECT COUNT(S2.社員番号) FROM 社員 S2
        WHERE S1.部署コード = S2.部署コード
        AND S2.職務 <> 'プログラマ')


SELECT DISTINCT 部署コード FROM 社員 S1
  WHERE EXISTS (SELECT * FROM 社員 S2
        WHERE S1.部署コード = S2.部署コード
        AND S2.職務 = 'プログラマ')
  GROUP BY S1.部署コード HAVING COUNT(*) < 5


SELECT DISTINCT 部署コード FROM 社員 S1
  WHERE S1.部署コード IN (SELECT S2.部署コード FROM 社員 S2
        WHERE S1.部署コード = S2.部署コード
        AND S2.職務 = 'プログラマ'
        GROUP BY S2.部署コード HAVING COUNT(*) < 5)

A 回答 (1件)

最近は基本情報でもこんなわかりにくいSQL文出すんですね。


(すいません。第二種時代の人間で)

さて、エがなぜ不正解かというと、「その部署にプログラマである社員が1人もいない場合、抽出できないから」です。

アはCOUNTを使っていますから、サブクエリの結果がゼロ人でも「0」を返してくれますが、エはサブクエリの結果が該当なしとなってしまい、メインクエリのIN句の条件を満たさなくなってしまうのです。
    • good
    • 0
この回答へのお礼

いつもありがとうございます。
エの不正解の理由が分かりました。
とても助かりました。
丁寧で迅速なご回答を頂きありがとうございました。
これからも何卒宜しくお願い致します。

お礼日時:2009/03/15 15:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す