取り出す・絞り込む

INPUT · スライド

空っぽの値をさがす

01 / 05

まだ入っていない値がある

記録を取りそこねた、備考を書かなかった。テーブルにはまだ値が入っていないマスが出てくることがあるよ。

そのマスに入っているのが NULL。「値がない」ことを表す、特別なしるしだよ。

SELECT * FROM records;

実行結果

1 | みなみ | はしる | 42 | ベスト
2 | そうた | とぶ | 38 |
3 | ひまり | なげる |  | けが
4 | かえで | はしる | 45 |
5 | りく | とぶ |  | けんがく
6 | あおい | なげる | 51 | ベスト

02 / 05

`NULL` は 0 でも空文字でもない

0 は「0という値がある」、空の文字は「文字が0個ある」。どちらも値はあるんだ。

NULL はそれとは違って、値そのものが無い。「まだ測っていない記録」と「0メートルの記録」を区別するために分けてあるんだよ。

03 / 05

`= NULL` では見つからない

ここが落とし穴。score = NULL と書いても1行も返ってこない

NULL は「分からない」という意味なので、「分からない値と等しいか」を聞かれても答えが決まらないんだ。エラーも出ないから、静かに0件になるのがこわいところだよ。

SELECT * FROM records  WHERE score = NULL;

実行結果

(1行も返ってこない)

04 / 05

`IS NULL` で聞く

空かどうかを調べる専用の書き方が IS NULL。「値が無い状態か?」というたずね方だよ。

= ではなく IS を使うのがポイント。記録を取りそこねた行だけが取り出せた。

SELECT * FROM records  WHERE score IS NULL;

実行結果

3 | ひまり | なげる |  | けが
5 | りく | とぶ |  | けんがく

05 / 05

`IS NOT NULL` で逆に

「値が入っている行」がほしいときは IS NOT NULLISNULL のあいだに NOT をはさむ形だよ。

集計する前に空の行を外す、という使い方をよくする。ここから書いてみよう。

SELECT member, score FROM records  WHERE score IS NOT NULL;

実行結果

みなみ | 42
そうた | 38
かえで | 45
あおい | 51