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" がオプションであり、NULL 値を含むことができるとします。

以下の SELECT 文を使用します:

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

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

マイクロソフトの ISNULL() 関数は、NULL 値の処理方法を指定するために使用されます。

NVL()、IFNULL()、COALESCE() 関数でも同じ結果を得ることができます。

ここでは、NULL 値を 0 にしたいとします。

次に、"UnitsOnOrder" が NULL の場合、ISNULL() は値が NULL なら 0 を返すため、計算に影響しません:

SQL Server / MS Access

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() に似た関数があります。ただし、その動作はマイクロソフトの ISNULL() 関数とは少し異なります。

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

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

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

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

その他の拡張