You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:03:17