TOP

SQL NULL 関数

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


次のテーブル "Products" ("Products") を見てみましょう。

ProductIDProductNameSupplierIDCategoryIDUnitPrice
1Chais1110 boxes x 20 bags18.00
2Chang1124 - 12 oz bottles19.00
3Aniseed Syrup1212 - 550 ml bottles10.00
4Chef Anton's Cajun Seasoning2248 - 6 oz jars22.00
5Chef Anton's Gumbo Mix2236 boxes21.35

列「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 サーバー

SQL Server ISNULL() 関数を使用すると、式の値が NULL である場合に代替値を返すことができます。

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

または、次のように COALESCE() 関数を使用することもできます。

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

MS アクセス

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