MySQL OR 和 AND 混用的坑 优先级

Posted 星丶空LTL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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执行顺序。

以上是关于MySQL OR 和 AND 混用的坑 优先级的主要内容,如果未能解决你的问题,请参考以下文章

MySQL OR 和 AND 混用的坑 优先级

Elasticsearch之es学习工作中遇到的坑(陆续更新)

美团一面:@Transactional 原理和常见的坑?

美团一面:@Transactional 原理和常见的坑?

使用HashSet去重的坑

and和or的优先级