Mysql WHERE子句如何工作(LHS和RHS互换)

Mysql WHERE子句如何工作(LHS和RHS互换),mysql,where,where-clause,Mysql,Where,Where Clause,我在MySQL中尝试了以下查询 select first_name from my_contacts WHERE 'Blunt' = last_name; 而且效果很好 就是 select first_name from my_contacts WHERE last_name = 'Blunt'; 那么WHERE子句是如何工作的呢。我假设当它遇到一个,其中时,它希望它后面跟一个列名,RHS的=后面跟一个值(在本例中是一个字符串) 但似乎连左舵和右舵的互换都没问题。在C或C++中(如果是RHS

我在MySQL中尝试了以下查询

select first_name from my_contacts WHERE 'Blunt' = last_name;
而且效果很好

就是

select first_name from my_contacts WHERE last_name = 'Blunt';
那么
WHERE
子句是如何工作的呢。我假设当它遇到一个
,其中
时,它希望它后面跟一个列名,RHS的
=
后面跟一个值(在本例中是一个字符串)

但似乎连左舵和右舵的互换都没问题。在C或C++中(如果是RHS或LHS),(如果A==1)< /代码> <代码> >如果(1=A)< /代码>(
注意:如果有可以帮助我解决这一问题的链接,请务必将其包括在内

这确实非常类似于If声明:

WHERE (statement that needs to be true) AND (a = 1) OR (B = 2)
所以你也可以做:

WHERE 1

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

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