SQL関数におけるNULL値とは、SQL関数のパラメータにNULL値が存在することを指します。SQL関数のパラメータがNULL値の場合、ほとんどのスカラー関数はNULLを返し、分析関数はNULL値を無視します。
スカラー関数におけるNULL値
NULL値が存在する場合、NVL() 関数の戻り値を使用してNULL値を決定できます。NVL() 関数の式は NVL(expr1, expr2) であり、expr1 が NULL でない場合は expr1 を返し、そうでない場合は expr2 を返します。
以下の例のように、expr1 パラメータを NULL と指定し、NVL(expr1, 0) 式の戻り値を照会します。expr1 が NULL の場合、式 NVL(expr1, 0) の戻り値は0です。
obclient> SELECT NVL(NULL,0) FROM DUAL;
+-------------+
| NVL(NULL,0) |
+-------------+
| 0 |
+-------------+
1 row in set
NVL関数の詳細については、NVLを参照してください。
集約関数におけるNULL値
AVG、MAX、SUM、COUNT などの集約関数を使用する際、NULL のレコードは無視されます。
以下の例のように、テーブル tbl_a にデータを挿入し、クエリステートメントを実行します。
obclient> CREATE TABLE tbl_a (col_a varchar2(1), col_b int );
Query OK, 0 rows affected (0.15 sec)
obclient> INSERT INTO tbl_a VALUES (NULL, 3);
Query OK, 1 row affected
obclient> INSERT INTO tbl_a VALUES (NULL, NULL);
Query OK, 1 row affected
obclient> INSERT INTO tbl_a VALUES (NULL, 1);
Query OK, 1 row affected
obclient> SELECT * FROM tbl_a;
+-------+-------+
| COL_A | COL_B |
+-------+-------+
| NULL | 3 |
| NULL | NULL |
| NULL | 1 |
+-------+-------+
3 rows in set
AVG、MAX、SUM などの集約関数を使用した結果は次のとおりで、NULL のレコードは無視されました。
obclient> SELECT AVG(col_b) FROM tbl_a;
+------------+
| AVG(COL_B) |
+------------+
| 2 |
+------------+
1 row in set
obclient> SELECT MAX(col_b) FROM tbl_a;
+------------+
| MAX(COL_B) |
+------------+
| 3 |
+------------+
1 row in set
obclient> SELECT SUM(col_b) FROM tbl_a;
+------------+
| SUM(COL_B) |
+------------+
| 4 |
+------------+
1 row in set
obclient> SELECT COUNT(col_b) FROM tbl_a;
+--------------+
| COUNT(COL_B) |
+--------------+
| 2 |
+--------------+
1 row in set
obclient> SELECT COUNT(col_a) FROM tbl_a;
+--------------+
| COUNT(COL_A) |
+--------------+
| 0 |
+--------------+
1 row in set
obclient> SELECT COUNT(*) FROM tbl_a;
+----------+
| COUNT(*) |
+----------+
| 3 |
+----------+
1 row in set