【问题标题】:How does WHERE clause work (interchanging LHS and RHS)WHERE 子句如何工作(交换 LHS 和 RHS)
【发布时间】:2013-05-29 03:28:05
【问题描述】:

我在 MySQL 中尝试了以下查询,

select first_name from my_contacts WHERE 'Blunt' = last_name;

而且效果很好。

就像,

select first_name from my_contacts WHERE last_name = 'Blunt';

那么WHERE 子句是如何工作的。我假设当它遇到WHERE 时,它期望它后面跟着一个列名和= 的RHS 和一个值(在这种情况下是一个字符串)。

但似乎即使交换 LHS 和 RHS 也可以。它是否类似于 C 或 C++ 中的 if(a == 1)if(1 == a)(无论是 RHS 还是 LHS)?

注意:如果有链接可以帮助我解决这个问题,请务必包含它们

【问题讨论】:

  • 在查询前使用“解释”,它会解释它
  • 我每天都在这里学习.. =)
  • 其实你可以做WHERE 'a' = 'a'。 WHERE 只接受谓词/条件。相等是对称的,因此您可以在不影响最终结果的情况下切换操作数。

标签: mysql where where-clause


【解决方案1】:

就像编译器对 C 源代码所做的那样,MySQL(或任何数据库)解析查询文本并使用语法树来创建它可以执行的东西,即查询计划。 MySQL 正在逐段弄清楚查询的含义,它使用与任何编程语言一样的语法来试图弄清楚每个部分是什么。正如 Borniet 所说,我们甚至可以在 where 子句中放置一个常量表达式。我们还可以比较两列是否相等。这是因为 MySQL 允许 WHERE 使用任何表达式,其结果可以强制转换为布尔值。

【讨论】:

    【解决方案2】:

    它确实非常类似于 IF 语句:

    WHERE (statement that needs to be true) AND (a = 1) OR (B = 2)
    

    所以你也可以这样做:

    WHERE 1
    

    【讨论】:

      猜你喜欢
      • 2021-06-27
      • 1970-01-01
      • 1970-01-01
      • 2018-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多