首页 >数据库 >mysql教程 >MySQL 如何评估'WHERE”子句中的'OR”和'AND”运算符?

MySQL 如何评估'WHERE”子句中的'OR”和'AND”运算符?

DDD
DDD原创
2024-12-10 22:17:11338浏览

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%") or (tags like "%hello world%") or (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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn