SQL NULL 関数

❮ 前章へ 次章へ ❯

SQL ISNULL()、NVL()、IFNULL() および COALESCE() 関数

次の "Products" テーブルを見てください:

P_Id ProductName UnitPrice UnitsInStock UnitsOnOrder
1 Jarlsberg 10.45 16 15
2 Mascarpone 32.56 23  
3 Gorgonzola 15.67 9 20

"UnitsOnOrder" 列は、optionalで NULL 値を含むことができるものとします。

次の SELECT 文 があります:

SELECT ProductName,UnitPrice*(UnitsInStock+UnitsOnOrder)
FROM Products

上記例では、"UnitsOnOrder" のいずれかの値が NULL の場合は、結果は NULL になります。

Microsoft's ISNULL() 関数は、NULL 値をどのように取扱うかを指定するために使用します。

NVL()、IFNULL() および COALESCE() 関数もまた、同じ結果を得るために使用することができます。

このケースでは、NULL 値はゼロにします。

以下では、値が NULL の場合は ISNULL() がゼロを返すため、"UnitsOnOrder" が NULL の場合でも計算に支障はありません:

MS Access

SELECT ProductName,UnitPrice*(UnitsInStock+IIF(ISNULL(UnitsOnOrder),0,UnitsOnOrder))
FROM Products

SQL Server

SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
FROM Products

Oracle

Oracle には ISNULL() 関数はありませんが、NVL() 関数を使えば同じ結果が得られます:

SELECT ProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0))
FROM Products

MySQL

MySQL には ISNULL() 関数がありますが、Microsoft ISNULL() 関数とは若干動作が異なります。

MySQL では、次のように IFNULL() 関数を使用します:

SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products

または、次のように COALESCE() 関数を使用します:

SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products

❮ 前章へ 次章へ ❯