一个小括号引发的血案(AND OR执行优先级)

近日,在执行sql时,同时使用了and 与 or,并没有输出预期想要的结果,影响了数据的准确性,经过排查、原因是:

关系型运算符优先级高到低为:not and or。

1、逻辑与操作:AND
语法:A AND B
操作类型:boolean
说明:如果 A 和 B 均为 TRUE,则为 TRUE;否则为 FALSE。

select 1 where 1 = 1 and 2 = 2; 结果为1
2、逻辑与操作:OR
语法:A OR B
操作类型:boolean
说明:如果 A 或 B 有一个为 TRUE,则为 TRUE;否则为 FALSE。

select 1 where 1 = 2 or 2 = 2; 结果1

3.AND 与OR 连用,注意加括号。
例:

“Websites” 表中选取 alexa 排名大于 “15” 且国家为 “CN” 或 “USA” 的所有网站:

SELECT * FROM Websites WHERE alexa > 15 AND (country=‘CN’ OR country=‘USA’);
如果不加括号:执行的是满足alexa > 15 AND country=‘CN’ 与或者满足 country='USA’的数据,与预想的不一样。

再例:

数据源:
1,22
1,21
2,22
1,20

select * from id_age where (id=1 or id =2) and age=22;

表示:
查询id=1,同时age=22或者id=2,同时age=22的数据,数据只要id=1或者id=2都要加age=22这个条件
即id=1 and age=22/id=2 and age=22
显示结果:
1,22
2,22

select * from id_age where id=1 or id =2 and age=22;
仿佛and前后的条件类似于(小括号)的意思
表示:
查询id=1或者id=2同时age=22的数据,or前是一个查询条件,or后是一个查询条件,
即id=1/id=2 and age=22
显示结果:
1 20
1 21
1 22
2 22

不加小括号,会按照运算符的优先级,先执行and,id =2 and age=22 再去执行or。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值