MySQL链式不等式

时间:2016-10-24 14:18:48

标签: mysql sql

当查询的WHERE子句中使用“链式不等式”语法时,MySQL不会抱怨,但产生的结果与使用适当语法编写的类似精神的查询不同。那么它实际运行的是什么查询以及应用了哪些约束?为什么不产生错误?

一个简单的例子:假设我在MySQL数据库中有一个名为User的表,其中有一个名为score的属性。

我可以使用链式不等式语法编写以下表单的查询:

SELECT *
FROM User
WHERE 10 < score < 15;

并使用正确的语法查询以下表单:

SELECT *
FROM User
WHERE score > 10 AND score < 15;

有不同的结果。

重复问题:

  1. 链式不等式实际上运行了什么查询? (具体来说,应用了哪些约束?)
  2. 为什么MySQL不会产生错误?

1 个答案:

答案 0 :(得分:2)

根据documentation

  

对于在同一优先级内出现的运算符   表达式,评估从左到右进行,但例外情况除外   作业从右到左评估。

MySQL会将其评估为:

WHERE (10 < score) < 15

由于MySQL将布尔值视为数字上下文中的数字,因此括号内部分将变为0或1(如果NULLscore,则为NULL)以进行后续比较。所以,结果总是如此。

我相信这解释了为什么MySQL不会产生错误以及为什么你会得到不同的结果。

您可以使用AND获得各种选项,但这是典型的:

WHERE score > 10 AND score < 15