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。

时间: 2024-11-14 12:01:30

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

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

NULL值影响查询条件的结果,并且结果很微妙.   以下是SQL中AND,OR,NOT的真值表.                                                 表1    AND的真值表 TRUE FALSE NULL TRUE TRUE FALSE NULL FALSE FALSE FALSE FALSE NULL NULL FALSE NULL                                               表2    OR的真值

sql NULL值的处理方法

sql null值的处理方法 sqlserver 中isnull的用法一例 数据库教程中有一列记录文章的访问次数.我现在要实现的功能是,每刷新一次页面. 访问次数+1.sql语句,art_count为访问次数,int类型. update article set art_count="(art_count+1) where art_id="3 但如果art_count为null,则不起作用. 如果是oracle用decode可以很容易的实现此功能.sqlserver中如何实现类似的功能呢

sql server-sqlserver 查询条件为nvarchar类型缺报“转换成数据类型 int 时失败”

问题描述 sqlserver 查询条件为nvarchar类型缺报"转换成数据类型 int 时失败" 解决方案 OrderId这一列类型是不是int类型 解决方案二: 直接在外面select * from 表 where OrderId = ' 11db...'试试看,报错了没 解决方案三: 是不是视图内容定义本身有问题

hibernate模糊查询条件是中文 但是不能返回值

问题描述 小弟请教一下:我用的hibernate模糊查询页面的数据是utf-8,数据库也是模糊查询的条件是中文他就是返回为空但是是数字他又正确了我保证hql语句正确的用的是SSHspring我配置了characterEncoding=UTF-8请大家赐教 解决方案 解决方案二:你首先要看看不的数据库的中文是否是乱码,是的话那就不能查询出来,数字又正确,说明你的查询语句没错,仔细看下解决方案三:数据库不是乱码,数据是正确的查询语句如下:fromDepartmentdmwheredm.departm

请教各位同仁有关hibernate查询语句中order by中null值的处理,

问题描述 目前有个DAO方法,采用HQL进行查询,最后order by A desc ,但A有空值,由于,后台数据库是oracle,所以采用desc到话,默认null值最大,查询出来的结果排在了最前面,实际需求需要把空值的结果集放在最后.不知道各位有没有遇到类似的问题,帮忙解决一下!先谢谢了 解决方案 最最土的办法:加一个标识列alter table xx add (flags char(1) default '0');update xx set flags = '1' where tt is

【SQL】查询数据库中某个字段有重复值出现的信息

select name,mobile from [GeneShop].[dbo].[xx_member] where mobile in ( SELECT mobile FROM [GeneShop].[dbo].[xx_member] group by mobile having COUNT (mobile) <> 1) order by mobile; 查询结果展示:  

悠哉悠哉,一个复合查询方法

几乎每个完整的应用程序都会需要一个复合查询.建立一个功能强大的复合查询首先必须要能够动态生成查询条件,其次应该能够对查询到的数据进行修改,最后这个复合查询最好能够对一对多的两个表建立条件进行查询. 在VFP里建立查询的方法主要有这么几种:一是使用VFP中自带的SearchClass类:二是建立一个查询:三是建立一个视图,其中包括参数化视图.宏替换Sql语句视图:四是建立一个Grid,将其数据源设置为SQL语句或临时表. 不管哪一种方法,其实质都是使用SQL语句. 这几种方法各有各的优点,也都有缺

asp.net 网页动态查询条件的实现_实用技巧

场景 最近有一个需求,会在 mongodb 中插入各种类型的数据,算是记录业务日志的数据库吧. 因为业务对象类型都不同,所以插入的数据格式也完全不同. 除此之外,还需要提供一个查询界面,可以搜索数据. 插入数据没任何问题,但是查询就- 查询设计方案 首先想到的是让用户直接输入 mongodb 查询语法,类似 json 格式.但是使用者虽然也是开发,可都不熟悉这个语法,所以放弃了. 第二个想法是让用户输入 SQL 语句,然后转换- 结果以失败而告终. 最后,看到了 iTunes 智能播放列表的交互

thinkphp区间查询、统计查询与SQL直接查询实例分析_php实例

本文实例讲述了thinkphp区间查询.统计查询与SQL直接查询.分享给大家供大家参考.具体方法如下: 一.区间查询: 复制代码 代码如下: $data['id']=array(array('gt',4),array('lt',10));//默认关系是(and)并且的关系  //SELECT * FROM `tp_user` WHERE ( (`id` > 4) AND (`id` < 10) )    $data['id']=array(array('gt',4),array('lt',10