MySQL的查询条件同时出现and和or时的使用

MySQL的查询条件同时出现and和or时的使用

场景

有一张表user,表中有9条数据。现在想要查询出来字段version值为1或者字段deleted值为1并且字段name为空的数据。
在这里插入图片描述
在这里插入图片描述

查询语句

这是一个非常简单的SQL语句,仅仅使用or和and作为where条件即可。

SELECT * FROM USER WHERE deleted='1' OR VERSION='1' AND NAME IS NULL

查询结果如下:
在这里插入图片描述
我们不难发现,此结果并不符合我们的预期,这是为什么呢?

语句分析

在这个查询结果可以看出,此条SQL首先执行了version='1' and name is null语句,后再执行deleted='1' or语句。由此可见,and的优先级是比or优先级高的,那么我们是如何解决这个问题的呢?
在这里插入图片描述
在这里插入图片描述

问题解决

我们现在是要查询version=1或deleted=1的数据,后再找出符合这些条件的结果中name为空的数据即可。
在这里插入图片描述
我们只需要保证SQL在执行的时候or语句先执行即可。也就是说,要将or语句看做是一个整体,让其先执行就OK了。
在这里插入图片描述
由此可见,()的优先级是高于and的,先执行()再执行and。


版权声明:本文为qq_50994235原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。