无法显示薪水高于1300的员工

时间:2019-09-11 10:25:50

标签: oracle

我正在使用Oracle DB。问题是

选择所有工作为秘书或销售人员且薪水高于1300的员工。

因此我的答案是

select ENAME from EMP where JOB='CLERK' OR JOB='SALESMAN' AND SAL>1300;

这里的问题是,即使我提到薪水大于1300,它列出的员工姓名为薪水800/1100等。我的查询出了什么问题?

2 个答案:

答案 0 :(得分:2)

在AND条件之间添加括号

select ENAME from EMP where (JOB='CLERK' OR JOB='SALESMAN') AND SAL>1300;

答案 1 :(得分:2)

文档list condition precedence从高到低排列。这表明ANDOR之前被评估。不带括号的查询:

select ENAME from EMP where JOB='CLERK' OR JOB='SALESMAN' AND SAL>1300;

被评估为

select ENAME from EMP where JOB='CLERK' OR (JOB='SALESMAN' AND SAL>1300);

因此1300的限制仅适用于业务员,您会看到带薪水的文员。要更改默认的默认隐式优先级,您需要提供括号,如@ user7294900所示:

select ENAME from EMP where (JOB='CLERK' OR JOB='SALESMAN') AND SAL>1300;

您还可以在此处使用IN()条件:

select ENAME from EMP where JOB IN ('CLERK', 'SALESMAN') AND SAL>1300;