• 締切済み
  • 困ってます

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

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数1492
  • ありがとう数5

みんなの回答

  • 回答No.1

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連する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 社員 ならエラーにならないのにどうしてでしょうか

  • 検索する文字列のデータが空の場合もその対象にしたい

    検索する文字列のデータが空の場合もその対象にするには、 SELECT * FROM `table` WHERE 1 AND `s1`='あああああ' AND `s2` IN('いいいいい',NULL) のようにするのでしょうか? 数値の場合はデータが無いのを0で表現すれば、 SELECT * FROM `table` WHERE 1 AND `m1`<=100 AND `m2`<=250 で良いですよね?

  • テーブルで使用する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といものはどのようなときに使うのでしょうか? ご教授お願いいたします。

  • 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 のように取り出したいのですが、方法が分からないので、 誰か教えてもらえますか?宜しくお願いします。

  • EXISTSを使ったDELETE文

    「SELECT文の件数」と、 「同じSELECT文を使ったDELETE文の件数」が一致しない現象が起き、困っています。 【SELECT文】※2件返ってきます。 SELECT   a.部署コード,   a.社員コード FROM   社員マスタ a,   組織マスタ b WHERE   a.部署コード = b.部署コード 【DELETE文】※50件 DELETEされます。 DELETE TABLE   社員マスタ WHERE   EXISTS   (   SELECT     a.部署コード,     a.社員コード   FROM     社員マスタ a,     組織マスタ b   WHERE     a.部署コード = b.部署コード   ) 環境はSQLSERVER2005です。 件数はSQLSERVER2005のカウントオプションで表示されているものなので間違いないです。 宜しくお願いします。

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

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

  • 【初歩的な質問ですが・・・】 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個書くことになるため) 良い書き方を知っている方がいらっしゃいましたら、よろしくお願い致します。

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

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

  • 平成15年 春期 基本情報技術者 午後 問01

    http://情報処理試験.jp/FE15a-pm/t01.html 参考書にて上記の問題の解説を読んだ上での質問です。 (1)最初の命令(2100 011B)を実行する前に、すでに汎用レジスタ0には「0003」がセットされているとのことですが、なぜその値がセットされているのでしょうか。問題文の通りだと、命令実行前は「0113」がセットされているはずでは? (2)RとXとIを求める際に、例えば、命令が2170 0111の場合には、「70」を「0111 0000」の2進数に変換し、Rが01、Xが11、Iが0だということですが、Iがなぜ0なのかがわかりません。問題文から、Iは1バイトということですが、「0000」は4バイトなのに、なぜIは「0」?? というか、Iは1バイトなのに、なぜ「0000」??