我正在使用Oracle DB。问题是
选择所有工作为秘书或销售人员且薪水高于1300的员工。。
因此我的答案是
select ENAME from EMP where JOB='CLERK' OR JOB='SALESMAN' AND SAL>1300;
这里的问题是,即使我提到薪水大于1300,它列出的员工姓名为薪水800/1100等。我的查询出了什么问题?
答案 0 :(得分:2)
在AND条件之间添加括号
select ENAME from EMP where (JOB='CLERK' OR JOB='SALESMAN') AND SAL>1300;
答案 1 :(得分:2)
文档list condition precedence从高到低排列。这表明AND
在OR
之前被评估。不带括号的查询:
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;