expr NOT LIKE pat [ESCAPE 'escape_char']
これは、NOT (expr LIKE pat [ESCAPE 'escape_char'])
と同様です。
NULL
を含むカラムとの NOT LIKE
比較を伴う Aggregate クエリは、予想外の結果を生成します。例として、次の表とデータを参考にしてください :
CREATE TABLE foo (bar VARCHAR(10)); INSERT INTO foo VALUES (NULL), (NULL);
クエリ SELECT COUNT(*) FROM foo WHERE bar LIKE '%baz%';
は 0
を戻します。SELECT COUNT(*) FROM foo WHERE bar LIKE '%baz%';
は 2
を戻すと思われがちです。しかし、この場合は異なります : 2 番目のクエリは 0
を戻します。これは、NULL NOT LIKE expr
が、expr
の値に関わりなく、常に NULL
を戻すためです。NULL
を伴う aggregate クエリと、NOT RLIKE
または NOT REGEXP
を使用する比較でも同様です。このような場合、次のように、OR
( AND
ではなく ) を使用して、NOT NULL
を明示的にテストする必要があります :
SELECT COUNT(*) FROM foo WHERE bar NOT LIKE '%baz%' OR bar IS NULL;