必ず受かる情報処理技術者試験

当サイトは、情報処理技術者試験に合格するためのWebサイトです。
ITパスポート試験,基本情報技術者,応用情報技術者,高度試験の過去問題と解答及び詳細な解説を掲載しています。
  1. トップページ
  2. 基本情報技術者
  3. 平成20年度春季問題一覧
  4. 平成20年度春季問題58-解答・解説-分析

平成20年度春季問題

問題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.職務 = 'プログラマ')
    GR0UP BY S1.部署コード HAVING COUNT(*) < 5
SELECT DISTINCT 部署コード FROM 社員 S1
   WHERE S1.部署コード IN (SELECT S2.部署コード FROM 社員 S2
         WHERE S1.部署コード = S2.部署コード
         AND S2.職務 = 'プログラマ'
         GR0UP BY S1.部署コード HAVING COUNT(*) < 5 )

“社員"表から,職務がプログラマである社員が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.職務 = 'プログラマ')
    GR0UP BY S1.部署コード HAVING COUNT(*) < 5
SELECT DISTINCT 部署コード FROM 社員 S1
   WHERE S1.部署コード IN (SELECT S2.部署コード FROM 社員 S2
         WHERE S1.部署コード = S2.部署コード
         AND S2.職務 = 'プログラマ'
         GR0UP BY S1.部署コード HAVING COUNT(*) < 5 )

解答:ア

<解説>

 
× 職務がプログラマでない社員が5人を超える部署の部署コードが出力される。
× 職務がプログラマでない社員が1人でもいる部署が副問合せで取り出され,その部署全体の人数が5人未満の部署の部署コードが出力される。
× 副検索文の中の表S1とS2に関する部署コードの結合条件が誤っているので文法的にエラーとなる。