多个where语句返回不需要的结果

时间:2017-05-21 19:42:09

标签: sql oracle rdbms

我试图在工资大于1500的第10和第10部门内找回员工。这就是我正在运行的声明。

select ename, sal
from emp
where deptno = 10
or deptno = 30
and sal > 1500;

它返回:

Name               Salary
---------- --------------
NAME1                1600
NAME2                2850
NAME3                2450
NAME4                5000
NAME5                1300

当我只为一个部门运行没有OR的查询时,它返回NAME1和NAME2,当我为另一个部门运行它时,它返回NAME3和NAME4。

我的问题是,OR声明给了我错误的NAME5吗?对我来说,查询应该工作,我尝试使用AND而不是OR,它没有给我任何结果。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

AND优先于SQL OR子句中的WHERE,因此您拥有的内容相当于

where deptno = 10 or (deptno = 30 and sal > 1500)

尝试在OR周围加上括号,看看它是否能为您提供预期的结果。

where (deptno = 10 or deptno = 30) and sal > 1500

(另外,如果您在SELECT中添加了部门编号,它会稍微澄清一下,以便您可以看到每行中的哪个部门。)

答案 1 :(得分:2)

你的问题是缺少括号。但实际上编写查询的最佳方法是使用in

select ename, sal
from emp
where deptno in (10, 30) and
      sal > 1500;