SQL邏輯運算子優先權:AND和OR
問題:
考慮以下SQL語句:
<code class="language-sql">SELECT [...] FROM [...] WHERE some_col IN (1,2,3,4,5) AND some_other_expr</code>
和
<code class="language-sql">SELECT [...] FROM [...] WHERE some_col IN (1,2,3) OR some_col IN (4,5) AND some_other_expr</code>
這兩個語句等價嗎?如果不等價,我們如何決定它們的優先順序?
答案:
AND和OR運算符的優先權
在SQL中,運算子優先權決定了WHERE子句中邏輯運算子的計算順序。 AND和OR運算符的優先權如下:
這表示即使AND運算子出現在OR運算子的右側,也會優先計算。
將優先權套用在語句
在給定的語句中:
因此,第二個語句會以以下方式計算:
<code class="language-sql">WHERE (some_col IN (1,2,3)) OR (some_col IN (4,5) AND some_other_expr)</code>
真值表驗證
這是一個真值表,用來說明計算差異:
some_col | some_other_expr | 语句 1 | 语句 2 |
---|---|---|---|
1 | 0 | False | True |
2 | 1 | True | True |
3 | 0 | False | True |
4 | 0 | False | False |
5 | 1 | False | True |
如我們所見,這兩個語句的真值在第一行有所不同,這表示它們不等價。
使用括號來覆蓋優先權
如果要更改計算順序,可以使用括號來覆蓋預設優先權。例如,要使第二個語句與第一個語句等價,需要將其寫如下:
<code class="language-sql">WHERE (some_col IN (1,2,3) OR some_col IN (4,5)) AND some_other_expr</code>
以上是SQL 的「AND」和「OR」運算子是否有不同的優先權?的詳細內容。更多資訊請關注PHP中文網其他相關文章!