MySQL 中 where 条件仅指定字段,为何能匹配特定结果?
mysql 中 where 条件中仅有字段的疑惑
在 mysql 中,有一个独特的查询现象,当在 where 条件中仅指定字段而未指定具体值时,可以返回符合特定条件的结果。例如,在以下查询语句中:
select id from users where id
即使 where 子句中没有指定具体值,该查询仍会返回结果,但仅限于 id 字段以数字开头的记录,而字母和 0 开头的记录会被过滤掉。
mysql 文档的解释
根据 mysql 官方文档,当在 where 条件中指定表达式时,表达式必须对每条要选择的行返回 true:
where_condition 是一个表达式,对于每条要选择的行来说,其值为真。
换句话说,在没有指定具体值的情况下,where 中的字段自身被当作一个条件,如果该字段的值可以转换为 true,则满足该条件。对于 id 字段来说,数字和字符串空值都可以转换为 true,而字母和 0 则不能,因此只有数字开头的记录才会被返回。
表达式的概念
在 mysql 中,表达式可以包含任何 mysql 支持的函数和操作符,包括逻辑运算符和比较运算符。在 where 条件中使用字段时,它会被视为一个布尔表达式,其值为 true 或 false。例如:
where id > 0
这个条件等于以下表达式:
where id is not null and id <> "" and id > 0
因此,id 字段被视为一个条件,如果其值大于 0 则为 true,否则为 false。
结论
在 mysql 中,where 条件中仅有字段的查询现象是因为字段本身被当作一个表达式,其值可以转换为 true 或 false。对于数字字段,数字和字符串空值可以转换为 true,而字母和 0 则不能,因此仅返回数字开头的记录。
以上就是MySQL 中 where 条件仅指定字段,为何能匹配特定结果?的详细内容,更多请关注其它相关文章!