• 締切済み

平成20年 春期 基本情報技術者 午前 問58 の解説

平成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)

みんなの回答

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

最近は基本情報でもこんなわかりにくいSQL文出すんですね。 (すいません。第二種時代の人間で) さて、エがなぜ不正解かというと、「その部署にプログラマである社員が1人もいない場合、抽出できないから」です。 アはCOUNTを使っていますから、サブクエリの結果がゼロ人でも「0」を返してくれますが、エはサブクエリの結果が該当なしとなってしまい、メインクエリのIN句の条件を満たさなくなってしまうのです。

char_0121g
質問者

お礼

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

関連するQ&A

  • SQL問題、正解なし?

    H18 春 ソフトウェア 技術者試験 問67 (1)SELECT DISTINCT S1.生年 (2)FROM 社員 AS S1、社員 AS S2 (3)WHERE S1.生年>=S2.生年 (4)GROUP BY S1.生年 (5)HAVING COUNT(*)<=3 社員 社員番号  社員名  生年               1943               1968               1970               1943               1953               1954               1962               1975               1961               1957 ※社員番号・社員名は端折りました。 (2):社員テーブルから 全く同じ内容をS1、S2でテーブル名を変更 (3):同じ内容を比較していく S1.生年以上をひとつずつ比較して (4)・(5)でグループ化して3つ以下であれば (1):DISTINCTで重複を削除して出力 1943 2つ 1953 3つ 出力結果 生年 1943 1953 で正解なのでしょうか? 選択問題で不備があり正解なしとあります。

  • COUNT(DISTINCT *)がエラーになる理由を教えてください

    以下のSQL文がエラーとなるのはなぜですか? SELECT COUNT(DISTINCT *) FROM 社員 SELECT DISTINCT * FROM 社員 ならエラーにならないのにどうしてでしょうか

  • sedに関する質問

    ★以下のファイルがあるとします。 SQL> select count(*) from koumoku where no = 1052 and mid =2; COUNT(*) ---------- 7 SQL> select count(*) from koumoku where no = 1053 and mid =3; COUNT(*) ---------- 4 SQL> select count(*) from setumei where no = 1054 and mid =2; COUNT(*) ---------- 9 SQL> select count(*) from setumei where no = 1055 and mid =7; COUNT(*) ---------- 5 SQL> select count(*) from imi where no = 1056 and mid =2; COUNT(*) ---------- 9 SQL> select count(*) from imi where no = 1057 and mid =6; COUNT(*) ---------- 3 ★ここでsedコマンドを利用して、 koumoku COUNT(*) ---------- 7 koumoku COUNT(*) ---------- 4 setumei COUNT(*) ---------- 9 setumei COUNT(*) ---------- 5 imi COUNT(*) ---------- 9 imi COUNT(*) ---------- 3 のように取り出したいのですが、方法が分からないので、 誰か教えてもらえますか?宜しくお願いします。

  • テーブルで使用するinについて

    select count(r.テスト1) as all_count from DB1 as r where 1=1 and ( r.テスト1 in (select distinct テスト1 from DB2 where テスト1 is not null and テスト2 is not null)); このようなSQL文がある場合は どのような意味になるのでしょうか? inといものはどのようなときに使うのでしょうか? ご教授お願いいたします。

  • 【初歩的な質問ですが・・・】 SQL文書き方がわかりません

    SQLの知識に乏しい者です。 よろしくお願い致します。 ●テーブルA ・会計コード ・年度 ・部署番号 ・社員番号 ・その他幾つかのデータ ※Where句で「年度>2002年」以降を抽出 のテーブルがあります。 この時、Bテーブルで ●テーブルB ・会計コード(主キー) ・年度 ・部署番号(主キー) ・社員番号(主キー) ・その他幾つかのデータ ※Aテーブルで抽出されたデータの中から絞り込む というテーブルを抽出するSQL文を組みたいのですが、効率の良いやり方がわかりません。 副問合せで  Select [B表で抽出した列名…]  From B表  Where 会計コード = (Select 会計コード               From A表               Where 年度 > '2002')  AND 部署番号 = (Select 部署番号             From A表               Where 年度 > '2002') ・・・・以下省略 の様に書くと効率が悪い気がしました。 (実際には、副問合せが6個書くことになるため) 良い書き方を知っている方がいらっしゃいましたら、よろしくお願い致します。

  • 基本情報技術者 平成18春期 午前問9

    次の表は、入力文字列を検査する為の状態遷移表である。この検査では、初期状態をaとし、文字列の入力中に状態がeになれば不合格とする。 回答群で示される文字列のうち、この検査で符号家屋となるものはどれか。ここで、回答群中の△は空白を表す。               入力文字          空白 数字 符号 小数点 その他 現在の状態a   a   b   c   d     e         b   a   b   e   d    e         c   e   b   e   d    e         d   a   e   e   e    e 選択肢 ア+0010 イ-1  ウ12.2  エ9.△     答えウ12.2 がよくわかりません。参考書説き方の欄で、ウは、abbdeとなるのは理解できるのですが、その他の選択肢も、アcbbeでeになって、エもbdeでeになると思うのですが。ちなみに参考書にはアはacbbbb、エはabdaとなっています。 よろしくお願いします。

  • 平成23年 春期 基本情報技術者 午前 問19

    解説にある、「データベースサーバでは、1トランザクション当たり、データベースの 10 データブロックにアクセスする SQL が実行される。データブロックのアクセスに必要なデータベースサーバの CPU 時間は, 0.2 ミリ秒で、CPU 使用率の上限は、80%であるから、処理できるトランザクションの数は 400 件になる。 」で、なぜ400件になるのかがわかりません。 問題文から、1トランザクションにつき、0.2ミリ秒かかる。 ということは、2秒につき、300トランザクション処理する。 ということは、1秒ではその半分で、150トランザクション処理する。 ということは、150トランザクション×0.8(CPU 使用率の上限)=120トランザクションでは?? http://情報処理試験.jp/FE23a-am/k19.html

  • 平成22年 春期 基本情報技術者 午前 問43

    回答を読んでもわからないので教えてください。 なぜ4を設定すると,実行だけができるのでしょうか? 漠然とした質問の仕方ですいません…。 http://情報処理試験.jp/FE22a-am/t43.html

  • 平成23年 春期 基本情報技術者 午前 問67

    解説を読んでもわかりません。 1500 : 2000 = x : 60000という式から回答を求めるようですが、「2000」という数字はどこからきたのでしょうか? http://情報処理試験.jp/FE23a-am/k67.html

  • EXCELのVBAで重複を除いたカウント

    EXCELのVBAでSQLの SELECT COUNT(DISTINCT(ITEMS)) FROM TABLE WHERE SHOP = 'A' と同様のことを行いたいのですが、どのように考えたらよいでしょうか。 同じようなことができる関数でもよいです。