2

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

select first_name from my_contacts WHERE 'Blunt' = last_name;

它工作正常。

就像,

select first_name from my_contacts WHERE last_name = 'Blunt';

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

但似乎即使交换 LHS 和 RHS 也可以。它与 C 或 C++ 相似if(a == 1)还是if(1 == a)在 C 或 C++ 中(RHS 或 LHS 无关紧要)?

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

4

2 回答 2

2

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

于 2013-05-23T07:04:48.200 回答
1

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

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

所以你也可以这样做:

WHERE 1
于 2013-05-23T07:01:37.073 回答