SQL NULLIF関数:便利なSQL制御フロー関数の使い方

概要:このチュートリアルでは、SQL NULLIF関数を使用してクエリにロジックを追加する方法を学びます。

SQL NULLIF関数の紹介

COALESCE関数に加えて、SQLにはNULLIF関数が用意されています。これは、制御フロー関数であり、引数をテストし、評価結果に基づいて最初の引数またはNULLのいずれかを返します。

NULLIF関数は2つの引数を受け入れます。2つの引数が等しい場合、NULLIF関数はNULLを返し、それ以外の場合は最初の引数を返します。

以下に、NULLIF関数の構文を示します。

NULLIF(argument_1,argument_2);Code language: SQL (Structured Query Language) (sql)

NULLIF関数は、以下の検索されたCASE式と同等です。

CASE WHEN argument_1 = argument_2
   THEN NULL
ELSE
   argument_1 
END;Code language: SQL (Structured Query Language) (sql)

この式は、2つの引数が等しい場合はNULLを返し、それ以外の場合はargument_1を返します。

SQL NULLIF関数の例

次のステートメントは、100が100と等しいため、NULLを返します。

SELECT NULLIF(100,100);Code language: SQL (Structured Query Language) (sql)

次のステートメントは、100が200より小さいため、100を返します。NULLIF関数は、最初の引数である100を返します。

SELECT NULLIF(100,200);Code language: SQL (Structured Query Language) (sql)

次のステートメントは、100がNULLと等しくないため、100を返します。

SELECT NULLIF(100,NULL);Code language: SQL (Structured Query Language) (sql)

次のステートメントはNULLを返します。NULLは100と等しくないため、NULLIF関数はNULLではない最初の引数を返します。

SELECT(NULL,100);Code language: SQL (Structured Query Language) (sql)

次のステートメントは、文字列SQ が文字列SQLと等しいため、SQLリテラル文字列を返します。

SELECT NULLIF('SQL','SQL');Code language: SQL (Structured Query Language) (sql)

NULLIF関数を適用できる実際のケースを示すために、articlesという名前の新しいテーブルを作成します。

CREATE TABLE articles (
    article_id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(255) NOT NULL,
    excerpt VARCHAR(255),
    body TEXT
);Code language: SQL (Structured Query Language) (sql)

次のINSERTステートメントは、articlesテーブルにいくつかの行を挿入します。

INSERT INTO articles(title,excerpt,body)
VALUES('SQL NULLIF function','', 'This tutorial shows you how to use the SQL NULLIF function'),
	  ('SQL tutorial','Learn how to use SQL at sqltutorial.org', 'You will learn SQL with practical examples'),
      ('SQL query',null, 'You will learn how to use SELECT statement to query data from tables');Code language: SQL (Structured Query Language) (sql)

概要ページに記事のタイトルと抜粋を表示したいとします。これを行うには、次のようにarticle_idtitle、およびexcerptをクエリします。

SELECT 
    article_id, 
    title, 
    excerpt
FROM
    articles;Code language: SQL (Structured Query Language) (sql)
SQL NULLIF function example

exceptが利用できない場合は、代わりにbodyの最初の50文字を使用できると仮定します。これを行うには、COALESCE関数を使用して、NULLでない場合はexcerpt列を返し、それ以外の場合はbodyの最初の50文字を返します。

SELECT 
    article_id,
    title, 
    COALESCE(excerpt, LEFT(body, 50)) AS summary
FROM
    articles;Code language: SQL (Structured Query Language) (sql)
SQL NULLIF function with COALESCE

ここで少し問題があります。

概要列は、記事ID 1では空白です。この問題を解決するために、推測できるかもしれませんが、NULLIF関数を使用します。

SELECT 
    article_id, 
    title, 
    COALESCE(NULLIF(excerpt,''), LEFT(body, 50)) AS summary
FROM
    articles;Code language: SQL (Structured Query Language) (sql)
SQL NULLIF function

抜粋が空の場合、NULLIF関数はNULLを返し、それ以外の場合は抜粋を返します。残りはCOALESCE関数によって処理されます。

これで、NULLIF関数がどのように機能し、クエリをより柔軟にするためにいつ適用するかを理解できたはずです。

このチュートリアルは役に立ちましたか?