我有一個SQL查詢,我有點困惑WHERE子句中的哪些條件先執行。你可以給我執行WHERE子句時涉及的步驟嗎?這裏是我的查詢。SQL與AND或OR Prededence
select * from table where a='a' OR b='b' OR c='c' AND d='d';
我有一個SQL查詢,我有點困惑WHERE子句中的哪些條件先執行。你可以給我執行WHERE子句時涉及的步驟嗎?這裏是我的查詢。SQL與AND或OR Prededence
select * from table where a='a' OR b='b' OR c='c' AND d='d';
這是運算符優先級list
從MySQL文檔
INTERVAL
BINARY, COLLATE
!
- (unary minus), ~ (unary bit inversion)
^
*, /, DIV, %, MOD
-, +
<<, >>
&
|
= (comparison), <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN
BETWEEN, CASE, WHEN, THEN, ELSE
NOT
&&, AND
XOR
||, OR
= (assignment), :=
因此和比OR更高的優先級。
您需要推動括號以避免模棱兩可。這將有助於可讀性,但它會沒有他們
SELECT *
FROM table
WHERE a='a' OR b='b' OR (c='c' AND d='d');
AND
擁有OR
高優先級工作正常。
參考:
MySQL: Operator Precedence
運算符優先顯示在下面的列表,從最高優先級到最低。一起顯示在一行上的運算符具有相同的優先級。
&&, AND
XOR
||, OR
從MySQL文檔:
AND
具有更高的優先級,從而,這將首先評估。
通常更喜歡使用大括號來顯示優先級。這使查詢更易讀:
select * from table where a='a' OR b='b' OR (c='c' AND d='d');
對於SQL Server,在WHERE子句中沒有固定的執行順序。在創建執行計劃之前,這由SQL Query optimizer決定。
Ofcourse,你可以強制使用括號以特定的順序這是一個推薦的做法 混合多個AND/OR條件
時,試試這一個
select * from table where d='d' and (a='a' OR b='b' OR c='c');
是阿南德似乎是因爲你是正確的要求SQL返回其中B ='b'的任何東西,但只有在a = a或b = b或c = c匹配時才顯示結果,則:
WHERE d ='d'子句需要請求WHERE子句如下:
select * from table where d='d' and (a='a' OR b='b' OR c='c');
會給你你需要的結果。
感謝
有疑問時,可使用括號'()' –
即使毫無疑問的,你應該總是使用括號當你混合'ANDs'和'ORs' –