首頁 > 資料庫 > mysql教程 > MySQL 如何評估「WHERE」子句中的「OR」和「AND」運算子?

MySQL 如何評估「WHERE」子句中的「OR」和「AND」運算子?

DDD
發布: 2024-12-10 22:17:11
原創
333 人瀏覽過

How Does MySQL Evaluate `OR` and `AND` Operators in `WHERE` Clauses?

MySQL OR/AND 優先權

MySQL 的邏輯運算子具有特定的優先權規則,規定如何在查詢中評估多個條件。了解這些規則對於制定高效且準確的查詢至關重要。

關於您的查詢,您希望檢索 display 為 1 或 2 以及任何內容、標籤或標題包含「hello world」的行。 MySQL 運算子的優先權規則是:

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

考慮到這些規則,讓我們分析您的查詢:

Select * from tablename where display = 1 or display = 2 and content like "%hello world%" or tags like "%hello world%" or title = "%hello world%"
登入後複製

根據優先權規則,邏輯運算子在括號內進行計算:

  • 內括號: (顯示= 1) 或(display = 2) 確保檢索顯示為 1 或 2 的行。
  • 外括號: ((display = 1) 或(display = 2)) 和( content like "%hello world%") 或 (tags like "%hello world%")或 (title like "%hello world%")定義符合「hello」的條件world."

由於OR 優先於AND,查詢將被解釋如下:

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並且
  • 任何內容、標籤或標題包含「hello world."

為了避免混淆,建議使用括號來明確指示所需的評估順序。顯示為1 或2 的行,或任何內容、標籤或標題包含「hello world」的行:

Select * from tablename where (display = 1 or display = 2) and (content like "%hello world%" or tags like "%hello world%" or title like "%hello world%")
登入後複製

以上是MySQL 如何評估「WHERE」子句中的「OR」和「AND」運算子?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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