13 三种方式替换SQL Server中的NULL值(Different ways to replace NULL in Sql Server)

在Sql Server中有三种方式对查询结果中的NULL值进行替换。

如有下面的一张表:

我们可以通过自连接(Self-Join)的方式一张员工名和其对应的经理名的表:

SELECT E.[Name],M.[Name]
  FROM [tblEmployee] AS E
LEFT JOIN [tblEmployee] AS M
ON E.ManagerId = M.EmployeeId

我们可以看到,Todd对应的Manger为NULL,这说明Todd应该是公司的最高层,他没有经理。但是这样显示很不友好,我们希望如果Todd没有经理,那么他的经理名显示为“No Mnager”,如下图:

文章开头已经提到了,有三种方式可以替换查询结果中的NULL值,下面我们分别介绍。

一)使用ISNULL()函数替换。

SELECT E.[Name],ISNULL(M.[Name],‘No Manager‘)
  FROM [tblEmployee] AS E
LEFT JOIN [tblEmployee] AS M
ON E.ManagerId = M.EmployeeId

ISNULL()函数的第一个参数如果为NULL值,那么返回结果为第二个参数。

二)使用COALESCE()函数

SELECT E.[Name],COALESCE(M.[Name],‘No Manager‘)
  FROM [tblEmployee] AS E
LEFT JOIN [tblEmployee] AS M
ON E.ManagerId = M.EmployeeId

大家可以看到,在我们的这个例子中ISNULL函数和COALESCE函数的使用方式是一样的。其实这两个函数是有区别的,其具体区别在接下来的文章中会介绍。

三)使用CASE WHEN THEN ELSE END语句

SELECT E.[Name],CASE WHEN M.[Name] IS NULL THEN ‘No Manager‘ ELSE M.[Name] END
  FROM [tblEmployee] AS E
LEFT JOIN [tblEmployee] AS M
ON E.ManagerId = M.EmployeeId

这个语句有点像C#等高级语言的if else if else if else... 语句。如果WHEN后的条件成立,则会去到THEN语句,反之去到ELSE语句。在SQL中可以有很多个WHEN THEN ELSE串联起来去作为检测条件。

时间: 2024-10-19 14:06:00

13 三种方式替换SQL Server中的NULL值(Different ways to replace NULL in Sql Server)的相关文章

用三种方式实现导航菜单中的二级下拉菜单

如何实现导航菜单栏中的二级下拉菜单? 我们在淘宝.搜狐等大型网站上都可以看到使用的一些二级下拉菜单,比如下面这张图片. 但是如何实现类似的图片呢?实际上,我们有至少三种方式来实现,下面,我附上代码供大家参考. 1.仅使用html和css <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</tit

【java多线程】多线程的创建三种方式--笔记

申明:线程的概念以及进程的相关概念,可以参考网络上其他资料,这里只讨论多线程是怎么实现. 一.多线程的简单理解 明白什么是多线程,小生通俗一点的理解为:在一个程序里,我想同时让这个程序完成多个任务. 比如:让主函数 main 在打印1~100之间的所有整数的时候,要求在主函数打印到 20 的时候,再运行另一个类里的程序,让它打印10~100之间的所有整数. 这里忽略同进程内的多线程之间的抢占时间问题,上面的举例需求是要求一个程序只要有发生同时运行俩个程序的情况就行,即不准出现无论程序跑多少次都是

oracle数据的导入导出(两种方法三种方式)

大概了解数据库中数据的导入导出.在oracle中,导入导出数据的方法有两种,一种是使用cmd命令行的形式导入导出数据,另一种是使用PL/SQL工具导入导出数据. 1,使用cmd命令行导入导出数据 1.1整库导出 整库导出:exp 管理员账号/密码 full=y;//参数full表示整库导出.导出后会在当前目录下生成一个EXPDAT.DMP的文件,此文件为备份文件.如果想导出数据到指定位置,并且取个名字,需要添加file参数.例如:exp system/123456 file= C:\person

页面添加锚点的三种方式

页面添加锚点的三种方式 HTML中的链接,正确的说法应该称作"锚点",它命名锚点链接(也叫书签链接)常常用于那些内容庞大繁琐的网页,通过点击命名锚点,不仅让我们能指向文档,还能指向页面里的特定段落,更能当作"精准链接"的便利工具,让链接对象接近焦点.便于浏览者查看网页内容.类似于我们阅读书籍时的目录页码或章回提示.在需要指定到页面的特定部分时,标记锚点是最佳的方法. 锚点链接对SEO的作用 锚链接是一个非常重要的概念,在网页中增加恰当的锚链接,会让所在网页和所指向网

C#与数据库的连接的三种方式

学习了.net的知识从C#一直到MVC,我一直觉得基础很重要,最近有复习一下数据库连接的三种方式 1 返回结果集的一张表 public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters) { DataSet ds = new DataSet(); SqlDataAdapter adapter = new SqlDataAdapter(sql, str); adapter.SelectCom

监视EntityFramework中的sql流转你需要知道的三种方式Log,SqlServerProfile, EFProfile

大家在学习entityframework的时候,都知道那linq写的叫一个爽,再也不用区分不同RDMS的sql版本差异了,但是呢,高效率带来了差灵活性,我们 无法控制sql的生成策略,所以必须不要让自己缺乏好的工具去监控sql,本篇给大家介绍的三种监控手段Log和SqlServer profile,ef profile... 一:Log监控 这个属于entity framework自带的一个Action方法,它给大家带来了不错的用户体验,我们可以将其输出放到控制台,又或者写入到记事本中...这

监视EntityFramework中的sql流转你需要知道的三种方式Log,SqlServerProfile, EFProfile

大家在学习entityframework的时候,都知道那linq写的叫一个爽,再也不用区分不同RDMS的sql版本差异了,但是呢,高效率带来了差灵活性,我们 无法控制sql的生成策略,所以必须不要让自己缺乏好的工具去监控sql,本篇给大家介绍的三种监控手段Log和SqlServer profile,ef profile... 一:Log监控 这个属于entity framework自带的一个Action方法,它给大家带来了不错的用户体验,我们可以将其输出放到控制台,又或者写入到记事本中...这

JavaScript--------------------jQuery中.bind() .live() .delegate() .on()的区别 和 三种方式写光棒事件 动画

bind(type,[data],fn) 为每个匹配元素的特定事件绑定事件处理函数. $("a").bind("click",function(){alert("ok");}); live(type,[data],fn) 给所有匹配的元素附加一个事件处理函数,即使这个元素是以后再添加进来的 $("a").live("click",function(){alert("ok");}); de

Linq语法详细(三种方式:linq、Lambda、SQL语法)

三种方式:linq.Lambda.SQL语法 1.简单的linq语法 //1 var ss = from r in db.Am_recProScheme select r; //2 var ss1 = db.Am_recProScheme; //3 string sssql = "select * from Am_recProScheme"; 2.带where的查询 //1 var ss = from r in db.Am_recProScheme where r.rpId >