当查询的WHERE
子句中使用“链式不等式”语法时,MySQL不会抱怨,但产生的结果与使用适当语法编写的类似精神的查询不同。那么它实际运行的是什么查询以及应用了哪些约束?为什么不产生错误?
一个简单的例子:假设我在MySQL数据库中有一个名为User的表,其中有一个名为score
的属性。
我可以使用链式不等式语法编写以下表单的查询:
SELECT *
FROM User
WHERE 10 < score < 15;
并使用正确的语法查询以下表单:
SELECT *
FROM User
WHERE score > 10 AND score < 15;
有不同的结果。
重复问题:
答案 0 :(得分:2)
对于在同一优先级内出现的运算符 表达式,评估从左到右进行,但例外情况除外 作业从右到左评估。
MySQL会将其评估为:
WHERE (10 < score) < 15
由于MySQL将布尔值视为数字上下文中的数字,因此括号内部分将变为0或1(如果NULL
为score
,则为NULL
)以进行后续比较。所以,结果总是如此。
我相信这解释了为什么MySQL不会产生错误以及为什么你会得到不同的结果。
您可以使用AND
获得各种选项,但这是典型的:
WHERE score > 10 AND score < 15