如果在查询中没有任何条件就给出字段名,会发生什么情况?

toiithl6  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(275)

当我在where条件下运行一个只有字段名的sql查询时,适用于字段名的默认条件是什么?

Select * from tablename where fieldname;
eeq64g8w

eeq64g8w1#

我在sql编辑器上尝试过:

没有语法错误
为了重新验证,我使用了sql语法检查器来获得以下结果

如果您尝试从城市不为空的客户中选择*;
很显然,您将得到如下所有非空记录。

ibrsph3r

ibrsph3r2#

如果你跑了

Select * from tablename where fieldname;

它将作为

SELECT * FROM `tablename` WHERE fieldname IS NOT NULL

并返回非空/空数据
如果在phpmyadmin列中运行此操作,则指定的列将突出显示,并且数据不包含空集

oyxsuwqo

oyxsuwqo3#

这个 WHERE 子句包含布尔表达式。像这样的 a = b and c = d 例如。如果你有 where fieldname 那么 fieldname 只有布尔表达式。所以呢 fieldname 通常是一个布尔列,如

select * from client where is_active;

如果不是布尔列,mysql将尝试转换:
数字将首先被截断为整数。那么零被认为是假的,所有其他数字都被认为是真的。
字符串将首先转换为数字,mysql从左到右读取(例如。 '012.3AB' 转换为 12.3 ). 然后数字将被转换为布尔值,如上所述。
日期将转换为数字(例如。 date '1999-02-03' 变成 19990203 ). 然后数字将被转换为布尔值,如上所述。
(然而,我不知道这些转换是否能保证如此应用。这只是我观察到的。)
一般来说,使用它没有多大意义 where fieldname 使用非布尔值 fieldname . mysql的静默转换非常容易出错;很容易忘记比较的正确部分而不去注意。在我看来,如果mysql提出一个错误会更好。

相关问题