SQL NULL 関数

SQL NULL 関数

SQL IFNULL(), ISNULL(), COALESCE(), および NVL() 関数を見ていきます。

“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 になります。

解決策

MySQL

MySQL の IFNULL() 関数を使用して、式が NULL の場合に代替値を返します:

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

または COALESCE() 関数を使用することもできます:

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

SQL Server

SQL Server の ISNULL() 関数を使用して、式が NULL の場合に代替値を返します:

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

または COALESCE() 関数を使用することもできます:

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

MS Access

MS Access の IsNull() 関数は、式が NULL の場合に TRUE (-1) を返し、それ以外の場合は FALSE (0) を返します:

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

Oracle

Oracle の NVL() 関数は同じ結果を得るために使用されます:

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

または COALESCE() 関数を使用することもできます:

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