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

两段SQL查询代码的差异解析及括号内OR逻辑疑问

两段SQL查询结果差异的原因

先看你给出的两段SQL:
第一段:

select sex, id from qualification where cid = ('Male' or 'Female')

第二段:

select sex, id from qualification where cid = 'Male' or cid = 'Female'

核心差异原因

第一段的写法逻辑完全错误,导致返回所有数据:

  • 括号里的'Male' or 'Female'会被SQL先执行布尔运算。在SQL中,非空字符串会被视为布尔值True,所以'Male' or 'Female'的运算结果是True(部分数据库会转成数值1)。
  • 之后条件变成cid = True,大多数数据库会把非空、非0的cid值都判定为等于True,相当于整个WHERE条件恒成立,自然会返回表中所有数据。

第二段是正确的逻辑:

  • 分别判断cid等于'Male'或者'Female',只有满足其中一个条件的行才会被返回,符合预期需求。

额外建议

如果要判断字段是否属于多个值,还可以用更简洁的IN写法,效果和第二段完全一致:

select sex, id from qualification where cid IN ('Male', 'Female')

内容的提问来源于stack exchange,提问作者anxiousaccountant

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 21:45:34