【數據庫】Sql Server數據庫中isnull、iif、case when三種方式的使用和空值判斷

大家好,我是全棧小5,歡迎來到《小5講堂》。
這是《Sql Server》系列文章,每篇文章將以博主理解的角度展開講解。
溫馨提示:博主能力有限,理解水平有限,若有不對之處望指正!

在這里插入圖片描述

目錄

  • 前言
  • ISNULL用法
  • case when用法
  • iif
  • 查詢小技巧
    • 技巧一
    • 技巧二
  • 文章推薦

前言

有時候數據庫你接觸多了,就會知道一些技巧,說實在有時候博主沒有接觸到,我可能還是會用普通方式去判斷,這樣就會存在漏數據的情況。
所以,平時去積累一些技巧還是非常有必要的。

ISNULL用法

在 SQL Server 中,ISNULL 函數只接受兩個參數,不支持三個參數的情況。
博主剛開始是這么用的 ISNULL(t11.ItemCode,'Y','N') ,這種寫法是錯誤的。

ISNULL 函數的正確語法是:

ISNULL(check_expression, replacement_value)

case when用法

如果需要實現類似三個參數的功能(當字段為 NULL 時返回 ‘Y’,否則返回 ‘N’),可以使用 CASE WHEN 表達式:

CASE WHEN t11.ItemCode IS NULL THEN 'Y' ELSE 'N' END

iif

或者使用更簡潔的 IIF 函數(SQL Server 2012 及以上版本支持):

IIF(t11.ItemCode IS NULL, 'Y', 'N')

查詢小技巧

技巧一

使用 CONCAT 安全地拼接字符串

問題: 傳統的用加號 + 拼接字符串時,如果任何一個字段為 NULL,整個結果都會變成 NULL

舊方法(有風險):

SELECT FirstName + ' ' + LastName AS FullName
FROM Employees;
-- 如果 FirstName 或 LastName 為 NULL,FullName 就會顯示為 NULL

小技巧(使用 CONCAT):

SELECT CONCAT(FirstName, ' ', LastName) AS FullName
FROM Employees;

好處:

  • CONCAT 函數會自動將 NULL 值視為空字符串 '' 來處理。
  • 即使 FirstNameLastName 為 NULL,其他部分依然會正常拼接,最終結果不會是 NULL。
  • 代碼更簡潔易讀。

技巧二

使用 EXISTS 代替 IN 來檢查存在性

問題: 當使用 IN 子查詢時,數據庫需要先執行整個子查詢,返回所有結果集,然后再進行主查詢和子查詢結果的匹配,如果子查詢結果集很大,性能會較差。

舊方法(可能低效):

SELECT *
FROM Customers
WHERE CustomerID IN (SELECT DISTINCT CustomerID FROM Orders WHERE OrderDate > '2023-01-01'
);

小技巧(使用 EXISTS):

SELECT *
FROM Customers c
WHERE EXISTS (SELECT 1 FROM Orders o WHERE o.CustomerID = c.CustomerID AND o.OrderDate > '2023-01-01'
);

好處:

  • 性能更高EXISTS 是一種關聯子查詢,一旦找到一條滿足條件的記錄就會立即返回 True 并停止搜索,避免了處理整個子查詢結果集。
  • 語義更清晰EXISTS 直接表達了“是否存在”的邏輯意圖。
  • 在子查詢結果集很大時,性能提升尤為明顯。

這兩個技巧一個側重于數據的可靠性和整潔性,另一個側重于查詢的性能優化,都是日常開發中非常實用的“利器”。

文章推薦

【數據庫】Sql Server數據庫中isnull、iif、case when三種方式的使用和空值判斷

【數據庫】如何使用一款輕量級數據庫SqlSugar進行批量更新,以及查看最終的Sql操作語句

【數據庫】使用Sql Server將分組后指定字段的行數據轉為一個字段顯示,并且以逗號隔開每個值,收藏不迷路

【數據庫】SQL Server 查詢條件小技巧:ISNULL 函數的使用,有請DeepSeek來輔助講解下

【Sql Server】在SQL Server中生成雪花ID(Snowflake ID)

【Sql Server】使用row_number over方式進行表分頁,數據量達到五千多條記錄后,查詢變慢需要20多秒的解決方案

【Sql Server】隨機查詢一條表記錄,并重重溫回顧下自定義函數的封裝和使用

【Sql Server】鎖表如何解鎖,模擬會話事務方式鎖定一個表然后進行解鎖

【Sql Server】通過Sql語句批量處理數據,使用變量且遍歷數據進行邏輯處理

【新星計劃回顧】第六篇學習計劃-通過自定義函數和存儲過程模擬MD5數據

【新星計劃回顧】第四篇學習計劃-自定義函數、存儲過程、隨機值知識點

【Sql Server】Update中的From語句,以及常見更新操作方式

【Sql server】假設有三個字段a,b,c 以a和b分組,如何查詢a和b唯一,但是c不同的記錄

【Sql Server】新手一分鐘看懂在已有表基礎上修改字段默認值和數據類型

總結:溫故而知新,不同階段重溫知識點,會有不一樣的認識和理解,博主將鞏固一遍知識點,并以實踐方式和大家分享,若能有所幫助和收獲,這將是博主最大的創作動力和榮幸。也期待認識更多優秀新老博主。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/97995.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/97995.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/97995.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【藍橋杯選拔賽真題64】C++最大空白區 第十四屆藍橋杯青少年創意編程大賽 算法思維 C++編程選拔賽真題解

C++最大空白區 第十四屆藍橋杯青少年創意編程大賽C++選拔賽真題 博主推薦 所有考級比賽學習相關資料合集【推薦收藏】 1、C++專欄 電子學會C++一級歷年真題解析 電子學會C++二級歷年真題解析

試用Augment編寫python腳本實現智能家居3D環境交互響應

環境配置 VS Code中直接安裝Augment擴展,然后郵箱登錄就能獲得7天的試用。 從如下位置安裝3D建模軟件Blender: https://www.blendercn.org/downloadme#xiazai Blender 是一款免費開源的 3D 創作套件。它支持整個三維流程:建模、綁定、動畫…

【架構師干貨】系統架構設計

1. 軟件架構概述 從需求分析到軟件設計之間的過渡過程稱為軟件架構。只要軟件架構設計好了,整個軟件就不會出現坍塌性的錯誤,即不會崩潰。 架構設計就是需求分配,將滿足需求的職責分配到組件上。 軟件架構為軟件系統提供了一個結構、行為和屬…

Java設計模式之結構型—享元模式

Java中最常用的設計模式-CSDN博客 把“不可變且可復用”的細粒度對象緩存起來,用“共享”代替“新建”,從而節省內存。 經典場景 字符串常量池、Integer.valueOf(-128~127)、Android Message.obtain() 游戲粒子、編輯器字形、地圖瓦片、線程池中的任務…

cursor+python輕松實現電腦監控

小伙伴們,今天我們利用cursor不寫一行代碼開發一個電腦的系統狀態監控小應用!下載安裝cursor:網址:https://www.cursor.com/cn下載后雙擊安裝輸入提示詞: 制作一個winswos應用,實現顯示時間精確到秒&…

信號調制與解調 matlab仿真

信號調制與解調 matlab仿真 原始信號--頻譜為cos(Wt*w)函數,外形如饅頭調制解調傅里葉變換測試FT的頻譜是否為鋸齒波理想低通濾波器,截至頻率Wm傅里葉變換頻譜為鋸齒波函數的時域信號函數傅里葉變換調制頻率1理想低通濾波調制頻率2理想低通濾波 % 調制定理演示Dem…

IIS服務器下做瀏覽器緩存

你的這個問題問得非常好&#xff0c;很多開發者在同時使用重寫和緩存時都會遇到。簡單來說&#xff1a;你添加的 <staticContent> 和 <clientCache> 配置本身不會影響或干擾 重寫規則的工作。它們各司其職&#xff0c;在 IIS 處理請求的不同階段發揮作用。 但是&a…

Flutter 3.35.2 以上版本中 數字轉字符串的方法指南

在 Flutter 3.35.2 (對應 Dart 2.19 及以上版本) 中&#xff0c;將數字轉換為字符串主要依賴于 Dart 語言本身提供的原生方法。這些方法穩定且向后兼容。下面我為你介紹幾種主要的方法和案例。 &#x1f522; 數字轉字符串的基本方法方法名適用類型描述常用場景toString()int, …

C#基礎(⑤ProcessStartInfo類和Process類)

1. 它是什么&#xff1f;ProcessStartInfo 是 C# 里的一個類&#xff08;屬于 System.Diagnostics 命名空間&#xff09;&#xff0c;作用是&#xff1a;定義要啟動的程序路徑&#xff08;比如 notepad.exe&#xff09;設置啟動時的參數&#xff08;比如打開哪個文件&#xff0…

《設計模式之禪》筆記摘錄 - 19.備忘錄模式

備忘錄模式的定義備忘錄模式(Memento Pattern)提供了一種彌補真實世界缺陷的方法&#xff0c;讓“后悔藥”在程界序的世界中真實可行&#xff0c;其定義如下&#xff1a;Without violating encapsulation, capture and externalize an objects internal state so that the obje…

22、Jenkins容器化部署Java應用

22、Jenkins容器化部署Java應用 1、準備Dockerfile 將Dockerfile文件放入項目目錄下 FROM registry.cn-hangzhou.aliyuncs.com/xx_blog/openjdk:21-jdk LABEL maintainer"xxqq.com" #復制打好的jar包 COPY target/*.jar /app.jar RUN apk add -U tzdata; \ ln -sf /…

基于單片機智能水龍頭/智能洗漱臺設計

傳送門 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目速選一覽表 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目功能速覽 概述 該設計采用單片機作為核心控制器&#xff0c;結合紅外傳感器、水流傳感器和電磁閥等模塊&#xf…

GD32入門到實戰30--產品配置參數存儲方案 (EEPROM)

我們之前已經實現eeprom的驅動了&#xff0c;我們在應用層實現產品配置參數存儲方案我們要實現&#xff1a;原本設定的modebus從機&#xff08;單片機&#xff09;地址是01&#xff0c;存儲在eeprom里&#xff0c;按下按鍵后修改地址為03&#xff0c;重新上電modebus從機&#…

find_code 插件 react_vite

find_code 插件 react_vite const fs require("fs"); const path require("path"); const parser require("babel/parser"); const traverse require("babel/traverse").default; const generate require("babel/generator&…

手機秒變全棧IDE:Claude Code UI的深度體驗

還在為只能在命令行中使用Claude Code而苦惱嗎&#xff1f;想在移動設備上繼續你的AI編程對話嗎&#xff1f;Claude Code UI的出現徹底改變了這一切。這個開源項目為Anthropic官方的Claude Code CLI工具提供了現代化的Web界面&#xff0c;讓你能夠在任何設備、任何地方與AI編程…

F5發布后量子API安全解決方案,以AI驅動全面防護應對量子計算威脅

量子計算的飛速演進&#xff0c;正對傳統加密體系構成日益嚴峻的安全威脅。Gartner預測顯示&#xff0c;到2029年&#xff0c;量子計算機有望攻破目前普遍采用的公鑰加密算法&#xff0c;這一風險正倒逼全球企業加速密碼體系的更迭與升級。面對這一挑戰&#xff0c;F5公司——應…

深度剖析 DC - DC 轉換器在新能源汽車中的關鍵應用

在新能源汽車的發展進程中&#xff0c;DC - DC 轉換器扮演著至關重要的角色。以下將詳細介紹其在新能源汽車上的應用&#xff0c;包括作用、電路組成以及工作原理等方面。DC - DC 轉換器的作用簡單來說&#xff0c;新能源汽車上的 DC - DC 轉換器是一個 “降壓型電壓變換器”。…

【標準項目】在線五子棋對決(下)

在線五子棋對決一. 項目介紹及鏈接二. 項目結構設計項目模塊劃分業務處理模塊的子模塊劃分項目流程圖玩家流程圖服務器流程圖三. 數據管理模塊數據庫設計創建 user_table 類四. 在線用戶管理模塊五. 游戲房間管理模塊游戲房間類實現游戲房間管理類實現六. Session 管理模塊Sess…

重構導航之核:高德地圖的深度學習架構解析 導論:從數字化世界到可計算世界

導論&#xff1a;從數字化世界到可計算世界 數字地圖的演進&#xff0c;本質上是一場關于“世界可計算性”的持續探索。第一代地圖的核心任務是數字化轉錄&#xff08;Digital Transcription&#xff09;&#xff0c;它成功地將物理世界的靜態元素——道路、建筑、興趣點&#…

邏輯回歸(sigmoid函數、混淆矩陣、精確率召回率F1)

目錄 一、概述 1、邏輯回歸 2、激活函數 sigmoid函數 3、最大似然估計 二、邏輯回歸 1、原理 2、損失函數 3、代碼 三、混淆矩陣 1、定義 2、舉例 3、代碼 四、分類評估方法 1、精確率&#xff08;Precision&#xff09; 2、召回率&#xff08;Recall&#xff09; 3、F1&#…