2014-04-23 108 views
4

爲什麼以下SQL查詢顯示結果?SQL BETWEEN反向順序中的運算符條件值

 SELECT * FROM Products 
    WHERE Price BETWEEN 10 AND 20; 

但是當我們改變價值的順序它不會顯示任何結果?

+1

@MinhD:看看問題的標籤。 – stakx

+0

實際上,這個問題對於任何DBMS都有相同的答案。 – mvp

+0

@stakx:實際上,這個問題沒有任何標籤一見鍾情:) – MinhD

回答

3
SELECT * FROM Products 
WHERE Price BETWEEN 20 AND 10; 

轉化爲

SELECT * FROM Products 
WHERE Price >= 20 AND Price <= 10; 
0

因爲順序很重要。試想想它:

x BETWEEN a AND b 

相當於

a <= x AND x <= b 

如果a > b,這不可能是真的。

換句話說,對於BETWEEN有任何用處,您必須確保a <= b

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

+0

http://technet.microsoft.com/de-de/library/ms187922.aspx – DrCopyPaste

0

MSDN reference page for T-SQL's BETWEEN operator說:

test_expression [ NOT ] BETWEEN begin_expression AND end_expression 

[...] BETWEEN回報TRUE如果與test_expression的值大於或等於begin_expression的值且小於或等於的值end_表達式

那麼你正在觀察從定義如下:由於沒有Price既可以是≥20和≤10在同一時間,條件永遠都無法滿足的,因此所有記錄都被過濾掉。 (另一方面,它可能爲Price都≥10和≤20,所以可能會在這種情況下,根據您的數據的結果。)