Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQL Serverののisnullの構文、case式の置き換えや、主要DBMSの関数での置き換えについてまとめています。

ISNULL関数の構文

SQL Serverのisnull関数は、第一引数の式がNULLの場合に、第二引数の値を返します。構文は以下の通り。

ISNULL ( check_expression , replacement_value )  

以下は、ProductionデータベースのProductテーブルからWeight(重量)の平均を算出するSQLです。WeightがNULLの場合は、isnull関数により50として計算します。

USE AdventureWorks2012;  
GO  
SELECT AVG(ISNULL(Weight, 50))  
FROM Production.Product;  
GO  

実行するとこうなります。

-------------------------- 
59.79  
 
(1 row(s) affected)

参考)ISNULL (Transact-SQL) – SQL Server | Microsoft Docs

ISNULL関数とIS NULL演算子の違い

ISNULL関数とIS NULL演算子は全くの別物です。以下はISNULL関数により、MaxQtyカラムがNULLのときに0.00を代替値として使う例。

USE AdventureWorks2012;  
GO  
SELECT Description, DiscountPct, MinQty, ISNULL(MaxQty, 0.00) AS 'Max Quantity'  
FROM Sales.SpecialOffer;  
GO  

下記は、WeightがNULLのデータを抽出するSQLになります。

USE AdventureWorks2012;  
GO  
SELECT Name, Weight  
FROM Production.Product  
WHERE Weight IS NULL;  
GO  

isnull関数はSQL Serverの独自関数ですが、IS NULL演算子は標準SQLです。以下は、MySQLの例です。employees_copyテーブルから、first_nameカラムがNULLのもののみを抽出しています。

mysql> select * from employees_copy limit 10;
+--------+------------+--------------+-----------+--------+------------+
| emp_no | birth_date | first_name   | last_name | gender | hire_date  |
+--------+------------+--------------+-----------+--------+------------+
|  10001 | 1953-09-02 | NULL         | Facello   | M      | 1986-06-26 |
|  10002 | 1964-06-02 |              | Simmel    | F      | 1985-11-21 |
|  10003 | 1959-12-03 |              | Bamford   | M      | 1986-08-28 |
|  10004 | 1954-05-01 |  Chirstian   | Koblick   | M      | 1986-12-01 |
|  10005 | 1955-01-21 | NULL         | Maliniak  | M      | 1989-09-12 |
|  10006 | 1953-04-20 | Anneke       | Preusig   | F      | 1989-06-02 |
|  10007 | 1957-05-23 | Tzvetan      | Zielinski | F      | 1989-02-10 |
|  10008 | 1958-02-19 | Saniya       | Kalloufi  | M      | 1994-09-15 |
|  10009 | 1952-04-19 | Sumant       | Peac      | F      | 1985-02-18 |
|  10010 | 1963-06-01 | Duangkaew    | Piveteau  | F      | 1989-08-24 |
+--------+------------+--------------+-----------+--------+------------+
10 rows in set (0.00 sec)

mysql> select * from employees_copy where first_name is null;
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
|  10001 | 1953-09-02 | NULL       | Facello   | M      | 1986-06-26 |
|  10005 | 1955-01-21 | NULL       | Maliniak  | M      | 1989-09-12 |
+--------+------------+------------+-----------+--------+------------+
2 rows in set (0.14 sec)

ISNULL関数は、case式で置き換えられる

SQL ServerのISNULL関数はcase式で置き換えが可能です。以下は、first_nameカラムがNULLの場合、代替値としてNO NAMEを返す例です。

mysql> select case when first_name IS NULL then 'NO NAME'
 else first_name end as first_name
from employees_copy limit 10;
+--------------+
| first_name   |
+--------------+
| NO NAME      |
|              |
|              |
|  Chirstian   |
| NO NAME      |
| Anneke       |
| Tzvetan      |
| Saniya       |
| Sumant       |
| Duangkaew    |
+--------------+
10 rows in set (0.00 sec)

【関連記事】
SQL isnullの使い方 NULL判定やNULL置換の方法 case式でも対応可能 

case式で置き換えたときの欠点は、記述が長くなり可読性が落ちる点です。

主要データベースにはcase式での置き換え以外に、NVL(Oracle)や、coalesce(MySQLなど)のNULLの代替値を返す関数が用意されているので、そちらを使うことも検討してみると良いでしょう。

【ハンズオン】SQLのNVL関数とは?概要や使い方を丁寧に説明! 

coalesce関数は、Oracle、SQL Server、MySQL、PostgreSQLで使用可能な関数で、複数の代替値を指定可能です。代替値がNULLだった場合は、次の代替値をチェックし、NULLでない値を返します。

【関連記事】
SQL coalesce 値がNULLの場合の代替値を返す 簡易版のNVLやNULLIFが使えるDBもあり 

まとめ

ポテパンダの一言メモ
  • ISNULL関数は、SQL ServerでNULLの代替値を返す関数
  • ISNULL関数はcase式で置き換えが可能
  • 主要データベースには、ISNULL関数と同等の機能を持つNVLやcoalesc関数が用意されている

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。