SQL server 中,如果查询或筛选的条件中,某字段的值为NULL,如何处理?又有哪些坑需要避免呢?


直接上坑 :

  1. NULL 与其他任何类型进行逻辑判断:

    【解释】:

    • NULL表示值未知,和空字符(空白)和0 不一样;
    • NULL和NULL或其他任何值做逻辑判断的时候,返回的值都是UNKNOWN;
  2. NULL 在in 或 not in 语句中,比如where classNum in (null,1), 或 where classNum not in (1,2)where classNum not in (1,2,null)

    • where classNum in (null,1) 是无法筛选出null的结果,但不会报错;
    • where classNum not in (1,2),就算表中包含 classNum is null的记录,但是同样也不会筛选出来

      where classNum not in (1,2,null),不会报错,但是不会查出来任何结果,如果in语句里面是一个子查询,要避免查出来是null的结果,否则整个查询是没有结果的
  3. 在where中查询为NULL的结果,= NULL(这个应该是一般人不会犯的错 :

    【解释】:

    • = NULL 这样查询不会报错,但是不会查出任何结果;
    • NULL 只是一个表示“没有值”的标记

正确使用方法:

  1. 若要在查询中测试空值,请在 WHERE 子句中使用 IS NULL 或 IS NOT NULL。
  2. 在 SQL 中存在第三个逻辑值:unknown。这有点类似于我们平时所说的:对、错、不知道:
    • 逻辑值有 true, false, unknown:



      AND 的情况:false > unknown > true

      OR 的情况:true > unknown > false

    • 与and和or运算符的逻辑运算结果:

参考链接:

SQL 之 SQL server 中 遇到字段的值为null 遇到的坑的更多相关文章

  1. 向已写好的多行插入sql语句中添加字段和值

    #region 添加支款方式--向已写好的多行插入sql语句中添加字段和值 public int A_ZhifuFS(int diqu) { ; string strData = @"SEL ...

  2. SQL查询一个表中类别字段中Max()最大值对应的记录

      SQL查询一个表中类别字段中Max()最大值对应的记录 SELECT A.id, A.name, A.version FROM   DOC A, (SELECT id, MAX(version)  ...

  3. CockroachDB学习笔记——[译]CockroachDB中的SQL:映射表中数据到键值存储

    CockroachDB学习笔记--[译]CockroachDB中的SQL:映射表中数据到键值存储 原文标题:SQL in CockroachDB: Mapping Table Data to Key- ...

  4. Sql Server中COUNT(字段名)跟COUNT(*)的特殊不同点

    今天有个需求,有2张表: 1.一个“搜索记录”表search,一个“搜索后下载记录”表down 2.映射关系:每一个下载记录对应一条搜索记录,                           第个 ...

  5. MySQL中设置同一张表中一个字段的值等于另一个字段的值

    今天遇到了一个需求,我在一张表中新增了一个字段,因为这张表以前已经有很多数据了,这样对于以前的数据来说,新增的这个字段的值也就是为该字段的默认值,现在需要将新增的这个字段添加上数据,数据来源为同表的另 ...

  6. 获取请求 header 中指定字段的值

    private function getHeader($name) {//获取请求头中$name的值 $name = 'HTTP_' . $name; foreach ($_SERVER as $ke ...

  7. 【转发】在SQL Server中通过字段值查询存储该字段的表

    -- Copyright © 2002 Narayana Vyas Kondreddi. All rights reserved.     -- Purpose: To search all colu ...

  8. SQL Server 中根据字段值查询其所在的表、字段

    DECLARE @what varchar(800)SET @what='123456' --要搜索的字符串   DECLARE @sql varchar(8000)   DECLARE TableC ...

  9. sql server中bit字段实现取反操作

    update Fct_StockMove set Disabled=Disabled^1 WHERE MoveId='DCE268E0-2CB3-4D17-AC4E-0046FB459CAD'; 1. ...

  10. SQL SERVER 2008 设置字段默认值为当前时间

    在某些情况下需要对某条记录添加上时间戳,比如用户注册,需要记录用户的注册时间,在SQL SERVER 2008中可以通过 1. 添加新字段 2. 数据类型设置为smalldatetime 3. 默认值 ...

随机推荐

  1. NGINX websocket 配制

    http { map $http_upgrade $connection_upgrade {          default upgrade;          '' close; } upstre ...

  2. 多数元素II

    给定一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素. /** * @param {number[]} nums * @return {number[]} */ const ...

  3. (0409) Pycharm 的设置--参数设置(运行.py文件带参数,例如argument) 比如: demo.py -prj xxx

    1)  https://www.cnblogs.com/yksgzlyh/p/10221960.html 点击"Run"菜单下的"Edit Configurations. ...

  4. SpringCloudEureka上篇

    SpringCloudEureka上篇 本文学习自<<重新定义SpringCloud>> Eureka简介 Eureka是Netflix公司开源的一款服务发现组件,该组件提供的 ...

  5. 3516A调试

    最近在调Hi3516A的板,硬件不知道为什么如此设计,用一片16bit4G的ddr,16Mspi flash,按理如果是A应该是2片16bit的ddr,组成32位总线,现在怕是只能当D来用了,编译成功 ...

  6. linux查找服务位置

  7. 通过Container制作Image

    1.拉取tomcat镜像 docker pull tomcat docker images 2.根据tomcat镜像创建一个tomcat container docker run -d -it --n ...

  8. EXCEL函数总结

    ------------------截取"号"之前的字符 =MID(A45,1,FIND("号",A45,1)-1)

  9. 【Windows】Microsoft Store 应用列表

    更新优质微软商店应用: 『购买 WSA工具箱 - Microsoft Store zh-CN』 『购买 Apk安卓安装器 - Microsoft Store zh-CN』 『购买 KMS激活: Win ...

  10. Linux系统配置安装jdk

    菜鸟新人搭建服务器,目前不深入原理,只配置 1.官方自行下载Linux版本jdk http://www.oracle.com/technetwork/java/javase/downloads/jdk ...