6.2.3 AND、OR運算子的組合使用
在WHERE子句中,通過AND、OR運算子可以同時串連多個條件,當然AND、OR運算子也可以同時使用。但是當AND、OR運算子同時存在時,其優先順序如何確定呢?與大多數語言一樣,SQL語言認為AND運算子的運算層級要高於OR運算子。即當出現
condition1 OR condition2 AND condition3 |
時,其運算實際上是等價於
condition1 OR (condition2 AND condition3) |
.因此,AND、OR運算子需要同時使用時,一定要注意運算子的優先順序。
執行個體5 同時使用AND、OR運算子實現查詢
假如需要查詢所有電腦系和生物系中,且工資收入(SAL)超過1000的教師的姓名(TNAME)、系(DNAME)、工資(SAL)資訊。如果採用如下SQL代碼:
SELECT TNAME, DNAME, SAL FROM TEACHER WHERE DNAME='電腦' OR DNAME='生物' AND SAL>1000 ORDER BY SAL |
.運行結果6.5所示。
|
圖6.5 電腦系或者生物系中工資大於1000的教師 |
很顯然沒有得到預期的計算結果,這是因為AND運算子的運算層級要高於OR運算子,代碼實際上實現的查詢是電腦系的所有教師以及生物系中的工資大於1000的教師的相關資訊。要實現例中需要的查詢結果,正確的SQL代碼為:
SELECT TNAME, DNAME, SAL FROM TEACHER WHERE (DNAME='電腦' OR DNAME='生物') AND SAL>1000 ORDER BY SAL |
運行結果6.6所示。
可以發現,當在OR運算子串連的兩個條件加上括弧( )後,得到了需要的查詢結果。這是因為,括弧( )的優先順序高於AND運算子,執行過程就先於AND運算子。
注意 當OR運算子和AND運算子同時運用時,建議使用者不要考慮其預設的優先順序順序,而是採用括弧( )來實現需要的執行順序,這樣可以增強程式的可讀性。