SQL ISNULL() NVL() IFNULL()およびCOALESCE()関数
以下を見て"Products"テーブル:
P_ID | 商品名 | 単価 | 在庫] | UnitsOnOrder |
---|---|---|---|---|
1 | ヤールスベルグ | 10.45 | 16 | 15 |
2 | マスカルポーネ | 32.56 | 23 | |
3 | ゴルゴンゾーラ | 15.67 | 9 | 20 |
仮定"UnitsOnOrder"列はオプションで、NULL値が含まれる場合があります。
私たちは、次のSELECT文を持っています:
SELECT ProductName,UnitPrice*(UnitsInStock+UnitsOnOrder)
FROM Products
いずれかの場合は、上記の例では、 "UnitsOnOrder"の値がNULLの場合、結果はNULLです。
MicrosoftのISNULL()関数は、我々はNULL値を処理する方法を指定するために使用されます。
NVL() IFNULL()およびCOALESCE()関数は、同じ結果を達成するために使用することができます。
このケースでは、NULL値がゼロになりたいです。
場合は、以下、 "UnitsOnOrder" NULLであるため、それは、計算に害を与えないISNULL()値が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