Download - SQL NULL教學

Transcript
Page 1: SQL NULL教學

--定義:NULL代表未知值,因此不等於任何值。

--NULL值的比較:

--在查詢篩選NULL值時,需使用IS NULL 或IS NOT NULL ,但當

進行彙總運算時

--對於群組條件中,具有NULL值的資料視為相同群組,並進行彙總

運算。

--或者是應用DISTINCT以選取非重覆值時,也會將NULL的資料整

併成一筆資料回傳。

GO SELECT * FROM Employees GO SELECT DISTINCT Email FROM Employees SELECT Email FROM Employees GROUP BY Email GO SELECT DISTINCT Email FROM Employees WHERE Email IS NOT NULL

Page 2: SQL NULL教學

SELECT Email FROM Employees WHERE Email IS NOT NULL GROUP BY Email GO --NULL值的排序:

--由於ANSI並未對NULL的排序順序作定義,因此由各資料庫廠商

自行定義其規則。

--ORACLE預設NULL為最大值

--MSSQL預設NULL為最小值

GO SELECT DISTINCT Email FROM Employees ORDER BY Email GO --NULL的計算限制:

Page 3: SQL NULL教學

--大部份的彙總函數是針對非NULL數值進行彙整運算,如採用

COUNT(expr)指令時,

--是將expr運算式(或欄位)中非NULL值的資料筆數作計數的結

果。

--其他加總(SUM)函數、平均值(AVERAGE)、標準差(Standard

Derivation)

--或變異數(Variance)等常用的彙總函數也適用。

--但COUNT(*)計數函數則會回傳所有資料列的筆數,包含NULL

值。

--任何數值與NULL進行運算均傳回NULL值,但對字串與NULL連結

的處理上則不同,

--MSSQL將回傳NULL值,而ORACLE則否。

GO SELECT * FROM Employees SELECT COUNT(*) FROM Employees SELECT COUNT(Email) FROM Employees SELECT COUNT(ISNULL(Email,0)) FROM Employees GO

Page 4: SQL NULL教學

--語法

--ISNULL ( check_expression , replacement_value ) --參數

--<check_expression> --這是要檢查NULL 的運算式。check_expression 可以是

任何類型。

--<replacement_value> --這是check_expression 是NULL 時所傳回的運算式。

replacement_value --必須是能夠隱含地轉換成check_expresssion 類型的

類型。

select null+'A' --用預設值來替代NULL:

--由於NULL值使用上有諸多限制及注意事項,且當查詢NULL資料

時,

--往往造成索引失效的問題,可利用一些特定且具有意義(如

UNKNOWN)

--的資料以取代NULL,以避免上述困擾,也可以在欄位中指定預設

值,

--當使用者未輸入明確資料值時,可由資料庫自動填入預設值以替

Page 5: SQL NULL教學

代NULL。