助け合いフォーラム
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';
![【図を表示】](https://ping-t-production-strg.s3.ap-northeast-1.amazonaws.com/uploads/question_image/file/9715/19510.jpg?X-Amz-Expires=600&X-Amz-Date=20240727T023718Z&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEAYaDmFwLW5vcnRoZWFzdC0xIkcwRQIgZGbfF1GoEDO%2FYrfCsXwfFSjCKj1RvjjY73XrK7%2BQmNoCIQDQepXbON3IQIjPhJHvDWmfx7QZLZ38Eufauz3VD8MrMyqxBAjf%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAAaDDYyMzQyOTgyNzI3NSIMN422Dczg4LODIH7UKoUEAQgot%2FkaKm0ycrY0esL1EN%2Fd8yPeY1B0QFsipqtIABA1SdaGl3RwYaxW09JrRsZCI64Zk4KkOBPvzL%2FMkx8c8c8gmEvs0u4A40Cua4V5YIxMhs8PuNvZQW2ICoSi9GVcILgRjhGXvjQxZtHC2hGEG5f0016Y2ZGR8AhwBhRMD4vLmOTIngn2xqwRp6O9A%2FSuGoAf8pcTscE4NyRQ6hrfv2mhzSuq3BwTtE4LtZcJK%2B0cj2nQu5chUJtJ8B3jbX04Mil%2BVIJoutTSsGgy%2FPzC9EsaDmydOSESyOI8zsIeObqNo2%2BtCfgBsBlPy8sIFPIaWk7e2q9j9Jn18c2rndsn8Nt955J%2F%2F91JpdvbuTXWa3dSTnvM18t9OHyR6NBJrkbZOggFlXR4BqCZbwf2oUllVG9uulGiaItDV7QmMr2mvJ16seiRZ1jbzPIDLvAqFrOZsoh9ibS3i%2Fcco6Xv%2Fwj%2F5Q2%2FnJmQeoj2f5njnGgr%2Bkh91qXkq2FCdvp9kM2fRXKw7LXzNA5zjZdw7jEjmYYEKO3kfRt%2BmqAUAGHbjWD6ZORaeOZ6SyeE%2BciAA%2F8uRtuTVaP6rYsYw9IXoT3lGJ1QiwWHNbGlyNop%2F76tqMn90JcgNqKDnM%2FsAlWGFVi%2FEg28vzgaqnTthI%2Fz9PwO9v4KQLIQFo4vbTBEKC1K2tWHh%2FZT80vnXjDyvZC1BjqmAQac2E5lk6HQlBuIP81mejR4mAHvW19rMqK8fPWiS5T8snoCbT35rOShhx1mBdzRzs%2FPfy6Pa1X%2B67U%2BYNoGExGt4QVAmzs4QUnkOre3y20krCO%2BzqIr%2BdZZltTxih7YSet0NWSGAdu4pqWJvyjJfaMU6Aqiq0XQOa7bCEgdRby39OQNS6VWw3ah5PRFigfyolbI7tQ2FIOnXTRc1vTBrgvbZvF9yAY%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAZCJ2QHLFV3Q5B6V3%2F20240727%2Fap-northeast-1%2Fs3%2Faws4_request&X-Amz-SignedHeaders=host&X-Amz-Signature=ce3f9b1af0517d2023d69a61cbfb5fc7ab131d7129745dd5c5c2f8f68518b5f5)
正解
B
C
E
解説
AND演算子とOR演算子ではAND演算子のほうが先に評価されますが、()括弧がある場合は、括弧内の演算子を優先して評価します。
![<img src="/mondai3/img/jpg/19510.jpg">](https://ping-t-production-strg.s3.ap-northeast-1.amazonaws.com/uploads/question_image/file/9715/19510.jpg?X-Amz-Expires=600&X-Amz-Date=20240727T023718Z&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEAYaDmFwLW5vcnRoZWFzdC0xIkcwRQIgZGbfF1GoEDO%2FYrfCsXwfFSjCKj1RvjjY73XrK7%2BQmNoCIQDQepXbON3IQIjPhJHvDWmfx7QZLZ38Eufauz3VD8MrMyqxBAjf%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAAaDDYyMzQyOTgyNzI3NSIMN422Dczg4LODIH7UKoUEAQgot%2FkaKm0ycrY0esL1EN%2Fd8yPeY1B0QFsipqtIABA1SdaGl3RwYaxW09JrRsZCI64Zk4KkOBPvzL%2FMkx8c8c8gmEvs0u4A40Cua4V5YIxMhs8PuNvZQW2ICoSi9GVcILgRjhGXvjQxZtHC2hGEG5f0016Y2ZGR8AhwBhRMD4vLmOTIngn2xqwRp6O9A%2FSuGoAf8pcTscE4NyRQ6hrfv2mhzSuq3BwTtE4LtZcJK%2B0cj2nQu5chUJtJ8B3jbX04Mil%2BVIJoutTSsGgy%2FPzC9EsaDmydOSESyOI8zsIeObqNo2%2BtCfgBsBlPy8sIFPIaWk7e2q9j9Jn18c2rndsn8Nt955J%2F%2F91JpdvbuTXWa3dSTnvM18t9OHyR6NBJrkbZOggFlXR4BqCZbwf2oUllVG9uulGiaItDV7QmMr2mvJ16seiRZ1jbzPIDLvAqFrOZsoh9ibS3i%2Fcco6Xv%2Fwj%2F5Q2%2FnJmQeoj2f5njnGgr%2Bkh91qXkq2FCdvp9kM2fRXKw7LXzNA5zjZdw7jEjmYYEKO3kfRt%2BmqAUAGHbjWD6ZORaeOZ6SyeE%2BciAA%2F8uRtuTVaP6rYsYw9IXoT3lGJ1QiwWHNbGlyNop%2F76tqMn90JcgNqKDnM%2FsAlWGFVi%2FEg28vzgaqnTthI%2Fz9PwO9v4KQLIQFo4vbTBEKC1K2tWHh%2FZT80vnXjDyvZC1BjqmAQac2E5lk6HQlBuIP81mejR4mAHvW19rMqK8fPWiS5T8snoCbT35rOShhx1mBdzRzs%2FPfy6Pa1X%2B67U%2BYNoGExGt4QVAmzs4QUnkOre3y20krCO%2BzqIr%2BdZZltTxih7YSet0NWSGAdu4pqWJvyjJfaMU6Aqiq0XQOa7bCEgdRby39OQNS6VWw3ah5PRFigfyolbI7tQ2FIOnXTRc1vTBrgvbZvF9yAY%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAZCJ2QHLFV3Q5B6V3%2F20240727%2Fap-northeast-1%2Fs3%2Faws4_request&X-Amz-SignedHeaders=host&X-Amz-Signature=ce3f9b1af0517d2023d69a61cbfb5fc7ab131d7129745dd5c5c2f8f68518b5f5)
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
が正解となります。
参考
論理演算子には以下のものがあります。
![【図を表示4】](https://ping-t-production-strg.s3.ap-northeast-1.amazonaws.com/uploads/question_image/file/9716/kkkk19510.jpg?X-Amz-Expires=600&X-Amz-Date=20240727T023718Z&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEAYaDmFwLW5vcnRoZWFzdC0xIkcwRQIgZGbfF1GoEDO%2FYrfCsXwfFSjCKj1RvjjY73XrK7%2BQmNoCIQDQepXbON3IQIjPhJHvDWmfx7QZLZ38Eufauz3VD8MrMyqxBAjf%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAAaDDYyMzQyOTgyNzI3NSIMN422Dczg4LODIH7UKoUEAQgot%2FkaKm0ycrY0esL1EN%2Fd8yPeY1B0QFsipqtIABA1SdaGl3RwYaxW09JrRsZCI64Zk4KkOBPvzL%2FMkx8c8c8gmEvs0u4A40Cua4V5YIxMhs8PuNvZQW2ICoSi9GVcILgRjhGXvjQxZtHC2hGEG5f0016Y2ZGR8AhwBhRMD4vLmOTIngn2xqwRp6O9A%2FSuGoAf8pcTscE4NyRQ6hrfv2mhzSuq3BwTtE4LtZcJK%2B0cj2nQu5chUJtJ8B3jbX04Mil%2BVIJoutTSsGgy%2FPzC9EsaDmydOSESyOI8zsIeObqNo2%2BtCfgBsBlPy8sIFPIaWk7e2q9j9Jn18c2rndsn8Nt955J%2F%2F91JpdvbuTXWa3dSTnvM18t9OHyR6NBJrkbZOggFlXR4BqCZbwf2oUllVG9uulGiaItDV7QmMr2mvJ16seiRZ1jbzPIDLvAqFrOZsoh9ibS3i%2Fcco6Xv%2Fwj%2F5Q2%2FnJmQeoj2f5njnGgr%2Bkh91qXkq2FCdvp9kM2fRXKw7LXzNA5zjZdw7jEjmYYEKO3kfRt%2BmqAUAGHbjWD6ZORaeOZ6SyeE%2BciAA%2F8uRtuTVaP6rYsYw9IXoT3lGJ1QiwWHNbGlyNop%2F76tqMn90JcgNqKDnM%2FsAlWGFVi%2FEg28vzgaqnTthI%2Fz9PwO9v4KQLIQFo4vbTBEKC1K2tWHh%2FZT80vnXjDyvZC1BjqmAQac2E5lk6HQlBuIP81mejR4mAHvW19rMqK8fPWiS5T8snoCbT35rOShhx1mBdzRzs%2FPfy6Pa1X%2B67U%2BYNoGExGt4QVAmzs4QUnkOre3y20krCO%2BzqIr%2BdZZltTxih7YSet0NWSGAdu4pqWJvyjJfaMU6Aqiq0XQOa7bCEgdRby39OQNS6VWw3ah5PRFigfyolbI7tQ2FIOnXTRc1vTBrgvbZvF9yAY%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAZCJ2QHLFV3Q5B6V3%2F20240727%2Fap-northeast-1%2Fs3%2Faws4_request&X-Amz-SignedHeaders=host&X-Amz-Signature=7bcce914900e41a1d48f73abe9e311814e1c6f2e88fe5fb8883ac9473e290f39)
複数の条件が指定されている場合は、以下の優先順位に従って評価されます。
![【図を表示】](https://ping-t-production-strg.s3.ap-northeast-1.amazonaws.com/uploads/question_image/file/9717/k19510.jpg?X-Amz-Expires=600&X-Amz-Date=20240727T023718Z&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEAYaDmFwLW5vcnRoZWFzdC0xIkcwRQIgZGbfF1GoEDO%2FYrfCsXwfFSjCKj1RvjjY73XrK7%2BQmNoCIQDQepXbON3IQIjPhJHvDWmfx7QZLZ38Eufauz3VD8MrMyqxBAjf%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAAaDDYyMzQyOTgyNzI3NSIMN422Dczg4LODIH7UKoUEAQgot%2FkaKm0ycrY0esL1EN%2Fd8yPeY1B0QFsipqtIABA1SdaGl3RwYaxW09JrRsZCI64Zk4KkOBPvzL%2FMkx8c8c8gmEvs0u4A40Cua4V5YIxMhs8PuNvZQW2ICoSi9GVcILgRjhGXvjQxZtHC2hGEG5f0016Y2ZGR8AhwBhRMD4vLmOTIngn2xqwRp6O9A%2FSuGoAf8pcTscE4NyRQ6hrfv2mhzSuq3BwTtE4LtZcJK%2B0cj2nQu5chUJtJ8B3jbX04Mil%2BVIJoutTSsGgy%2FPzC9EsaDmydOSESyOI8zsIeObqNo2%2BtCfgBsBlPy8sIFPIaWk7e2q9j9Jn18c2rndsn8Nt955J%2F%2F91JpdvbuTXWa3dSTnvM18t9OHyR6NBJrkbZOggFlXR4BqCZbwf2oUllVG9uulGiaItDV7QmMr2mvJ16seiRZ1jbzPIDLvAqFrOZsoh9ibS3i%2Fcco6Xv%2Fwj%2F5Q2%2FnJmQeoj2f5njnGgr%2Bkh91qXkq2FCdvp9kM2fRXKw7LXzNA5zjZdw7jEjmYYEKO3kfRt%2BmqAUAGHbjWD6ZORaeOZ6SyeE%2BciAA%2F8uRtuTVaP6rYsYw9IXoT3lGJ1QiwWHNbGlyNop%2F76tqMn90JcgNqKDnM%2FsAlWGFVi%2FEg28vzgaqnTthI%2Fz9PwO9v4KQLIQFo4vbTBEKC1K2tWHh%2FZT80vnXjDyvZC1BjqmAQac2E5lk6HQlBuIP81mejR4mAHvW19rMqK8fPWiS5T8snoCbT35rOShhx1mBdzRzs%2FPfy6Pa1X%2B67U%2BYNoGExGt4QVAmzs4QUnkOre3y20krCO%2BzqIr%2BdZZltTxih7YSet0NWSGAdu4pqWJvyjJfaMU6Aqiq0XQOa7bCEgdRby39OQNS6VWw3ah5PRFigfyolbI7tQ2FIOnXTRc1vTBrgvbZvF9yAY%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAZCJ2QHLFV3Q5B6V3%2F20240727%2Fap-northeast-1%2Fs3%2Faws4_request&X-Amz-SignedHeaders=host&X-Amz-Signature=a662eef7d920c78ada84d42975d36b4f772b638f349ccce69cae9ff0c4eefe19)
優先順位を変更したい場合は、先に評価したい演算を()括弧で囲むことで優先順位を高く変更できます。
【誤記?】解説を読んでも回答通りの答えになりませんでした。
正解はB,C,Eとありますが、A,D,Eの間違いではないのでしょうか。
解説に、「(department_id = 3 OR salary > 400000)」の部分が先に評価され
とあるので、department_idが3であるD,Eもしくはsalaryが400000より大きいA,D,Eが回答の選択肢に入ると私は考えます。
ですが、回答にはA,Dの選択肢がなく、代わりにsalaryが400000より小さいB,Cが選択肢にあります。しかもどちらもdepartment_idは3ではありません。
私の認識があっていれば、正しい回答はA,D,Eとなると思うのですが、いかがでしょうか。
解説に、「(department_id = 3 OR salary > 400000)」の部分が先に評価され
とあるので、department_idが3であるD,Eもしくはsalaryが400000より大きいA,D,Eが回答の選択肢に入ると私は考えます
まず解説の2行目をみてみます。
AND演算子とOR演算子ではAND演算子のほうが先に評価されますが、()括弧がある場合は、括弧内の演算子を優先して評価します。
これからすると、「かっこ→AND→OR」の順に評価されると読めます。その前提で解説の最後の文を再確認しましょう。
設問では「(department_id = 3 OR salary > 400000)」の部分が先に評価され、次にANDですので、「DEPARTMENT_ID列が3かSALARY列が400000より大きく、かつ COMMISSION列が1200000以下である」列(E)、または、「HIREDATE列が2008年4月1日より大きい(新しい)」列(B,C)が検索されます。
カッコだけの評価ならsushitaroさんの言われる通りかもしれませんが、その次にあるANDが抜けているのでずれているんですよね。
順番としては「(department_idとsalaryの条件) かつ commissionの条件」というひとまとまりがあり、次にORで繋がった「hiredateの条件」がくるのですよね。
算数的に考えると
(A + B) x C + D
で「A + B」だけで終わりにして、Cをかけるのを後回しにして C + D をやろうとしてる感覚です。
sqlite3で実験してみましたが、条件をいじるとこんな感じで結果が変わってきます。
sqlite> SELECT *
...> FROM employees
...> WHERE (department_id = 3
...> OR salary > 400000) ;
5|500000|2000000|01-10-01 ←A
3|500000|2000000|01-10-01 ←D
3|400000|1200000|02-12-01 ←E
sqlite> SELECT department_id, salary, commission, hiredate
...> FROM employees
...> WHERE (department_id = 3
...> OR salary > 400000)
...> AND commission <= 1200000;
3|400000|1200000|02-12-01 ←Eだけになっているので、ANDが効いていることがわかる
sqlite> SELECT *
...> FROM employees
...> WHERE (department_id = 3
...> OR salary > 400000)
...> AND commission <= 1200000
...> OR hiredate > '08-04-01';
1|350000|800000|11-04-01 ←B
4|200000|800000|10-04-01 ←C
3|400000|1200000|02-12-01
↑ hiredateの条件でヒットしたB, Cが抽出されている
コメント
この投稿に対して返信しませんか?