次の "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