mysql链式_MySQL中的链式比较得到了意想不到的结果

这篇博客详细解释了SQL SELECT-WHERE查询的工作方式,通过伪代码展示了如何遍历和评估每一行数据以确定是否满足WHERE条件。文章中提到了字符串在SQL中的比较规则,以及复杂的WHERE条件链式解决过程,并通过示例查询演示了这些概念。最终,通过一个具体的查询示例,说明了如何根据WHERE条件匹配和筛选数据。
摘要由CSDN通过智能技术生成

首先,感谢您提出这个有趣的问题.我喜欢玩这个.让我们开始回答:

了解其工作原理的先决条件

了解SELECT-WHERE查询

这很明显,但我正在为每个程序员做出这个答案,即使你真的不知道SQL是如何工作的. SELECT-WHERE查询,基本上:

>循环受查询影响的每一行

>使用该特定行的值评估where_condition.

>如果where_condition结果为TRUE,则会列出.

伪代码可以是:

for every row:

current values = row values # for example: username = 'anonymous'

if (where_condition = TRUE)

selected_rows.append(this row)

几乎每个字符串都等于0(或FALSE)

除非字符串是数字(‘1′,’423′,’ – 42′)或字符串以数字开头,否则每隔一个字符串等于0(或FALSE). “数字字符串”等于其等效数字,“起始数字字符串”等于其初始数字.提供一些例子:

MySQL的> SELECT’a’= 0;

+---------+

| 'a' = 0 |

+---------+

| 1 |

+---------+

1 row in set, 1 warning (0.00 sec)

.

mysql> SELECT 'john' = 0;

+------------+

| 'john' = 0 |

+------------+

| 1 |

+------------+

1 row in set, 1 warning (0.00 sec)

.

mysql> SELECT '123' = 123;

+-------------+

| '123' = 123 |

+-------------+

| 1 |

+-------------+

1 row in set (0.00 sec)

.

mysql> SELECT '12a5' = 12;

+-------------+

| '12a5' = 12 |

+-------------+

| 1 |

+-------------+

1 row in set, 1 warning (0.00 sec)

WHERE_condition像数学运算一样被解决

链式比较逐一解决,首先是括号的唯一优先选择,从左边开始直到TRUE或FALSE为剩余.

因此,例如1 = 1 = 0 = 0将被跟踪如下:

1 = 1 = 0 = 0

[1] = 0 = 0

[0] = 0

[1]

Final result: 1 -> TRUE

这个怎么运作

我将追踪最后一个查询,我认为这是最复杂但最美丽的解释:

SELECT * FROM users WHERE id = id = id = username = username = id = username = 1;

首先,我将使用每个行变量显示每个where_condition:

id = id = id = username = username = id = username = 1

0 = 0 = 0 = 'anonymous' = 'anonymous' = 0 = 'anonymous' = 1

1 = 1 = 1 = 'root' = 'root' = 1 = 'root' = 1

2 = 2 = 3 = 'john' = 'john' = 2 = 'john' = 1

3 = 3 = 3 = 'doe' = 'doe' = 3 = 'doe' = 1

现在我将追踪每一行:

0 = 0 = 0 = 'anonymous' = 'anonymous' = 0 = 'anonymous' = 1

[1] = 0 = 'anonymous' = 'anonymous' = 0 = 'anonymous' = 1

[0] = 'anonymous' = 'anonymous' = 0 = 'anonymous' = 1

[1] = 'anonymous' = 0 = 'anonymous' = 1

[0] = 0 = 'anonymous' = 1

[1] = 'anonymous' = 1

[0] = 1

[0] -> no match

1 = 1 = 1 = 'root' = 'root' = 1 = 'root' = 1

[1] = 1 = 'root' = 'root' = 1 = 'root' = 1

[1] = 'root' = 'root' = 1 = 'root' = 1

[0] = 'root' = 1 = 'root' = 1

[1] = 1 = 'root' = 1

[1] = 'root' = 1

[0] = 1

[0] -> no match

2 = 2 = 3 = 'john' = 'john' = 2 = 'john' = 1

[1] = 3 = 'john' = 'john' = 2 = 'john' = 1

[0] = 'john' = 'john' = 2 = 'john' = 1

[1] = 'john' = 2 = 'john' = 1

[0] = 2 = 'john' = 1

[0] = 'john' = 1

[1] = 1

[1] -> match

3 = 3 = 3 = 'doe' = 'doe' = 3 = 'doe' = 1

[1] = 3 = 'doe' = 'doe' = 3 = 'doe' = 1

[0] = 'doe' = 'doe' = 3 = 'doe' = 1

[1] = 'doe' = 3 = 'doe' = 1

[0] = 3 = 'doe' = 1

[0] = 'doe' = 1

[1] = 1

[1] -> match

因此,id为2和3的行与where_condition匹配,这就是查询显示的行.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值