场景
有一张表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版权协议,转载请附上原文出处链接和本声明。