本記事では、SQLでのNULLの扱い方について紹介します。
リンク
NULLとは
このようなデータベースがあるとします。
id | name | price |
1 | 唐揚げ弁当 | 480 |
2 | オムライス | |
3 | 塩おにぎり | 100 |
4 | のり弁当 | 450 |
5 | クッキー | 120 |
6 | 幕の内弁当 | |
7 | 鮭おにぎり | |
8 | プリンパフェ | 350 |
9 | 牛丼 | |
10 | シーザーサラダ | 220 |
一部の商品の値段が空白になっています。例:name=オムライス
このようになにもデータが入っておらず、中身がなにか分からないとき、NULLを返します。
NULLは、ヌルと呼びます。
では、次にこのNULLの要素を取り出そうと思います。
IS NULL
上記のgoodsテーブルからNULLのレコードを取り出そうと思います。
SELECT * FROM goods
WHERE price IS NULL;
これでNULLのレコードを取り出すことが出来ました。
よくある間違いとして、=NULLとしてしまう点です。
=は、比較演算子で値を比較します。NULLは、データが存在しないので、比較できません。
したがって、FALSE(偽)で、NULLのレコードを取り出すことができません。
✖間違い
SELECT * FROM goods
WHERE price = NULL;
IS NOT NULL
対して、NULLでないレコードも取り出すこともできます。
そのようなときはIS NOT NULLを用います。
SELECT * FROM goods
WHERE price IS NOT NULL;
また、NOT演算子のように先頭に持ってきても同様な結果が出ます。
SELECT * FROM goods
WHERE NOT price IS NULL;
よくある間違いとして、先ほどと同様、=を用いてしまう点です。
NULLは、データがないので、比較できません。したがって、NULLでないレコードを取り出すことができません。
✖間違い
SELECT * FROM goods
WHERE NOT price = NULL;