我试图在工资大于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,它没有给我任何结果。任何帮助将不胜感激。
答案 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;