助け合いフォーラム
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';
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
が正解となります。
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句で論理演算子を使用して、条件を複数記述したり、条件の判定結果を反転させることができます。
論理演算子には以下のものがあります。

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

優先順位を変更したい場合は、先に評価したい演算を()括弧で囲むことで優先順位を高く変更できます。
論理演算子には以下のものがあります。

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

優先順位を変更したい場合は、先に評価したい演算を()括弧で囲むことで優先順位を高く変更できます。
日付リテラルの扱い
R
Rinux99
投稿日 2026/04/12
表に格納されている値はYY-MM-DDまたはRR-MM-DDの構成となっていると思いますが、
WHERE句ではYYYY-MM-DDの形式で記載されていたため気になりました。
問題文に格納されている日付の順序がどのような構成になっているのか一文添えておかないと迷うかと思います。
また、実務での使用について参考や解説の内容に組み込むべき内容として以下があげられると思いました。
・NLS_DATE_FORMATのデフォルト値と異なる日付の記述方法を行った場合はエラーとなる。
・TO_DATE関数を使用して指定することで安全に日付を指定することができる。
この投稿に対して返信しませんか?