MySQL OR 和 AND 混用的坑 优先级

先在Mysql中插入4条数据,如下:
在这里插入图片描述
现在要查询 名字叫张三或者李四,且年龄为18 的数据。
根据需求编写sql语句并执行,应该查出2条数据,可执行结果如下:
在这里插入图片描述
查出3条数据,多出一条 名字叫张三,年龄为20 的数据。


分析:

主要原因在于——MySQL中,AND的执行优先级高于OR,优先执行AND,并不是编写顺序执行。

where name = '张三' or name = '李四' and age = 18

对于以上的条件sql,MySQL会默认优先执行 name = ‘李四’ and age = 18 ,再把得到的结果与 name = ‘张三’ 执行or操作。
含义相当于:查询 名字叫李四 且 年龄为18 或者 名字叫张三 的数据。
这种默认执行,会把 名字叫张三 的数据全部查询出来,所以多出一条数据,并不准确。

解决:

用括号()把条件组合起来以改变MySQL执行顺序。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值