iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

【SQL】countを使う際に or null って入れるのはなんで?

結論

これを理解するためには、countがどのような振る舞いをするのかを理解する必要があります。

countは、取得した行に含まれる expr の非NULL値の数を返します。ちなみに、exprは整数や文字列などの数式を評価するコマンドのことを指していて、評価が真の場合は1が、偽の場合は0が出力されます。

つまり、下記のようにcountを使った場合は、nameカラムがyamatoではない場合exprによって0が出力されます。

count(name = 'yamato') 

0という値はnullではないので、nameに値が入っているものは全てカウントされてしまうということですね🤮

そこで登場するのが or nullです。

SQLorは、nullオペランドが含まれている場合、以外の値はnullになるという性質があります。

mysql> SELECT 1 || 1;
        -> 1
mysql> SELECT 1 || 0;
        -> 1
mysql> SELECT 0 || 0;
        -> 0
mysql> SELECT 0 || NULL;
        -> NULL
mysql> SELECT 1 || NULL;
        -> 1

参照: https://dev.mysql.com/doc/refman/5.6/ja/logical-operators.html#operator_or

ですので、name = 'yamato'で当てはまらない値は全てnullになります。countは、取得した行に含まれる expr の非NULL値の数を返すので、これで正しい結果が取得できるという仕組みですね✍️

count(name = 'yamato' or null) 

てな感じで本日も以上となります🍺

参考

その他の記事

yamatooo.blog

yamatooo.blog

yamatooo.blog