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 |
TRUE |
FALSE |
NULL | |
TRUE |
TRUE |
TRUE |
TRUE |
FALSE |
TRUE |
FALSE |
NULL |
NULL |
TRUE |
NULL |
NULL |
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。
相关推荐
-
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列标识规范为"是",如
随机推荐
- Angularjs自定义指令实现分页插件(DEMO)
- 浅谈Spring bean 生命周期验证
- PHP创建单例后台进程的方法示例
- 转载一个别人收藏的精典网站Ruby,HIBERNATE相关
- Angularjs 实现动态添加控件功能
- 有关商业网站的建立和运作
- 清除cookies的批处理(bat)
- spring框架下websocket的搭建
- Python中Class类用法实例分析
- javascript使用正则获取url上的某个参数
- MySQL中联表更新与删除的语法介绍
- Python使用tablib生成excel文件的简单实现方法
- Python基于smtplib实现异步发送邮件服务
- Django框架如何使用ajax的post方法
- 微信小程序搭建及解决登录失败问题
- PowerShell入门教程之编写和使用脚本模块实例
- 推荐8款jQuery轻量级树形Tree插件
- 完美实现八种js焦点轮播图(上篇)
- WebsitePanel Standalone Server安装配置方法
- JAVA-NIO之Socket/ServerSocket Channel(详解)