」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > SQL 中的 NULL 處理

SQL 中的 NULL 處理

發佈於2024-07-31
瀏覽:733

NULL Handling in SQL

介紹

在 SQL 中處理 NULL 值是每個資料庫專業人員必須掌握的基本面向。 NULL 表示資料庫表中缺少或未定義的值,正確處理這些值對於確保資料操作的完整性和準確性至關重要。本文將深入探討 SQL 中 NULL 的概念、其意義以及處理 NULL 值的各種策略。

了解 SQL 中的 NULL

SQL中的NULL是一個特殊標記,用來指示資料庫中不存在某個資料值。它不等於空字串或零值。相反,NULL 表示不存在任何值。資料庫表中 NULL 值的存在可能會影響查詢結果,尤其是在執行比較、聚合和聯結等操作時。

NULL 的主要特徵

  1. 不確定值:NULL表示未知或不確定值。
  2. 非可比性:涉及 NULL 的比較(例如 =、)總是產生 NULL,而不是 TRUE 或 FALSE。
  3. 函數中的特殊處理:許多 SQL 函數在處理 NULL 值時都有特定的行為。

在 SQL 中使用 NULL

檢查 NULL

若要檢查值是否為 NULL,請使用 IS NULL 或 IS NOT NULL 運算子。例如:

SELECT * FROM employees WHERE manager_id IS NULL;

此查詢檢索沒有經理的所有員工。

NULL 和比較運算符

使用標準比較運算子(=、!=、

SELECT * FROM employees WHERE manager_id = NULL;

此查詢不會傳回任何行,即使某些 manager_id 值為 NULL。相反,您應該使用:

SELECT * FROM employees WHERE manager_id IS NULL;

聚合中的 NULL

SUM、AVG、COUNT 等聚合函數對 NULL 值的處理方式不同。例如,SUM 和 AVG 忽略 NULL 值,而 COUNT 可以在明確指定的情況下對它們進行計數。

SELECT SUM(salary) FROM employees;  -- NULL values are ignored
SELECT AVG(salary) FROM employees;  -- NULL values are ignored
SELECT COUNT(manager_id) FROM employees;  -- NULL values are ignored
SELECT COUNT(*) FROM employees WHERE manager_id IS NULL;  -- Counts only NULL values

處理連線中的 NULL

執行連線時,NULL 值可能會導致意外結果。例如,INNER JOIN 排除連接條件中具有 NULL 值的行,而 LEFT JOIN 則包括它們。

SELECT e.name, d.department_name
FROM employees e
LEFT JOIN departments d ON e.department_id = d.id;

由於 LEFT JOIN,此查詢會擷取所有員工,包括那些沒有部門的員工。

處理 SQL 查詢中的 NULL

使用合併

COALESCE 函數傳回表達式清單中的第一個非 NULL 值。它對於用預設值替換 NULL 很有用。

SELECT name, COALESCE(manager_id, 'No Manager') AS manager_id
FROM employees;

此查詢將 NULL manager_id 值替換為字串「No Manager」。

使用 IFNULL 或 ISNULL

許多 SQL 方言提供 IFNULL (MySQL) 或 ISNULL (SQL Server) 等函數來處理 NULL 值。

-- MySQL
SELECT name, IFNULL(manager_id, 'No Manager') AS manager_id FROM employees;

-- SQL Server
SELECT name, ISNULL(manager_id, 'No Manager') AS manager_id FROM employees;

使用 NULLIF

如果兩個參數相等,NULLIF 函數傳回 NULL;否則,它會傳回第一個參數。它對於避免被零除錯誤很有用。

SELECT price / NULLIF(quantity, 0) AS unit_price
FROM products;

此查詢透過在數量為零時傳回 NULL 來防止被零除。

NULL 處理的最佳實踐

  1. 定義預設值:建立表格時,定義列的預設值以盡量減少 NULL 的出現。
  2. 使用適當的函數:利用 COALESCE、IFNULL 和 NULLIF 等函數有效地處理 NULL 值。
  3. 驗證資料:實施資料驗證規則以防止出現不必要的 NULL 值。
  4. 考慮資料庫設計:設計資料庫架構以適當處理 NULL 值,考慮對查詢和效能的影響。

結論

在 SQL 中處理 NULL 值需要仔細考慮和理解它們在不同操作中的行為。透過使用適當的 SQL 函數並遵循最佳實踐,您可以確保資料庫查詢產生準確且可靠的結果。無論您是檢查 NULL、執行聚合還是連接表,正確的 NULL 處理對於維護資料完整性和在 SQL 操作中實現所需結果都至關重要。

版本聲明 本文轉載於:https://dev.to/kellyblaire/null-handling-in-sql-1mp2?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何使用代理身份驗證創建GO HTTP客戶端?
    如何使用代理身份驗證創建GO HTTP客戶端?
    在使用Authentication 時,使用authentication時要求。當將代理支持集成到現有的第三方代碼中時,這可能會構成挑戰。 在這種情況下,另一種方法是使用所需的代理配置創建自定義的HTTP客戶端。然後,可以在第三方軟件包中使用此客戶端來代替默認的HTTP客戶端。 以下是如何使用ht...
    程式設計 發佈於2025-02-06
  • 如何使用Python的記錄模塊實現自定義處理?
    如何使用Python的記錄模塊實現自定義處理?
    使用Python的Loggging Module 確保正確處理和登錄對於疑慮和維護的穩定性至關重要Python應用程序。儘管手動捕獲和記錄異常是一種可行的方法,但它可能乏味且容易出錯。 解決此問題,Python允許您覆蓋默認的異常處理機制,並將其重定向為登錄模塊。這提供了一種方便而係統的方法來捕獲...
    程式設計 發佈於2025-02-06
  • 如何在沒有404個錯誤的情況下使用澤西2.0提供靜態資源(例如index.html)?
    如何在沒有404個錯誤的情況下使用澤西2.0提供靜態資源(例如index.html)?
    在澤西島估算靜態資源的404錯誤映射攔截所有傳入的請求,沒有留出空間的網絡容器來提供靜態內容。 為了解決此問題,我們深入探究了過濾器的領域,尤其是com.sun.jersey.spi.container.servlet.servlet .servlet.servletcontainer for J...
    程式設計 發佈於2025-02-06
  • 如何干淨地刪除匿名JavaScript事件處理程序?
    如何干淨地刪除匿名JavaScript事件處理程序?
    在這里工作/},false); 不幸的是,答案是否。除非在Creation中存儲對處理程序的引用。 要解決此問題,請考慮將事件處理程序存儲在中心位置,例如頁面的主要對象,請考慮將事件處理程序存儲在中心位置,否則無法清理匿名事件處理程序。 。這允許在需要時輕鬆迭代和清潔處理程序。
    程式設計 發佈於2025-02-06
  • 我可以將加密從McRypt遷移到OpenSSL,並使用OpenSSL遷移MCRYPT加密數據?
    我可以將加密從McRypt遷移到OpenSSL,並使用OpenSSL遷移MCRYPT加密數據?
    將我的加密庫從mcrypt升級到openssl 問題:是否可以將我的加密庫從McRypt升級到OpenSSL?如果是這樣?使用openssl? 答案:可以使用mcrypt數據加密數據,可以使用openssl。關於如何使用openssl對McRypt進行加密的數據: openssl_decryp...
    程式設計 發佈於2025-02-06
  • 如何使用FormData()處理多個文件上傳?
    如何使用FormData()處理多個文件上傳?
    )處理多個文件輸入時,通常需要處理多個文件上傳時,通常是必要的。可以將fd.append("fileToUpload[]", files[x]);方法用於此目的,允許您在單個請求中發送多個文件。 初始嘗試 在JavaScript中,一種常見方法是:); 但是,此代碼僅處理第...
    程式設計 發佈於2025-02-06
  • HTML格式標籤
    HTML格式標籤
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    程式設計 發佈於2025-02-06
  • 您什麼時候應該使用_mm_sfence,_mm_lfence和_mm_mfence?
    您什麼時候應該使用_mm_sfence,_mm_lfence和_mm_mfence?
    Memory Ordering in x86x86 CPUs have a strongly有序的內存模型,但是C和C的模型較弱。因此,需要其他預防措施以確保正確的內存排序並防止數據損壞或種族條件。 _ mm_sfence _ mm_lfence Summary在NT存儲之後使用_mm_sf...
    程式設計 發佈於2025-02-06
  • 大批
    大批
    [2 數組是對象,因此它們在JS中也具有方法。 切片(開始):在新數組中提取部分數組,而無需突變原始數組。 令arr = ['a','b','c','d','e']; // USECASE:提取直到索引作...
    程式設計 發佈於2025-02-06
  • 如何使用替換指令在GO MOD中解析模塊路徑差異?
    如何使用替換指令在GO MOD中解析模塊路徑差異?
    克服go mod中的模塊路徑差異 coreos/bbolt:github.com/coreos/ [email受保護]:解析go.mod:模塊將其路徑聲明為:go.etcd.io/bbolt `要解決此問題,您可以在go.mod文件中使用替換指令。只需在go.mod的末尾添加以下行:[&& &...
    程式設計 發佈於2025-02-06
  • 如何使用newtonsoft的json.net將JSON列為C#對象列表?
    如何使用newtonsoft的json.net將JSON列為C#對象列表?
    [2 C#對象的列表,利用Newtonsoft的JSON.NET庫,同時僅關注目標類中的特定屬性。 1。將JSON轉換為c#類結構:利用JSON2CSHARP.com的JSON轉換器將JSON轉換為C#類結構。 2。創建目標對像類:定義一個類似於預期對象結構的c#類。 3。值得注意的json字...
    程式設計 發佈於2025-02-06
  • 自然語言處理(NLP)
    自然語言處理(NLP)
    自然語言處理或NLP是一個人工智能領域,使計算機能夠以有意義的方式理解,解釋和與人類語言互動。簡而言之,NLP可以像我們彼此一樣幫助機器“讀”和“聽”我們! ? 在我們的日常生活中,NLP是:之類的技術背後 語音識別(例如,Siri,Alexa) 語言翻譯工具(例如,Google Transla...
    程式設計 發佈於2025-02-06
  • 如何在JavaScript中安全解析非常規JSON?
    如何在JavaScript中安全解析非常規JSON?
    parse非常規JSON安全在JavaScript中使用innolen-In-in-in-in-in-in-in-in-in-in-in -in-in-in-inin json.parse函數很簡單。但是,當處理“放鬆”的JSON(關鍵名稱缺乏引號)時,會發生錯誤。 在開發環境中進行基於JSON...
    程式設計 發佈於2025-02-06
  • 如何使用char_length()在mySQL中按字符串長度對數據進行排序?
    如何使用char_length()在mySQL中按字符串長度對數據進行排序?
    [2使用內置的char_length()function。 char_length()和length() 此查詢將從指定的表中檢索所有行,並基於上升順序對它們進行排序指定列的字符長度。帶有更長字符串的行將出現在結果的底部。
    程式設計 發佈於2025-02-06
  • 可以在純CS中將多個粘性元素彼此堆疊在一起嗎?
    可以在純CS中將多個粘性元素彼此堆疊在一起嗎?
    </main> <section> ,但无法使其正常工作,如您所见。任何洞察力都将不胜感激! display:grid; { position:sticky; top:1em; z-index:1 1 ; { { { pos...
    程式設計 發佈於2025-02-06

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3