sql中and和or的优先级问题

看一个例子,数据表如下:

现在需要查询年龄30岁,地址是北京或者上海的用户信息。

看sql-1:

SELECT * FROM users WHERE age=30 AND address='北京' OR address='上海'

查询结果为:

看sql-2:SELECT * FROM users WHERE age=30 AND (address='北京' OR address='上海')

查询结果为:

总结:

第一个查询结果是不对的,我们要查的是年龄30,地址是北京或者上海的用户,第一个查询结果中出现了年龄40的用户。出现问题的原因是and和or的运算优先级问题。AND的运算优先级高于OR,所以实际执行的是:

  • age=30 AND address='北京' :年龄30的北京用户(结果的第1条记录) ;
  • OR address='上海' :或者上海的用户(结果的第2、3条记录),于是出现了上述结果。

解决办法:

通过加入()来调整他们的优先级,让OR先执行,再进行AND。其实和我们小时候学的四则运算法则(优先级)是一样的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值