SQL

【SQL】IS NULLの使い方|DB別の類似関数についても解説

(最終更新月:2023年5月)

✔以下の疑問をお持ちの方へ向けた記事です

「SQLのIS NULL条件とは何で、どのように使うのだろうか?」
「SQLのIS NULL条件の使い方を学びたい」
「SQLのIS NULL条件の具体的な使用例を見て理解したい」

✔この記事を読むことで得られる知識

  • SQLのIS NULL条件の基本的な使い方
  • IS NULL条件の応用法
  • SQLのIS NULLを用いた具体的な使用例

この記事では、SQLのIS NULL条件の基本的な使い方から、その応用法まで、具体的例を交えて丁寧に説明します。

ぜひ最後までお読みください。

SQLのNULLについての基本

こちらでは、SQLとNullについての基本的な知識を共有します。

まずは基礎を理解した上で、応用した内容へと進みましょう。

  • SQLとは?
  • Nullとは?
  • Nullと文字列「””」の違い
  • SQLでのNULLの扱い
  • IS NULLとIS NOT NULL

SQLとは?

SQLは、データベースから情報を取得したり、データベースのデータを操作したりするための言語です。

多くの業界で使われており、ビジネスの意思決定をサポートするための重要な言語といえるでしょう。

Nullとは?

Nullは、データベースのフィールドが値を持たない状態を表します。

Nullは「不明」または「適用されない」など、値が存在しないことを示す特殊な状態を表現します。

Nullと文字列「””」の違い

SQLにおけるNULLと空文字列「””」は異なる概念を表します。

それぞれの違いを見ていきましょう。

  • NULL
  • 空文字「””」

NULL

値が存在しない、または値が不明、または適用できない

データベースフィールドがNULLの場合、そのフィールドは値を持っていないと解釈されます。

この状態は「無」の状態を表し、実際には何も存在しないことを意味します。

空文字「””」

値が長さゼロの文字列である

空文字列「””」は実際には値を持つフィールドで、その値が何も含まない文字列であることを意味します。

その結果、集約関数(SUM、AVGなど)ではNULL値は無視されることに対し、空文字列は異なる挙動を示す場合があります。

ただしSQLはデータベースシステムにより異なる仕様を持つことがあるため、具体的な挙動は使用しているデータベースのドキュメンテーションを参照することをおすすめします。

SQLでのNULLの扱い

SQLでは、NULLは一般的な値とは異なり、通常の比較演算子では扱えません

何かと比較するという概念ではなく、値が不明・存在しないからです。

フィールドの値がNULLかどうかを確認するには、”=”ではなく“IS NULL”を使用します。

IS NULLとIS NOT NULL

“IS NULL”と”IS NOT NULL”はSQLの演算子で、フィールドがNULL値かどうかを確認するために使用されます。

“IS NULL”はフィールドがNULL値の場合に真となり、”IS NOT NULL”はフィールドがNULL値でない場合に真となります。

ISNULL演算子とISNULL関数の基本

このセクションでは、「ISNULL演算子」および「ISNULL関数」について深堀りします。

NULLを理解する上での必要なステップです。

  • ISNULL演算子とISNULL関数とは?
  • ISNULLの使い方と戻り値の型
  • ISNULLの活用例

ISNULL演算子とISNULL関数とは?

ISNULLはSQLにおいて二つの形式で存在します。

  • ISNULL演算子:フィールドがNULL値かどうかを確認
  • ISNULL関数:もしフィールドがNULLだったら指定した値に置き換えるという機能を持つ

例えばISNULL(price, 0)とした場合、priceがNULLだったら0という値に置き換えます。

ISNULLの使い方と戻り値の型

ISNULL関数は、以下の形で使われます。

ISNULL(expression, replacement);

expressionがNULLならreplacementを返し、NULLでなければexpressionをそのまま返します。

戻り値の型はexpressionと同じです。

ISNULLの活用例

ISNULL関数は、NULL値を具体的な値に置き換えて分析する際に役立ちます。

例えば、顧客の購入履歴で購入金額がNULL(購入がない)場合、その値を0に置き換えて売上分析を行うことが可能です。

SELECT 
    customer_id, 
    CASE 
        WHEN purchase_amount IS NULL THEN 0
        ELSE purchase_amount
    END AS adjusted_purchase_amount
FROM 
    purchase_history;

ISNULLと類似の関数

このセクションでは、ISNULLと同じような機能を持つ類似の関数について詳しく見ていきましょう。

具体的には以下の内容についてお伝えします。

  • 環境ごとの類似関数
  • COALESCEとISNULLの違い
  • NULLIF関数との比較

環境ごとの類似関数

SQLの環境やデータベースによって、ISNULLと同じような機能を持つ関数は異なる名前で存在します。

  • MySQL:IFNULL
  • Oracle:NVL
  • PostgreSQL:COALESCE

これらの関数が、ISNULLと同等の機能を持っています。

COALESCEとISNULLの違い

COALESCE関数は、ISNULL関数と似たような機能を持ちますが、複数の引数を指定可能。

引数リストの中から最初の非NULL値を返す役割です。

一方、ISNULLは2つの引数のみを受け取り、最初の引数がNULLであれば2つ目の引数を返します。

NULLIF関数との比較

NULLIF関数は、2つの引数が等しい場合にNULLを返します

これは特定の値をNULLに変換する必要がある場合に便利です。

ISNULL関数とは逆に、NULLIFは具体的な値をNULLに変換するために使用されます。

ISNULLを使ったデータ分析の応用例

このセクションでは、ISNULL関数を活用したデータ分析の具体例について説明します。

具体的には、以下の観点から話を進めます。

  • NULL値を0に変換する
  • 条件に応じたNULLの置き換え
  • 分析結果の可視化

NULL値を0に変換する

データ分析の際、NULL値は分析結果を不正確にする可能性があります。

そのため、NULL値を具体的な値(例えば0)に変換することが一般的です。

以下はISNULL関数を使ってNULL値を0に置き換えるSQLクエリの一例です。

SELECT ProductID, ISNULL(Sales, 0) AS Sales FROM SalesData;

このクエリは、SalesDataテーブルからProductIDとSalesの値を取得しますが、Salesの値がNULLである場合は0に置き換えます。

データベース種類によって、COALESCEやIFNULL関数を使ってください。

条件に応じたNULLの置き換え

場合によっては、NULL値を0ではなく別の値に置き換えることが望ましい場合もあります。

例えば、平均価格を計算する際にはNULL値を平均値に置き換えることが適切です。

ISNULL関数はこのような場合にも役立ちます。

分析結果の可視化

ISNULL関数は、データ分析の結果を可視化する際にも役立ちます。

例えば、NULL値を含むデータをグラフ化する際、NULL値は通常、データポイントとして表示されません

しかし、ISNULLを使用してNULL値を具体的な値に変換することで、これらの値もグラフに表示することが可能になります。

実践!ISNULLを使ったクエリ作成

この章では、ISNULLの使い方を確固たるものにするための実習課題を用意しました。

具体的には以下の観点で課題を提出します。

  • 実習課題1:NULL値の取り扱い
  • 実習課題2:ISNULL関数の利用
  • 実習課題3:特定環境でのISNULLの利用

実習課題1:NULL値の取り扱い

最初の実習では、既存のデータベースにあるテーブルを使用してNULL値を扱う方法を理解しましょう。

まず、任意のテーブルを選択し、その中にNULL値が含まれる列を見つけてください。

その後、IS NULLまたはIS NOT NULL演算子を使用して、NULL値を含む行またはNULL値を含まない行をフィルタリングします。

1.ORDERSテーブル

CREATE TABLE Orders (
    OrderID int,
    CustomerID int,
    OrderAmount float
);

2.データの挿入

INSERT INTO Orders (OrderID, CustomerID, OrderAmount) VALUES
(1, 101, 99.50),
(2, 102, NULL),
(3, 103, 120.75),
(4, 104, NULL),
(5, 105, 75.00);

3.「OrderAmount」フィールドがNULLの行を選択

SELECT * 
FROM Orders 
WHERE OrderAmount IS NULL;

実習課題2:ISNULL関数の利用

次の実習では、ISNULL関数を使ってNULL値を具体的な値に置き換える方法を練習します。

選択したテーブルを使って、NULL値を0に置き換え、また異なる値(例えば平均値や最大値)に置き換えるクエリを作成します。

1.NULL値を0に置き換える

SELECT 
    OrderID, 
    CustomerID, 
    COALESCE(OrderAmount, 0) AS OrderAmount
FROM 
    Orders;

2.NULL値のときに全体の平均値を返す

SELECT
  OrderID,
  CustomerID,
  COALESCE(
    OrderAmount,
    (
      SELECT
        AVG(OrderAmount)
      FROM
        Orders
      WHERE
        OrderAmount IS NOT NULL
    )
  ) AS OrderAmount
FROM
  Orders;

実習課題3:特定環境でのISNULLの利用

最後の実習では、特定のDBMS環境でのISNULL関数の挙動について理解します。

自分が使用しているDBMSがISNULL関数をサポートしていない場合、その代わりとなる関数(COALESCEやIFNULLなど)を調査し、前の実習と同様のクエリを作成してみてください。

IFNULLの例

SELECT 
    OrderID, 
    CustomerID, 
    IFNULL(OrderAmount, 0) AS OrderAmount
FROM 
    Orders;

エラーのトラブルシューティングと対処法

ここでは、ISNULL関数と演算子の一般的なエラーについて説明します。

また、データ型の問題やパフォーマンス問題といったトラブルに遭遇した際の対処法を提供します。

  • ISNULL関数と演算子の一般的なエラー
  • データ型の問題と対処法
  • パフォーマンス問題と最適化の考え方

ISNULL関数と演算子の一般的なエラー

ISNULL関数や演算子を使用する際には、一部の一般的なエラーに注意が必要です。

一例として、二つの引数のデータ型が異なる場合、SQL Serverでは、データ型の優先度に従ってデータ型が変換されます。

しかし、互換性のないデータ型を混在させるとエラーが発生する可能性があります。

データ型の問題と対処法

データ型の問題は、ISNULL関数の使用中に発生する可能性があります。

例えば、ISNULLを文字列と数値で使用した場合、予期せぬ結果を返すことがあります。

これを避けるためには、ISNULL関数を使用する前にデータ型を明示的に変換することが推奨されます。

パフォーマンス問題と最適化の考え方

大量のデータを扱う場合、ISNULL関数はパフォーマンスに影響を与える可能性があります。

特に、ISNULL関数がインデックスの使用を防ぐ場合、クエリのパフォーマンスが低下する可能性があります。

これを避けるためには、NULL可能な列に対するクエリを最適化する方法を学ぶことが重要です。

まとめ

当記事では、SQLのNULL値の扱い、特にISNULL関数と演算子について詳しく解説しました。

  • ISNULLの基本的な使い方
  • 類似の関数との比較
  • 実際のデータ分析での活用例

ここまででISNULLの基本的な部分は理解できたと思いますが、さらに深く学ぶことでより効果的なデータ分析が可能になります。

例えば、他のSQL関数や構文との組み合わせ方、より複雑なクエリの作成方法などを学ぶと良いでしょう。

当記事が、あなたがSQLとISNULLについて理解を深め、実際のデータ分析での活用につながることを願っています。

今後も学び続けましょう。