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

为何SQL语句`20 >= price < 500`不报错?实际执行逻辑是什么?

为什么20 >= price < 500这种SQL语句不报错,实际执行逻辑是什么?

多数常用SQL数据库(比如MySQL、PostgreSQL)都支持连续比较的语法,这其实是符合SQL标准的写法,但它的执行逻辑和你直觉里的范围判断完全不同:

  • 执行顺序拆解
    数据库会从左到右逐步计算表达式:

    1. 先算20 >= price,得到布尔结果——SQL里布尔值会自动转成数值,TRUE对应1,FALSE对应0。
    2. 再拿第一步得到的1或0,和500比较,也就是判断(20 >= price) < 500。
  • 实际等价效果
    因为1和0都小于500,所以不管20 >= price是真还是假,整个表达式的结果永远是TRUE,最终会返回表中所有记录——这就是它和你预期的price >=20 AND price <500结果不符的原因。

如果要筛选价格在[20, 500)区间的记录,必须用AND明确连接两个条件,也就是你给出的正确写法:

SELECT item 
FROM inventory 
WHERE price >= 20 AND price < 500;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 22:43:14