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

时间:2013-05-23 06:57:00

标签: 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子句如何工作。我假设当它遇到WHERE时,它期望它后跟一个列名和=的RHS值(在这种情况下是一个字符串)。

但它似乎甚至可以互换LHS和RHS。它与C或C ++中的if(a == 1)if(1 == a)类似(无论哪个是RHS或LHS)?

注意:如果有链接可以帮助我解决这个问题请填写

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

它确实与IF声明相当:

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

所以你也可以这样做:

WHERE 1