HOME»応用情報技術者試験掲示板»29年秋午前問28の回答について
投稿する

[0875] 29年秋午前問28の回答について

 十三夜さん(No.1) 
「関係RのA,Cへの射影の結果と一致するSQL文」について、IPAの回答は「SELECT DISTINCT A,C…」になっていますが、問題文に「重複行を除く」という条件はないため、「SELECT ALL A,C…」ではという意見があります。

たしかに私もこの問題を解いた時、DISTINCTが必要な条件は書いてないなと思いました。
(私の場合、逆にALLについての知識がなく、DISTINCT以外考えられませんでした。)

この条件でDISTINCTが妥当なのはなぜでしょうか?
2017.10.17 21:55
応用太郎さん(No.2) 
よく分からないので適当ですが、射影は若干ひっかけで
構文が正しいのを選ぶという意図ではないかと感じました。
2017.10.17 22:03
 十三夜さん(No.3) 
>応用太郎さん

私もその時は「ALL」を「*」と混同していて、構文的にDISTINCTしかないとおもっていたのですが、「SELECT ALL A,C…」は、構文として正しくて、「全行をSELECTする」という意味になるというのが、今日その話で本を調べてわかったことです。

「ALL」を省略するとデフォルトでALL指定になるそうですが…。
2017.10.17 22:12
通りすがりの者さん(No.4) 
とても気になって調べました。

Googleで、「データベース  射影  distinct」を入力して検索して出てきた「情報処理教科書 データベーススペシャリスト 2018年版」というタイトルをクリックすると、参考欄に以下の記述がありました。

射影演算は、SELECT文でSELECT句に選択項目リストを指定し、さらにDISTINCTを付与して重複を取り除いたものと同じである。

つまり、この問題で、関係RのA,Cへの射影の結果は、
a1  c1
a1  c2
a2  c2
なのですね。これは、すなわち、SELECT DISTINCT A, C FROM Tです。

基本情報や応用情報では、「斜影とは列を取り出すこと」さえ知っていれば問題は解けましたが、難しい問題が出ましたね。びっくりです。
2017.10.17 22:52
 十三夜さん(No.5) 
>通りすがりの者さん

わざわざ調べてくださり、ありがとうございます。

「射影」の結果は重複行を除いた状態を指すんですね。
「列を取り出す」としか思っていなくて、あやふやなまま騒いでしまってすみません。

ちゃんと調べないとだめですね。
2017.10.17 23:43

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。
© 2010-2024 応用情報技術者試験ドットコム All Rights Reserved.

Pagetop