MySQL 中 where 條件僅指定字段,為何能匹配特定結果?

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 則不能,因此僅返回數字開頭的記錄。

? 版權聲明
THE END
喜歡就支持一下吧
點贊14 分享