我正在努力研究SQL查詢是如何運行的,並且遇到了一些絆腳石。查詢表達式優先級的SQL順序
如果where子句類似於下面使用:
A OR B和C
這可能意味着無論是下面
的(A或B)和C
或
A OR(B AND C)
在大多數情況下,結果將是相同的,但如果要查詢的集合僅包含{A},則第一個變體將返回空結果集,第二個將返回{A}。 SQL確實返回1結果。
有誰知道(或有鏈接)任何洞察力,這將幫助我瞭解如何構建查詢?
番茄醬
我正在努力研究SQL查詢是如何運行的,並且遇到了一些絆腳石。查詢表達式優先級的SQL順序
如果where子句類似於下面使用:
A OR B和C
這可能意味着無論是下面
的(A或B)和C
或
A OR(B AND C)
在大多數情況下,結果將是相同的,但如果要查詢的集合僅包含{A},則第一個變體將返回空結果集,第二個將返回{A}。 SQL確實返回1結果。
有誰知道(或有鏈接)任何洞察力,這將幫助我瞭解如何構建查詢?
番茄醬
AND
and OR
有不同的先例。
對於SQL-服務器(這是你的標籤)這裏是優先http://msdn.microsoft.com/en-us/library/ms190276.aspx但.. 如果你擔心給了你確實應該開始()子集工作的確切結果集。
在知識(從文件),其AND
有海格優先級比OR
,你的目標應該是寫謂詞合取範式(「中AND
條款一臺系列」)WHERE
條款。
如果目的是
(A OR B) AND C
那麼這樣寫它,一切都很好。
但是,如果目的是
A OR (B AND C)
話,我建議您應用導致合取範式即
(P AND Q) OR R <=> (P OR R) AND (Q OR R)
在你的情況distributive rewrite law:
A OR (B AND C) <=> (A OR B) AND (A OR C)
燦」 t提供任何鏈接,但我相信它們是左聯想的。換句話說,(A或B)和C。爲了其他程序員(和你自己)的理智,請在這種情況下使用括號。 – Corbin 2012-04-20 10:15:30
謝謝corbin,如果我正在寫它,我會,但是我們正在爲我們的內部網創建一個搜索功能,允許用戶使用「AND」,「OR」和「ANDNOT」運算符執行搜索條件,並且正在努力解決它應該如何編碼 – Ketchup 2012-04-20 10:17:39
@Corbin:這是不正確的。 'AND'在SQL中具有比'OR'更高的優先級(不僅在SQL-Server中,而且在所有SQL方言中)。 – 2012-04-20 11:07:39