【MySQL】カラムがNULL値を取りうるときの検索条件の書き方

最近MySQLを扱う業務をやってみたら、がぜん興味が出てきて、この機会にちゃんと勉強しようと思い立った。
今回は業務で少しはまった、空文字を絞込でうまくはじく書き方について。

空文字をはじきたい

例えば、コンバージョンポイントと会員IDというカラムがあって、両方CHARやVARCHAR型を取る。そして会員IDはnull値も取りうるとする。
このとき、会員IDがある行だけを絞込みたくて、こんな感じのクエリを書いてしまった。

SELECT cv_point, user_id FROM table WHERE user_id IS NOT NULL;

これだとnull値しか弾かれず、空文字は弾かれない。null値と空文字は違う。
正しくはこう。

SELECT cv_point, user_id FROM table WHERE user_id != '';

これで空文字が弾かれる。ちなみにnull値が許可されているカラムでも、この書き方でnull値も弾くことができる。

特定の値以外に絞り込みたい

例えば、会員IDがaaaでない行に絞りたいとき。

SELECT cv_point, user_id FROM table WHERE user_id != 'aaa';

これで良いときが大半だが、もし会員IDのカラムがnull値を許可している場合、これだとnull値が入ってこない。
そのときはこう書く。

SELECT cv_point, user_id FROM table WHERE user_id != 'aaa' OR user_id IS NULL;

初めてのテーブルでは、null値を許可しているかなどをチェックしてから触るようにしよう。