首頁 > 資料庫 > mysql教程 > 運算子優先權如何影響 MySQL 查詢中的「OR」和「AND」邏輯?

運算子優先權如何影響 MySQL 查詢中的「OR」和「AND」邏輯?

Susan Sarandon
發布: 2024-12-14 22:10:12
原創
530 人瀏覽過

How Does Operator Precedence Affect MySQL's `OR` and `AND` Logic in Queries?

MySQL OR/AND 優先權

在 MySQL 中,邏輯運算子(例如 OR 和 AND)的運算順序決定了複雜查詢的解釋。本文介紹了優先級規則以及它們如何影響查詢結果。

說明

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), :=
登入後複製

根據對於此優先級層次結構,將解釋以下查詢如下:

SELECT *
FROM tablename
WHERE
    display = 1
    OR (
        display = 2 AND content LIKE "%hello world%"
    )
    OR tags LIKE "%hello world%"
    OR title = "%hello world%"
登入後複製

解釋

上述查詢尋找符合以下任一條件的行:

  • 顯示等於1
  • 顯示等於2 且內容包含「你好世界」
  • 標籤包含「你好world"
  • 標題包含「hello world」

WHERE 子句依下列順序計算:

  1. 先檢查顯示。
  2. 如果 display 不為 1,則計算第二個子查詢。
  3. 在子查詢中,檢查 display 是否與 2 相等。如果為 true,則檢查內容是否為「hello world」。
  4. 最後,評估標籤和標題的其餘子句,並使用 OR 運算子將它們連結起來。

優先問題和解決方案

為了確保明確的解釋,建議明確使用括號。例如:

SELECT *
FROM tablename
WHERE
    ((display = 1) OR (display = 2)) AND
    ((content LIKE "%hello world%") OR (tags LIKE "%hello world%") OR (title LIKE "%hello world%"))
登入後複製

此查詢可確保在滿足以下任何條件時提取行:

  • 顯示等於1 或2
  • 內容,標籤或標題包含“hello world”

以上是運算子優先權如何影響 MySQL 查詢中的「OR」和「AND」邏輯?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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