問題:19510
- フォーラムは新サイトへ移行しました。
- このフォーラムではゲスト投稿が禁止されています
問題:19510
msg# 1
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
が正解となります。
なぜ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
が正解となります。
Re: 問題:19510
msg# 1.1
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が検索されるんですね。
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が検索されるんですね。
Re: 問題:19510
msg# 1.2
arashi1977
居住地: 広島
投稿数: 1715
OracleではなくてMicrosoft SQL ServerのT-SQLに関するドキュメントですが、こちらの例がイメージが湧きやすいと思います。
論理演算子の優先順位
https://technet.microsoft.com/ja-jp/library/ms186992(v=sql.105).aspx
特に最後の
引用:は、実際の開発でも役に立つかと思います
論理演算子の優先順位
https://technet.microsoft.com/ja-jp/library/ms186992(v=sql.105).aspx
特に最後の
引用:
必要でない場合でもかっこを使用すると、クエリが読みやすくなり、演算子の優先順位が原因の微妙な間違いを犯す可能性が減少します。かっこを使用することでパフォーマンスが大幅に低下することはありません。次の例は、元の例と構文は同じですが、元の例よりも読みやすくなっています。
Re: 問題:19510
msg# 1.3
mineolia
居住地: Japan
投稿数: 13
quensanさん
めちゃめちゃ分かりやすい解説ありがとうございます!
なるほど、こうしてバラして見ると一気に分かりやすくなるんですね。
arashi1977さん
MSでのリンク先、確かにイメージで覚えられます!
しかもパホーマンスが低下しないってのは実用的ですし、コード書いた人以外が見ても分かりやすいですね!!
ありがとうございます
めちゃめちゃ分かりやすい解説ありがとうございます!
なるほど、こうしてバラして見ると一気に分かりやすくなるんですね。
arashi1977さん
MSでのリンク先、確かにイメージで覚えられます!
しかもパホーマンスが低下しないってのは実用的ですし、コード書いた人以外が見ても分かりやすいですね!!
ありがとうございます
Re: 問題:19510
msg# 1.4
Toshi2838
投稿数: 4
こちらの問題ですが、Eは誤答ではないでしょうか?
EのSALARYは400000なので、SALARY列が400000より大きいとの条件にマッチしてません。
salary > 400000 ではなく salary ≧ 400000 ならマッチしますけど。
EのSALARYは400000なので、SALARY列が400000より大きいとの条件にマッチしてません。
salary > 400000 ではなく salary ≧ 400000 ならマッチしますけど。
Re: 問題:19510
msg# 1.4.1
mariohussey
投稿数: 53
Eのdepartment_idが3ですから、
(department_id = 3 OR salary > 400000)
の条件にちゃんとマッチしていますよ。
(department_id = 3 OR salary > 400000)
の条件にちゃんとマッチしていますよ。
Re: 問題:19510
msg# 1.5
Toshi2838
投稿数: 4
すいません。勘違いでした。SQL実行してから質問するように致します。