为何SQL中OR条件失效而AND条件正常?非元音结尾城市查询问题
为什么OR条件不对,AND条件才正确?
核心原因是逻辑运算符的规则差异,我们先明确需求:要筛选出不以A/E/I/O/U中任何一个元音结尾的城市,且去重。
先看OR条件的查询逻辑
SELECT DISTINCT CITY FROM STATION WHERE (CITY NOT LIKE'%A' OR CITY NOT LIKE'%E' OR CITY NOT LIKE'%I' OR CITY NOT LIKE'%O' OR CITY NOT LIKE'%U');
OR的逻辑是「只要满足其中一个条件就会被选中」。举个例子:
- 如果有个城市叫
New York(以k结尾,符合需求),它会被选中,没问题; - 但如果有个城市叫
Atlanta(以A结尾,应该被排除),它虽然不满足NOT LIKE '%A',但它满足NOT LIKE '%E',所以OR条件会把它也选进来——这就不符合我们要排除所有元音结尾城市的需求了。
换句话说,OR条件下,只要城市不是同时以所有元音结尾(这根本不可能),都会被选中,最终结果会包含所有城市,完全达不到筛选目的。
再看AND条件的查询逻辑
SELECT DISTINCT CITY FROM STATION WHERE (CITY NOT LIKE'%A' AND CITY NOT LIKE'%E' AND CITY NOT LIKE'%I' AND CITY NOT LIKE'%O' AND CITY NOT LIKE'%U');
AND的逻辑是「必须同时满足所有条件才会被选中」。这就要求城市:
- 不以A结尾,并且不以E结尾,并且不以I/O/U结尾——也就是城市的最后一个字母完全不在元音列表里,正好符合我们的需求。
总结
要排除「属于某一类中的任意一个」的情况,必须用AND来组合多个NOT LIKE条件;如果用OR,逻辑就变成了「只要不属于某一类中的某一个就保留」,完全偏离了筛选目标。
内容的提问来源于stack exchange,提问作者Rishav kumar
相关产品推荐
相关产品推荐

