请问大神们,这两sql语句有什么区别啊,加括号和不加括号,输出结果差别好大,求指教

林多少夕 2015-06-05 03:27:15
select WORKINFO.*
from WORKINFO
WHERE to_char(createdate, 'yyyy') = '2015'
AND WORKINFO.IsValid = 1
AND (completeDate is not null and to_char(completeDate, 'YYYY') = '2015')
and (APPROVALDEPT in (select s.oid
from sysorgan s
where s.parentorganoid = 1
or s.oid = 1) or
dutydeptoid in (select s.oid
from sysorgan s
where s.parentorganoid = 1
or s.oid = 1))
and workStatus >= 1
and isvalid = 1
AND (extend4 = 2 or extend4 is null )
ORDER BY DutyDeptOID ASC, WorkInfoNum DESC




select WORKINFO.*
from WORKINFO
WHERE to_char(createdate, 'yyyy') = '2015'
AND WORKINFO.IsValid = 1
AND (completeDate is not null and to_char(completeDate, 'YYYY') = '2015')
and (APPROVALDEPT in (select s.oid
from sysorgan s
where s.parentorganoid = 1
or s.oid = 1) or
dutydeptoid in (select s.oid
from sysorgan s
where s.parentorganoid = 1
or s.oid = 1))
and workStatus >= 1
and isvalid = 1
AND extend4 = 2 or extend4 is null
ORDER BY DutyDeptOID ASC, WorkInfoNum DESC
...全文
1099 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
金木犀 2018-01-31
  • 打赏
  • 举报
回复
就和我们数学中加减法的优先级一样,加个括号,身份档次就上去了,干啥啥优先。NOT>AND>OR 
cnsu-cmh 2017-08-04
  • 打赏
  • 举报
回复
优先级不一样 not>and>or 就像10*(2+3)跟10*2+3
Sam Sho 2015-06-09
  • 打赏
  • 举报
回复
or 和and 的优先级问题。
林多少夕 2015-06-05
  • 打赏
  • 举报
回复
非常感谢,你说得很清楚。
  • 打赏
  • 举报
回复
or 在括号里面,结果集是过滤其他过滤条件后再加过滤条件extend4 = 2 和extend4 是空 得到的; or 在括号外面面,结果集是过滤其他过滤条件加extend4 = 2过滤得到的结果,再把extend4 是空过滤 得到的结果并在一起。 比如: 学校有3个班级,第一个过滤条件是班级1,第二个过滤条件是 男生 或 生日在1月份的 按你的写法区别就是: 1、得到班级1里面的所有男生和1月生日的女生; 2、得到所有3个班级的1月生日的学生和班级1的男生。 2的结果比1多了班级2和班级3的1月生日的学生。明白了?
mayanzs 2015-06-05
  • 打赏
  • 举报
回复
仔细看一下 AND 及 OR 的逻辑运算符的规则。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧