ややこしかったのでメモしておきます。
テーブルは以下の構成とします。(テーブル名はproducts)
型が違う場合の挙動は分かりません。
名前 | データ型 |
---|---|
id | int(11) |
name | varchar(30) |
「!=」は「=」の逆ではない
等価演算子
このSQLの場合、nameカラムがNULLのレコードが抽出されません。
SELECT * FROM `products` WHERE name = ''
nameカラムがNULLと空白両方のレコードを抽出したい場合
は、NULL判定用の条件を追加する必要があります。
SELECT * FROM `products` WHERE name = '' OR name IS NULL
不等価演算子
こちらのSQLの場合、nameカラムがNULL・空白両方のレコードが除外
されます。
等価演算子と真逆の挙動ではありません。
SELECT * FROM `products` WHERE name != ''
<>
を使用した場合も同じ挙動でした。
SELECT * FROM `products` WHERE name <> ''
CONCAT関数
連結するカラムの値がNULLの場合
nameカラムがNULLの場合は更新されず、NULLのままになります。
UPDATE products SET name = CONCAT('test', name)
カラムの値がNULLでも連結させたい場合
IFNULL関数
で値を空白に置き換えます。
UPDATE products SET name = CONCAT('test', IFNULL(name, ''))