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的真值表


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-13 06:36:43

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

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的真值表 TR

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

T-sql语句修改SQL Server数据库逻辑名、数据库名、物理名的方法_MsSql

本文实例讲述了T-sql语句修改SQL Server数据库逻辑名.数据库名.物理名的方法.分享给大家供大家参考,具体如下: 更改MSSQL数据库物理文件名Sql语句的写法 注意:要在活动监视器里面确保没有进程连接你要改名的数据库!!!!!!!!!!!!!!!!!!!! Sql语句如下 USE master --改逻辑名 ALTER DATABASE YQBlog MODIFY FILE(NAME='YQBlogAA',NEWNAME='YQBlog') -- GO ALTER DATABASE

SQL Server实现将特定字符串拆分并进行插入操作的方法_MsSql

本文实例讲述了SQL Server实现将特定字符串拆分并进行插入操作的方法.分享给大家供大家参考,具体如下: --循环执行添加操作 declare @idx as int While Len(@UserList) > 0 Begin Set @idx = Charindex(',', @UserList); --只有一条数据 If @idx = 0 and Len(@UserList) > 0 Begin Insert Into BIS_MsgCenterInfo(ID,MsgID,UserI

【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; 查询结果展示:  

SQL Server中的Forwarded Record计数器影响IO性能的解决方法_MsSql

一.简介      最近在一个客户那里注意到一个计数器很高(Forwarded Records/Sec),伴随着间歇性的磁盘等待队列的波动.本篇文章分享什么是forwarded record,并从原理上谈一谈为什么Forwarded record会造成额外的IO. 二.存放原理     在SQL Server中,当数据是以堆的形式存放时,数据是无序的,所有非聚集索引的指针存放指向物理地址的RID.当数据行中的变长列增长使得原有页无法容纳下数据行时,数据将会移动到新的页中,并在原位置留下一个指向新