メインコンテンツへスキップ
見出し画像

NULLを探したのに、一行も出ない。SQLの比較・件数・平均を読み直す

数量が未確認の行を探したくて、SQLに「WHERE qty = NULL」と書いた。画面には空欄らしい行があるのに、検索結果はゼロ件。条件の書き方は合っているように見えるので、データのほうを疑いたくなります。

ここで確かめたいのは、NULLが数値の0や空の文字列とは違う、ということです。NULLを普通の等号で比べても、「等しい」という結果にはなりません。NULLかどうかを調べるには、IS NULLを使います。

たとえば、数量の列qtyで未確認をNULLとして記録しているなら、条件は「WHERE qty IS NULL」です。これで、NULLの行を選べます。

もう一つ、引っかかりやすい条件があります。「qty <> 0」と書けば、0以外の行が全部出ると思ってしまうことです。NULLの行は、この条件でも選ばれません。数量が分からないため、0と違うとも決められないからです。

この性質は、検索だけでなく集計にも関わります。同じ表なのにCOUNT(*)は6件、COUNT(qty)は4件。平均を出す前にNULLを0へ置き換えると、結果が変わる。いずれも、どの行や値を数えたかをたどれば説明できます。

この記事では、6行の練習用データを使い、比較、件数、平均、除外条件、表の結合を順に確かめます。NULLをとにかく埋める前に、「値がないことを、今回どう扱うか」を判断できるようになるための読み方です。SQLの結果が予想と違うとき、小さな例へ戻って確かめる手順としても使えます。

あなたへのおすすめ