两段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
相关产品推荐
相关产品推荐

