SQL 复合查询条件(AND,OR,NOT)对NULL值的处理方法

NULL值影响查询条件的结果,并且结果很微妙。

以下是SQL中AND,OR,NOT的真值表。

表1    AND的真值表






















TRUE

FALSE

NULL

TRUE

TRUE

FALSE

NULL

FALSE

FALSE

FALSE

FALSE

NULL

NULL

FALSE

NULL

                                              表2    OR的真值表





















TRUE

FALSE

NULL

TRUE

TRUE

TRUE

TRUE

FALSE

TRUE

FALSE

NULL

NULL

TRUE

NULL

NULL

                                              表3    NOT的真值表









TRUE

FALSE

NULL

FALSE

TRUE

NULL

当两个以上的查询条件与AND、OR、NOT组合时,NOT的优先级最高,其次是AND,最后是OR。为了避免歧义和确保可移植性最好使用括号。

A BETWEEN B AND C 等价于 (A>=B) AND (A<=C),因此根据真值表可以得出BETWEEN 子句中处理NULL值的规则。

同样,A IN(B,C,D) 等价于 (A=B)OR(A=C)OR(A=D),  根据真值表,只要这三个表达式中有一个为NULL,结果返回肯定是NULL。

因此,BETWEEN子句和IN子句并不增加SQL语句的表达能力。

SQL 中有NULL 值测试,即:字段 IS (NOT) NULL ,但它的返回结果只有两种情况:TRUE或者FALSE。

(0)

相关推荐

  • mysql中将null值转换为0的语句

    复制代码 代码如下: SELECT IF(AVG(cai.conversionsRate) IS NULL,0,AVG(cai.conversionsRate)) AS conversionsRate FROM campaign_info cai WHERE insertTime BETWEEN '2011-02-01' AND '2011-02-04' AND googleCampaignId=23331401

  • mysql中is null语句的用法分享

    mysql数据库中is null语句的用法 注意在mysql中,0或 null意味着假而其它值意味着真.布尔运算的默认真值是1. 对null的特殊处理即是在前面的章节中,为了决定哪个动物不再是活着的,使用death is not null而不使用death != null的原因. 在group by中,两个null值视为相同. 执行order by时,如果运行 order by ... asc,则null值出现在最前面,若运行order by ... desc,则null值出现在最后面. nul

  • SQLSERVER ISNULL 函数与判断值是否为空的sql语句

    先来有用的 复制代码 代码如下: use 数据库 update news set author='jb51' where author is null 如果你的不正确那就说明你的什么地方打错了.仔细看下,强烈建议操作以前先备份下数据库. 说明:使用指定的替换值替换 NULL. 语法:ISNULL ( check_expression , replacement_value ) 参数: check_expression:将被检查是否为 NULL 的表达式.check_expression 可以为任

  • sqlserver对字段出现NULL值的处理

    复制代码 代码如下: -判断某些字段是否为空 --case select case when '字段名' is null then '\N' else convert(varchar(20),'字段名') end as 'NewName' select case when null is null then '\N' else convert(varchar(20),null) end as 'NewName' --SQL Server 2005:coalesce select coalesce

  • sql server 关于设置null的一些建议

    我们设计表时,在字段是否允许Null值这个问题上,有时会争论一番. 数据库牛人Kalen Delaney则给了一下建议: 1,永远不要在用户表中允许NULL值 2,在用户表定义中包含一个NOT NULL限制 3,不要依赖数据库属性来控制NULL值的行为 对于第一点,我们反向说,如果允许NULL,会给我们带来什么影响. 1,SQL 在每条记录中都设置了一个特殊的bitmap来显示哪些允许空值的列上存储的真的是空值.如果是NULL,在访问每一行的时候SQL Server都必须对这个bitmap进行解

  • SQL语句查询是否为空 =null及null

    a                  b                             c             d 980515      精頂企業有限公司         簡家豪      NULL 980514      全欣木業有限公司         NULL       123 980514      迅億科技股份有限公司   簡逢浚      NULL 980515      聖越國際企業有限公司   NULL       111 表结构如上所示,要查询C列为空的记录的

  • mysql中IFNULL,IF,CASE的区别介绍

    假设有一数据表的状态字段设计为varchar类型,有以下值:NULL,pending,pending refund,refund,cancel. 我们知道查询状态为cancel的订单,SQL语句可以这样写:SELECT o.oid,o.moneyreceipt,o.moneyget,o.thecurrency,o.status FROM qorder o WHERE o.status = 'cancel' SQL语句能查询出正确的数据,但是当我们想查询状态为非cancel的订单时,可能会出麻烦,

  • 用sql命令修改数据表中的一个字段为非空(not null)的语句

    ALTER TABLE table1 ALTER COLUMN [name] varchar(60) NULL; table1 表名 name 字段名 为什么加上[],因为name是sql关键字会冲突出现错误,这样以防万一. 如果name字段已经创建了索引,如果需要修改的话,必须先删除索引才能正确的进行.

  • mysql not in、left join、IS NULL、NOT EXISTS 效率问题记录

    NOT IN.JOIN.IS NULL.NOT EXISTS效率对比 语句一:select count(*) from A where A.a not in (select a from B) 语句二:select count(*) from A left join B on A.a = B.a where B.a is null 语句三:select count(*) from A where not exists (select a from B where A.a = B.a) 知道以上三

  • sqlserver 不能将值NULL插入列id(列不允许有空值解决)

    错误现象: Microsoft OLE DB Provider for SQL Server 错误 '80040e2f'不能将值 NULL 插入列 'id',表 'web.dbo.dingdan':列不允许有空值.INSERT 失败. /Untitled-2.asp,行 115 原因分析: SQL数据库中,建立表时没有将id列标识规范设置为"是".所以大家在创建表的时候一定将id设为自动增加id,标识之类的. 解决办法: 点击表,修改,设置id列标识规范为"是",如

随机推荐