我很好奇,这些查询是如何在数据库引擎中工作的。我特别关注的是4号和6号线。
1.SELECT * FROM tableName
2.SELECT * FROM tableName WHERE 1
3.SELECT * FROM tableName WHERE 123
4.SELECT * FROM tableName WHERE '2xyz'
5.SELECT * FROM tableName WHERE ''
6.SELECT * FROM tableName WHERE 'xyz'在上面的查询中,1、2、3、4产生相同的结果,但5和6没有产生任何结果。为什么?'2xyx‘和'xyz’的不同b/w是什么?“2xyz”如何隐式转换为2?
发布于 2018-02-23 14:47:46
where子句的计算结果为布尔值true (非0)或false (0),以确定记录是在结果集中还是在结果集中。
'2xyx'被解释为2,因此布尔值为true。不幸的是,隐式字符串到数字的转换并没有记录在MySQL手册中。但是,大多数规则可以从手册的Type Conversion in Expression Evaluation部分的以下部分中推导出来:
对于字符串列与数字的比较,MySQL不能使用列上的索引来快速查找该值。如果str_col是索引字符串列,则在以下语句中执行查找时不能使用该索引:
SELECT * FROM tbl_name WHERE str_col=1;1
这是因为有许多不同的字符串可以转换为值1,如“1”、“1”或“1a”。
发布于 2018-02-23 14:30:58
它是WHERE <condition>,例如WHERE col1 = 123。取而代之的是WHERE <number>或WHERE <string>,因此缺少一个表达式。
然而,WHERE <boolean>是可能的,这也是MySQL所期望的。由于MySQL像对待数字一样对待布尔值(0 =假,其他数=真),所以它查找一个数字。
因此,当where条件呈现为false时,后者会给出一个空的结果集。
发布于 2018-02-23 14:51:43
在语句SELECT ... WHERE [where_condition]中,在where_condition expression中,您可以使用MySQL支持的任何函数和运算符,在这些函数和运算符中也支持string literal。对于字符串,比较基于字符串单元的数值。在计算表达式时,也会执行type conversion。
因此,在上面的例子中,2xyz被转换为2,即true,因此您将获得所有记录。它就像
SELECT * FROM tableName WHERE 2字符串xyz被转换为,该字符串为false,因此得到的结果集为空。它与以下内容相同:
SELECT * FROM tableName WHERE 0https://stackoverflow.com/questions/48942263
复制相似问题