MySQL逻辑运算符使用疑惑:AND与OR查询结果差异解析
为什么
AND 1和OR 1在SQL查询中返回不同结果? 这个问题核心是对SQL WHERE子句的逐行评估逻辑理解有偏差,我来给你拆解清楚:
1. 先看AND 1的情况
执行语句:select * from users where name='admin1' AND 1;
你可能误以为整个表达式直接变成1 AND 1(结果为真),但SQL的逻辑是对表中的每一条记录单独计算条件:
- 对于
name='admin1'的行:name='admin1'的结果是TRUE,加上AND 1(1在SQL中被视为布尔真),整个表达式结果为TRUE AND TRUE = TRUE,所以这行被返回。 - 对于其他行:
name='admin1'的结果是FALSE,FALSE AND TRUE = FALSE,所以这些行不会被返回。
最终就只返回了admin1的记录。
2. 再看OR 1的情况
执行语句:select * from users where name='admin1' OR 1;
同样是逐行计算,但OR逻辑的规则是只要任意一个条件为真,整个表达式就为真:
- 不管当前行的
name是什么,1始终是布尔真,所以name='admin1' OR TRUE的结果永远是TRUE。 - 表中每一行的条件评估结果都是真,自然就返回了所有记录。
关键总结
SQL的WHERE子句不是对整个表做一次表达式求值,而是遍历表中的每一条记录,针对每条记录单独计算条件表达式的布尔结果,只有结果为真的记录才会被筛选出来。这就是两个看似相似的表达式返回不同结果的根本原因。
内容的提问来源于stack exchange,提问作者qre0ct
相关产品推荐
相关产品推荐

