SQLのNULL比較にはIS NULL演算子を使う ストアドファンクションでも同様
  • facebookページ
  • twitterページ
  • 2020.05.30

    SQLのNULL比較にはIS NULL演算子を使う ストアドファンクションでも同様

    SQLのNULL比較方法についてまとめています。

    SQLでNULLの比較をするには、WHERE句で通常の値と同じように条件指定するのではなくIS NULLやIS NOT NULLなどのNULL比較専用の演算子を使う必要があるんですね。

    NULL比較はIS NULL演算子を使う

    IS NULL演算子は、対象カラムがNULLのレコードのみ対象とするための特殊な演算子です。NULLは特殊な扱いなので=NULLという記述だと正しく意図した動きをしてくれません。

    以下は、titlesテーブルの「to_date」カラムにNULLを設定したレコードを挿入し、IS NULLを使ってselectした例です。

    【関連記事】
    MySQLのNULL判定はどうやる? 除外判定やNULLのSUMを取得するには?

    ストアドファンクション内でもIS NULL演算子が使えます。

    【関連記事】
    SQLのif文でNULL判定するサンプルコード

    1行目のSET GLOBAL log_bin_trust_function_creators = 1は、エラー回避用に設定しています。1行目の設定をしないと、以下のエラーが出力されます。

    デフォルトでは、CREATE FUNCTION ステートメントを実行するためにDETERMINISTIC、NO SQL、または READS SQL DATA の少なくとも 1 つを明示的に指定する必要があるんですね。

    参考)MySQL :: MySQL 5.6 リファレンスマニュアル :: 20.7 ストアドプログラムのバイナリロギング

    NOT INでNULLは使えない、AND演算子でIS NOT NULL条件を追加

    NOT INにNULLを含めると「どんなデータにもマッチしない」という条件になってしまいます。例えば、Sales、Development、NULL以外という条件を指定するには、NOT IN ( ‘Sales’, ‘Development’ )
    AND dept_name IS NOT NULLのように記述します。

    【関連記事】
    SQL not in データの除外指定 NULLや複数カラムを扱う方法

    まとめ

    ポテパンダの一言メモ
    • NULL判定をするにはIS NULL演算子を使う
    • ストアドファンクション内でもIS NULLを使ってNULL比較が可能
    • NOT INでNULLを含めるには、AND演算子でIS NOT NULLを使う


    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE