有時,資料庫管理員(DBA)需要提供有關一個或多個資料表中遺漏值數量的報告。無論目標是顯示計數還是遺漏值列的內容,都有兩種處理方式,具體取決於你想要的靈活性。第一種方式是使用具有的有關欄位名稱、資料類型和條件約束的資訊來建置針對所涉及資料表的查詢。第二種方法更複雜,是撰寫一個預存程序,從 INFORMATION_SCHEMA.COLUMNS 資料表中取得欄的資訊。在今天的文章中,我們將介紹一個非通用方式,而下週的文章將介紹預存程序方案。
顯示可為 Null 的欄
由於並非資料表中的每個欄位都可以接受 null 值,因此檢查資料表設計並查看哪些欄位可能包含 null 值會很有幫助。在 Navicat 資料庫開發和管理用戶端中,資料表設計使用「不是 null」標題下的核取方塊標識所有必填寫的欄。因此,所有未勾選其核取方塊的欄都可以包含 null 值。這些將是我們查詢重點關注的欄位:
尋找具有 null 值的欄位的其中一種方法是使用「查詢建立工具」建置查詢。我們可以從功能表中選取許多條件,包括「是 null」、「不是 null」、「是空的」、「不是空的」等。
建置完成後,我們可以將 SQL 直接插入編輯器中:
這是 customers 資料表的所有列,其中至少包含一欄具有 null 值:
取得填滿欄位和空白欄位的統計資料
在只需要統計填滿欄位和空白欄位的情況下,可以使用 count() 函式統計填滿欄位或 null 欄位。在以下的查詢中,百分比表示為包含該特定欄位的 null 值的列數:
同樣,我們可以計算並顯示特定列的 null 欄,由 customerNumber 標識:
在上方的查詢中,使用 CASE 陳述式在計數中僅包括 null 值。這次,百分比(四捨五入至兩個小數位數)顯示了總共十四個資料表欄中有多少個包含 null 值。
總結
在今天的文章中,我們學習了如何查詢一個或多個資料表中的遺漏值。下週的文章將介紹一種使用預存程序的更通用方式。同時,為了增加你的興趣,以下是一個 SQL Server 查詢。它從 INFORMATION_SCHEMA.COLUMNS 資料表中取得欄的中繼資料,以便為每個資料表產生查詢:
上方的查詢將傳回 SELECT 查詢的清單。然後,我們可以複製它們並將其貼到 Navicat 查詢編輯器中,並在 SELECT 之間使用「UNION」,以尋找資料庫中每個資料表中的遺漏值!