请稍候,加载中....

SQL NULL值处理

NULL值处理问题

如果在含有null值的列上直接进行聚合运算,由于存在null值会导致最后的结果不正确

请看下面的 "books_stock" 表:

+---------+--------------------------+----------------+---------------+------+
| book_id | bookname                 | shanghai_store | beijing_store | unit |
+---------+--------------------------+----------------+---------------+------+
|       1 | C++从入门到精通          |             10 |          NULL |   45 |
|       2 | Python从入门到精通       |             25 |            15 |   35 |
|       3 | Java从入门到精通         |             50 |          NULL |   25 |
+---------+--------------------------+----------------+---------------+------+

现在要统计每本书总的库存成本
我们使用下面的 SELECT 语句:

select bookname, unit*(shanghai_store+beijing_store) as total
from books_stock;

输出结果

+--------------------------+-------+
| bookname                 | total |
+--------------------------+-------+
| C++从入门到精通          |  NULL |
| Python从入门到精通       |  1400 |
| Java从入门到精通         |  NULL |
+--------------------------+-------+

这个结果显然不正确,所以相应的每个数据库都提供了处理null值的函数。

 


MSServer / Access

使用isnull函数处理

select bookname, unit *(isnull(beijing_store,0)+isnull(shanghai_store,0)) 
from books_stock

 


Oracle

Oracle 没有 ISNULL() 函数。不过,我们可以使用 NVL() 函数达到相同的结果:

select bookname, unit *(NVL(beijing_store,0)+NVL(shanghai_store,0))
from books_stock

 


MySQL

在 MySQL 中,我们可以使用 IFNULL() 函数,如下所示:

select bookname, unit*(ifnull(shanghai_store,0)+ifnull(beijing_store,0)) as total
from books_stock;

 


COALESCE() 函数

select bookname, unit*(coalesce(shanghai_store,0)+coalesce(beijing_store,0)) as total
from books_stock;

Python学习手册-