MySQL中的 SELECT ‘a’=’b’=’c’ 返回1的原因
在MySQL中,我们经常会碰到一些奇怪的查询语句,比如 SELECT ‘a’=’b’=’c’,是什么意思呢?更奇怪的是,这条语句的返回值居然是1。在本文中,我们将介绍这条语句的执行过程以及返回值为什么是1。
阅读更多:MySQL 教程
操作符的优先级
为了明白为什么 SELECT ‘a’=’b’=’c’ 返回1,我们需要先了解一下MySQL中操作符的优先级。在MySQL中,操作符的优先级由高到低依次为:
- !
- -(单目减号)
- **(幂运算)
- *、/、%
- +、-
- <<、>>
- &
- |
- =、<>、>、>=、<、<=、LIKE、IN、BETWEEN、IS NULL、IS NOT NULL、REGEXP
- NOT、AND、OR
- :=
我们可以看到,优先级最高的是!,优先级最低的是 :=。
链式操作符
在了解操作符的优先级之后,我们来看 SELECT ‘a’=’b’=’c’ 具体是怎么执行的。首先,我们需要知道,= 操作符是左结合的,也就是说 SELECT ‘a’=’b’=’c’ 相当于 SELECT (‘a’=’b’)=’c’。
那么 SELECT (‘a’=’b’)=’c’ 又相当于什么呢?这里我们需要了解一下链式操作符的概念。链式操作符是指操作符可以依次进行多次比较而不需要拆分多个条件。在SELECT ‘a’=’b’=’c’中,=操作符就是一个链式操作符,它将多个比较串联起来,不需要用括号分开。
那么这个链式操作符具体是怎么执行的呢?我们可以将 SELECT (‘a’=’b’)=’c’ 拆分成两步来看:
- SELECT (‘a’=’b’) 这里先比较 a 和 b 是否相等,如果相等,返回1,不等,返回0。
- SELECT 1=’c’ 这里将1和c进行比较,返回0或1。
由于在MySQL中0和1分别代表False和True,所以 SELECT ‘a’=’b’=’c’ 返回1,意味着a=b=c为True,也就是说a、b、c三个变量的值都相等。
示例说明
为了更好地理解以上所述,我们来看几个示例:
示例1
该查询返回0。
这里先比较1和2是否相等,结果为False,然后将False和3进行比较,结果为False,最终返回0。
示例2
该查询返回1。
这里可以看出多个比较都为True,结果为True,最终返回1。
示例3
该查询返回0。
这里先比较1和2是否相等,结果为False,然后将False和2进行比较,结果为False,最终返回0。
总结
在MySQL中,=操作符是左结合的链式操作符,可以串联多次比较而不需要拆分多个条件。对于这种操作符,我们需要注意操作符的优先级,以免出现意想不到的结果。