1. 程式人生 > 其它 >SQL學習筆記----第四天(Null 替換函式在日常統計中的應用)

SQL學習筆記----第四天(Null 替換函式在日常統計中的應用)

技術標籤:sql學習資料庫mysqlsqloracle

Null 替換函式在日常統計中的應用--目錄

前言

在日常統計過程中,當表字段值存在 null 時, null 和其他值一起運算的結果也為 null,為統計工作帶來了不便,比如在 MySQL 中執行 SQL 指令碼:select 1+null
結果集:
在這裡插入圖片描述
為了避免統計值出現null值的情況,主流資料庫都提供了替換null的函式,下面我們從四種主流資料庫來了解下。


1.SqlServer中的isnull的函式

isnull函式在SQLServer中的語法:

isnull(expr01,expr02)

其中expr01代表被檢查是否為null的表示式,可以為任意資料型別,expr02是在expr01為null時返回的表示式,資料型別應保持和expr01一致,最終函式的按型別與expr01相同。
下面SQL指令碼將學生學習資訊表中性別為null的值替換為0:

select gender,isnull(gender,0) as gender_new,sid,stu_name from student where gender is null;

結果集:
在這裡插入圖片描述

2.MySQL中的ifnull函式

MySQL中的ifnull函式可以實現實現替換null的功能,它的語法是:

IFNULL (EXPR01,VALUE)

如果第一個引數的表示式expr01為null,則返回第二個引數value,如果第一個引數不為null,則返回第一個引數值expr01,兩個引數均為必須,缺一不可。

select ifnull(1,2),ifnull(null,2);

結果集:
在這裡插入圖片描述ifnull(1,2)中由於第一個引數為1,不為null,所以返回1,ifnull(null,2)中第一個引數為null,所以返回了第二個引數2.
在MySQL中也有isnull函式,但是它的功能和SQLServer中的isnull函式的功能不同,在MySQL中isnull的用法為:

isnull(expr)

如果表示式expr為null就返回1,如果expr不為null就返回0;

select isnull(1),isnull(null);

也可以將isnull用在where子句中:

select * from student where isnull(gender);

結果集:
在這裡插入圖片描述
在上面SQL語句中isnull(gender)的作用和gender is null是一樣的。

3.Oracle中的nvl函式

Oracle中的nvl函式可以實現替換null的功能,它的語法是:

nvl(expr01,expr02)

在功能上實現了SQLServer中的isnull的功能,假如我們將學生成績表中的一條記錄中的成績欄位更新為null,通過nvl函式來替換null值為0:

update elective set grade = null where id = 13;
select grade,nvl(grade,0) from elective where id=13;

結果集:
在這裡插入圖片描述

4.PostgreSQL中的coalesce函式

PostgreSQL中的coalesce函式同樣可以實現醫患null的功能,它的語法是:

coalesce(expr01,expr02,expr03,...

與其他資料庫不同的是,該函式可以存在一個或多個函式,返回第一個值不為null的表示式。

select coalesce(null,'替換值'),coalesce('原值','替換值'),coalesce (null,null,'替換值1''替換值2');

結果集:
在這裡插入圖片描述

小結

在表記錄總存在的null值給我們的查詢統計帶來了很大的不變,雖然資料庫提供了null替換函式,但這無可厚非是增加了編寫程式碼的難度和成本,為了規避該問題,最好在建立表或新增列時將列設定為非null並未它設定預設值