2011-08-01 78 views
0

可能重複:
Is the SQL WHERE clause short-circuit evaluated?SQL中的AND語句是否總是被執行?

如果我們這樣做

SELECT * FROM Business WHERE Latitude < 9 AND Latitude > 10 

例如,將Latitude > 10永遠是如果緯度是8例如叫什麼名字?

在mysql中怎麼樣?

核心數據呢?

它依賴於SQL的實現還是有一個明確的標準,在where子句中,如果AND語句之一是false,其餘的將不會執行。

我問了這個問題是否可以節省一些計算能力。說第一個AND之後的表達式計算昂貴,比如計算距離。

+1

它爲什麼重要? –

+0

評估'和'運算符的兩側。在你的例子中,查詢永遠不會返回任何行,因爲一個值不能少於9,同時超過10。 (我剛剛在MySQL中對此進行了驗證。) – Guffa

回答

1

警告:樸實的回答

你可能錯了,並用OR(其實條件Latitude < 9 AND Latitude > 10是沒有意義的。)。在大多數語言中,這是爲實現

  • 或結合 AFAIK如下:每次檢查條件,直到有一個爲真(我相信這也是與SQL如此 - 編輯this answer表明,實際的行爲是實現依賴,即你可以不採取一定能在任何RDBMS)
  • 和結合每次檢查條件,直到一個是假的

所以你可能想寫這個條件:

Latitude < 9 OR Latitude > 10 

這相當於:

NOT(Latitude >= 9 AND Latitude <= 10) 
+1

緯度<9或緯度> 10等於:NOT(緯度> = 9且緯度<= 10) – niktrs

+0

謝謝,更正 – ascanio

+1

小評論:不是,不等於通常會傷害到性能,所以「緯度<9緯度> 10」更爲可取 – niktrs