問題:19510

  • フォーラムは新サイトへ移行しました。
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 .3 .4 .5 | 投稿日時 2015-10-6 10:07
mineolia  常連 居住地: Japan  投稿数: 13
教えてください(初投稿なのでレス遅かったらすみません)
なぜCも該当するか解りません

解説では括弧内が先に評価され〜と書いてあるので、Cは該当しないと思ってました。
解説の解説となってしまいお手数ですが、どなたかお手すきでご教授いただけると幸いです。

--- 以下 問題 ---

次のSQL文の実行結果として表示される列の組合せとして、正しいものはどれですか(該当するものを全て選択してください)。

 SELECT department_id, employee_id, employee_name, salary, commission, hiredate
 FROM employees
 WHERE (department_id = 3
  OR salary > 400000)
  AND commission <= 1200000
  OR hiredate > '2008-04-01';


DEPARTMENT_ID SALARY COMMISSION HIREDATE
A 5 500000 2000000 01-10-01
B 1 350000 800000 11-04-01
C 4 200000 800000 10-40-01
D 3 500000 2000000 01-10-01
E 3 400000 1200000 02-12-01

http://ping-t.com/mondai3/img/jpg/19510.jpg

--- 以下 答えと解説 ---

設問では「(department_id = 3 OR salary > 400000)」の部分が先に評価され、次にANDですので、「DEPARTMENT_ID列が3かSALARY列が400000より大きく、かつCOMMISSION列が1200000以下である」列(E)、または、「HIREDATE列が2008年4月1日より大きい(新しい)」列(B,C)が検索されます。

以上より、
・E
・B
・C
が正解となります。
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2015-10-6 11:50
quensan  長老   投稿数: 119
WHERE句の条件を分けますね。
 1: (department_id = 3 OR salary > 400000)
 2: commission <= 1200000
 3: hiredate > '2008-04-01'

これらを演算子でつなぐと、
 1 AND 2 OR 3

(), AND, ORの順で評価されるので、
 1かつ2、または3

1かつ2の条件に一致するE、または3の条件だけに一致するBとCが検索されるんですね。
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2015-10-6 14:17
arashi1977  長老 居住地: 広島  投稿数: 1715
OracleではなくてMicrosoft SQL ServerのT-SQLに関するドキュメントですが、こちらの例がイメージが湧きやすいと思います。

論理演算子の優先順位
https://technet.microsoft.com/ja-jp/library/ms186992(v=sql.105).aspx

特に最後の
引用:
必要でない場合でもかっこを使用すると、クエリが読みやすくなり、演算子の優先順位が原因の微妙な間違いを犯す可能性が減少します。かっこを使用することでパフォーマンスが大幅に低下することはありません。次の例は、元の例と構文は同じですが、元の例よりも読みやすくなっています。
は、実際の開発でも役に立つかと思います
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2015-10-6 23:05
mineolia  常連 居住地: Japan  投稿数: 13
quensanさん
めちゃめちゃ分かりやすい解説ありがとうございます!
なるほど、こうしてバラして見ると一気に分かりやすくなるんですね。


arashi1977さん
MSでのリンク先、確かにイメージで覚えられます!
しかもパホーマンスが低下しないってのは実用的ですし、コード書いた人以外が見ても分かりやすいですね!!
ありがとうございます
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2019-8-4 21:24
Toshi2838  新米   投稿数: 4
こちらの問題ですが、Eは誤答ではないでしょうか?
EのSALARYは400000なので、SALARY列が400000より大きいとの条件にマッチしてません。
salary > 400000 ではなく salary ≧ 400000 ならマッチしますけど。

なし Re: 問題:19510

msg# 1.4.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2019-8-4 22:17
mariohussey  長老   投稿数: 53
Eのdepartment_idが3ですから、

(department_id = 3 OR salary > 400000)

の条件にちゃんとマッチしていますよ。
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2019-8-5 21:02
Toshi2838  新米   投稿数: 4
すいません。勘違いでした。SQL実行してから質問するように致します。

  >フォーラム検索へ


Copyright (c) 2020 Ping-t All rights reserved.