我在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)?
注意:如果有链接可以帮助我解决这个问题请填写
答案 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