助け合いフォーラム

Oracle DB

Oracle Master Silver SQL 2019(1Z0-071)
問題ID : 26431
問題を開く
次の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';

正解

B

C

E

解説

WHERE句に条件が複数指定されている場合は、論理演算子の優先順位に従って条件が評価されます。
AND演算子とOR演算子ではAND演算子のほうが先に評価されますが、()括弧がある場合は、括弧内の演算子を優先して評価します。



 WHERE (department_id = 3
  OR salary > 400000)
  AND commission <= 1200000
  OR hiredate > '2008-04-01';

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

以上より、
・E
・B
・C
が正解となります。

参考

SQL文ではWHERE句で論理演算子を使用して、条件を複数記述したり、条件の判定結果を反転させることができます。
論理演算子には以下のものがあります。



複数の条件が指定されている場合は、以下の優先順位に従って評価されます。



優先順位を変更したい場合は、先に評価したい演算を()括弧で囲むことで優先順位を高く変更できます。

上に戻る

()括弧がある場合の演算子の優先順位について

公開日 2023/03/16

お世話になります。
Oracle Master Silver SQLの問題で、()括弧がある場合の演算子の優先順位の問題ですが、
こちらの問題で(department_id = 3 OR salary > 400000)がまず優先されると思うのですが、
そうなると回答:Dも当てはまると思うのですが、不正解です。
何故、回答:Dは不正解なのでしょうか。
宜しくお願い致します。

2023/03/16 07:58

文が長くなるため問題の
department_id = 3をa
salary > 400000をb
commission <= 120000をc
hiredate > '2008-04-01'をd
とします。

簡単に言うと算数の+と×に変えればわかりやすいです。ORは+、ANDは×です。
問題で表すと(a+b)×c+dになります。

以下は細かい説明です。
問題の括弧を外した場合
a OR b AND c OR d
となりますが、この場合日本語で表すと
a または b かつ c または d
となります。
結果として表示されるのはaであるもの、bでありcでもあるもの、dであるものとなります。
これは2つのORを評価する前にANDを評価するためこのような結果になります。

問題の形にすると
(a OR b) AND c OR d
本来ならANDを評価するところ()があるためa OR bから評価されます。この評価結果をxとすると
x AND c OR dとなります。

次はx AND cが評価されます。
この結果をyとすると、
y OR dとなります。

長文になりましたが以上になります。
わかりにくい書き方になってしまっているかもしれませんが、こちらで理解できなければ先に論理演算について学習すると良いと思います。


コメント

r ren4219

2023/03/17 05:46

長文ありがとうございます。 理解することができました。 ありがとうございます。

この返信に対して
コメントを記入できます

この投稿に対して返信しませんか?