当前位置: 首页 > 面试题库 >

在带/不带括号的MySQL语句中使用OR到底有何不同?

法弘亮
2023-03-14
问题内容

我有这个查询:

SELECT * FROM (`users`) WHERE `date_next_payment` <= '2011-02-02' 
    AND `status` = 'active' OR `status` = 'past due'

哪个不会返回正确的结果。但是,在“或”条件周围加上括号可使其工作如下:

SELECT * FROM (`users`) WHERE `date_next_payment` <= '2011-02-02'
    AND (`status` = 'active' OR `status` = 'past due')

我的问题是为什么与众不同?我知道这是在考虑不带括号的OR语句;但我不知道它有什么不同。

我尚未找到任何对此有所帮助的文档。如果有任何链接,我将非常感谢。


问题答案:

这是因为OR的 运算符优先级 低于AND。每当DB看到类似

A AND B OR C

首先评估AND,即等于

(A AND B) OR C

因此,如果您明确想要

A AND (B OR C)

相反,您必须在括号中加上括号。

顺便说一句,这并非特定于SQL。在我所知道的所有编程语言(即至少C,C ++,C#,Java和Unix Shell脚本)中,这些运算符的优先顺序是相同的。



 类似资料:
  • 本文向大家介绍在MySQL中使用带有TINYINT的Update语句?,包括了在MySQL中使用带有TINYINT的Update语句?的使用技巧和注意事项,需要的朋友参考一下 让我们首先创建一个表。我们已将其中一列设置为TINYINT类型- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 这是使用TINYINT实现UPDATE语句的查询- 让我们再次

  • 问题内容: 我还没有找到任何官方文档。但是afaik,是否在没有括号的情况下使用我们的类实例化没有关系-只要不涉及参数,对吗? 要么 但是谁能告诉我性能是否有所不同?“更正确”的方法是哪一种?有任何官方文件吗? 问题答案: 性能上的任何差异将绝对可以忽略。 虽然这两种方式都很好,我个人更喜欢使用 ,因为通常情况下,一个方法 是 正在这里所说的,和PHP函数/方法调用时需要。而且,它与带有参数的实例

  • 问题内容: 我注意到,如果使用许多不带括号的DataFrame函数,其行为似乎类似于“属性”,例如 这是如何完成的,是一种好的做法?这是Linux上的熊猫0.15.1 问题答案: 它们是不同的,因此不建议使用,它们清楚地表明这是一种方法并且恰好输出结果,而另一种则表明了预期的输出。 这就是为什么您不应该这样做的原因: 所以好吧,您没有使用括号正确地调用该方法并看到显示为有效的输出,但是如果您引用了

  • 问题内容: 假设我们在Python 3.x中(我猜在Python 2.6和Python 2.7中也)具有以下功能: 如果运行它们,我们将得到: 这三个函数提供相同的结果(值和类型),它们似乎是等效的。 但是,其中哪个陈述更正确? 这些定义中是否有副作用? 相同的问题适用于以下情况,并返回了多个值: 在这种情况下,每个函数都返回一个 元组 ,但是我的问题仍然保持不变。 问题答案: Python中的括

  • 问题内容: 我正在尝试将SQL与Python中准备好的语句一起使用。Python对此没有自己的机制,因此我尝试直接使用SQL: 然后,在循环中: 在循环中,我得到: 这是怎么回事? 问题答案: 例如,在http://zetcode.com/db/mysqlpython/上解释了如何在Python中使用MySQL准备好的语句- 在该页面中查找。 在您的情况下,例如: 然后,将其放入循环中: 无需进一

  • 问题内容: 今天有人告诉我,可以不带括号地调用一个函数。我能想到的唯一方法是使用类似或的函数。 但是,这些都需要加上括号,然后放在第一个平方上。我还考虑了将函数传递给某种事件处理程序的想法,例如: 但是,问题就变成了“如何在没有括号的情况下调用?” 那么这个谜题的解决方案是什么?如何在不使用括号的情况下调用Javascript函数? 问题答案: 有多种不带括号的函数调用方法。 假设您已定义此函数: