为什么以下SQL查询显示结果?
SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20;
但是当我们更改值的顺序时,它不会显示任何结果?
SELECT * FROM Products
WHERE Price BETWEEN 20 AND 10;
答案 0 :(得分:3)
SELECT * FROM Products
WHERE Price BETWEEN 20 AND 10;
转换为
SELECT * FROM Products
WHERE Price >= 20 AND Price <= 10;
答案 1 :(得分:3)
如果test_expression的值大于或等于begin_expression的值且小于或等于end_expression的值,则BETWEEN返回TRUE。 如果test_expression的值小于begin_expression的值或大于end_expression的值,则NOT BETWEEN返回TRUE。
在您的情况下,您的语句评估为
greater than or equal to 20 AND less than or equal to 10
答案 2 :(得分:1)
因为订单很重要。来想一想:
x BETWEEN a AND b
相当于
a <= x AND x <= b
如果a > b
,这永远不会成真。
换句话说,要使BETWEEN
有用,您必须确保a <= b
。
答案 3 :(得分:0)
MSDN reference page for T-SQL's BETWEEN
operator说:
test_expression [ NOT ] BETWEEN begin_expression AND end_expression
[...]
BETWEEN
如果 test_expression 的值大于或等于 begin_expression 的值且小于或等于,则返回TRUE
等于 end_expression 的值。
因此,您所观察到的内容遵循以下定义:由于Price
同时不能同时≥20且≤10,因此永远不会满足条件,因此会过滤掉所有记录。 (另一方面,Price
可能≥10且≤20,因此在这种情况下可能会有结果,具体取决于您的数据。)