首页 > 数据库 > mysql教程 > 运算符优先级如何影响 MySQL 查询中的'OR”和'AND”逻辑?

运算符优先级如何影响 MySQL 查询中的'OR”和'AND”逻辑?

Susan Sarandon
发布: 2024-12-14 22:10:12
原创
529 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板