首頁 > 資料庫 > mysql教程 > SQL AND/OR 運算子優先權:這些 SQL 語句是否等效?

SQL AND/OR 運算子優先權:這些 SQL 語句是否等效?

Barbara Streisand
發布: 2025-01-22 21:46:10
原創
514 人瀏覽過

SQL AND/OR Operator Precedence: Are These SQL Statements Equivalent?

SQL 邏輯運算子優先權:理解 AND 和 OR 的層次結構

在 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”,這意味著表達式 some_col in (1,2,3,4,5) AND some_other_expr 首先被評估,然後該評估的結果再應用於 OR 運算符。

為了說明這一點,請考慮以下範例:

<code class="language-sql">Declare @x tinyInt = 1
Declare @y tinyInt = 0
Declare @z tinyInt = 0

Select Case When @x=1 OR @y=1 And @z=1 Then 'T' Else 'F' End -- 输出 T
Select Case When (@x=1 OR @y=1) And @z=1 Then 'T' Else 'F' End -- 输出 F</code>
登入後複製

第一個語句評估 @x=1 OR @y=1 And @z=1,結果為“T”,因為表達式 @y=1 And @z=1 傳回“False”。然後,「OR」運算子將此結果與「@x=1」(為「True」)組合,最終輸出「T」。

但是,第二個語句對 (@x=1 OR @y=1) And @z=1 的評估方式不同。 “OR”運算子首先組合“@x=1”和“@y=1”,它們都為“True”,結果為“True”。然後,這個「True」結果與「@z=1」(為「False」)進行評估,最終輸出「F」。

因此,評估順序很重要,可以使用括號來覆蓋優先規則。為了讓這兩個語句等效,可以加上括號,如下所示:

<code class="language-sql">SELECT [...]
FROM [...]
WHERE (some_col in (1,2,3) or some_col in (4,5)) AND some_other_expr</code>
登入後複製

對於那些尋求有關 SQL 中邏輯運算符優先級的更多參考資料的人,建議參考以下資源:

  • Microsoft Transact-SQL 運算子優先權
  • Oracle MySQL 9 運算子優先權
  • Oracle 10g 條件優先權
  • PostgreSQL 運算子優先權
  • SQLite 理解的 SQL

以上是SQL AND/OR 運算子優先權:這些 SQL 語句是否等效?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板