• 締切済み

どなたか教えて下さい。

今年の秋の情報処理試験・セキュリティアドミニストレータ午前にて、 下記のような問題がでていました。SQLにはあまり詳しくなく、教本等 みてもよくわかりません。答えは”エ”らしいのですが、なぜそうなるの でしょうか?よろしくお願い致します。 ”会員”表に対するSQL文によって得られる表はどれか。 [会員] ------------------------------------------ 会員番号 会員名 生年月日  リーダ会員番号 ------------------------------------------ 001    田中 1960-03-25  002 002    鈴木 1970-02-15  002 003    佐藤 1975-05-27  002 004    福田 1960-10-25  004 005    渡辺 1945-09-01  004 ------------------------------------------ [SQL文] SELECT X.会員名  FROM 会員 X, 会員 Y WHERE X.リーダ会員番号 = Y.会員番号 AND X.生年月日 < Y.生年月日 [解答選択欄] ア 該当無し イ 佐藤 ウ 鈴木 福田 エ 田中 渡辺

みんなの回答

noname#99638
noname#99638
回答No.4

ご質問からかなり時間が経っていますが、締めきられていないので参考までに。 まずこの問題ですが、昔の第1種試験の過去問題の焼き直しですね。 平成10年春期午前 問46  平成8年春期午前 問52 と類似問題です。 (だからどうしたと言われればそれまでですが、旧一種レベルの問題が出るんだな~と思ったもので・・・。あと過去問題集などが手に入りましたら、ご覧になってみるのも良いかも知れません) で、内容の方ですが、 FROM 会員 X,会員 Y で 会員表に別の名前「X」と「Y」を付けています。 (他の方の回答にもありますが、同じ表どうしを結合するためです) WHERE X.リーダ会員番号 = Y.会員番号 ある会員のリーダ会員番号を元に、リーダの情報を検索していると考えれば良いと思います。 X.生年月日 < Y.生年月日 会員の生年月日 < リーダの生年月日 という検索をしています。 問題設定が分かりにくいな~という気もしますが、「リーダ会員」を「親会員」と読みかえれば、ねずみ講?という気もしないではないですね・・・。

  • soakun
  • ベストアンサー率66% (6/9)
回答No.3

まず、FROM句で会員表が2つ結合されていることに注意しましょう。 恐らくこの問題の肝となる部分だと思います。 同じ表を 2つ結合してみたのが下のような表になります。 # 左側が X、右側が Yの会員表です X番号 X名 X生年月日 Xリーダ Y番号 Y名 Y生年月日 Yリーダ -------------------------------------------------------------- 001 田中 1960-03-25 002   001 田中 1960-03-25 002 001 田中 1960-03-25 002   002 鈴木 1970-02-15 002 001 田中 1960-03-25 002   003 佐藤 1975-05-27 002 001 田中 1960-03-25 002   004 福田 1960-10-25 004 001 田中 1960-03-25 002   005 渡辺 1945-09-01 004 002 鈴木 1970-02-15 002   001 田中 1960-03-25 002 002 鈴木 1970-02-15 002   002 鈴木 1970-02-15 002 002 鈴木 1970-02-15 002   003 佐藤 1975-05-27 002 002 鈴木 1970-02-15 002   004 福田 1960-10-25 004 002 鈴木 1970-02-15 002   005 渡辺 1945-09-01 004 003 佐藤 1975-05-27 002   001 田中 1960-03-25 002 003 佐藤 1975-05-27 002   002 鈴木 1970-02-15 002 003 佐藤 1975-05-27 002   003 佐藤 1975-05-27 002 003 佐藤 1975-05-27 002   004 福田 1960-10-25 004 003 佐藤 1975-05-27 002   005 渡辺 1945-09-01 004 004 福田 1960-10-25 004   001 田中 1960-03-25 002 004 福田 1960-10-25 004   002 鈴木 1970-02-15 002 004 福田 1960-10-25 004   003 佐藤 1975-05-27 002 004 福田 1960-10-25 004   004 福田 1960-10-25 004 004 福田 1960-10-25 004   005 渡辺 1945-09-01 004 005 渡辺 1945-09-01 004   001 田中 1960-03-25 002 005 渡辺 1945-09-01 004   002 鈴木 1970-02-15 002 005 渡辺 1945-09-01 004   003 佐藤 1975-05-27 002 005 渡辺 1945-09-01 004   004 福田 1960-10-25 004 005 渡辺 1945-09-01 004   005 渡辺 1945-09-01 004 で、あとは WHERE句の条件で当てはまる行を適宜選択します。 001 田中 1960-03-25 002   002 鈴木 1970-02-15 002 005 渡辺 1945-09-01 004   004 福田 1960-10-25 004 の 2行が選択されます。ここで選択項目は Xの会員名なので、 答えは エの田中、渡辺、となります。

  • stork
  • ベストアンサー率34% (97/285)
回答No.2

ポイントは、最終行の X.生年月日 < Y.生年月日  は、 会員の生年月日 < リーダーの生年月日 となっています。 このSQLは、テーブルを自己結合して、会員の生年月日とリーダーの生年月日を比較してリーダーが年下の(生年月日が大きい)人を抽出しています。

  • coolguys
  • ベストアンサー率18% (351/1917)
回答No.1

SQLの基本が大体分るものとして、省略しながら書きます。 仮に田中をXとした場合に Yを鈴木とした場合に 田中のリーダー会員番号002 と 鈴木の会員番号が002 で等しいので ANDの判断処理に行ける 田中の生年月日と鈴木の生年月日を比較する。 この比較が正しければ、Xの会員名 田中が選択される。 この段階で「エ」しか残らない。 と言う事だと思います。

関連するQ&A