sql 语句系列(null 值处理)[八百章之第二章]
查找只存在一个表中的数据
有两张表:
EMP:
select * from emp

DEPT:

他们有共同的属性:deptno
现在要查询EMP 中的deptno不等于DEPTNO的deptno项。
解析:
select distinct DEPTNO from EMP where DEPTNO not in (
select DEPTNO from DEPT
)
注意:
因为需要查询的是DEPTNO,所以需要排除掉重复项。
其次上面的写法,如果DEPTNO在DEPT有null项上面的是错误的。
我在dept 中加入了 null 值:

得到的结果为空。
这里面关键点在于null的判断是 is 和 not is判断的。
看下not in 的展开式:
not in (DEPTNO=10||DEPTNO=20||DEPTNO=30||DEPTNO=40||DEPTNO=null)
本来有结果有一个50是不属于他们的。
那么把50输入进去会怎么样?
not in(false||false||false||false||false||null)
结果是not in (null)
我尝试使用:
select distinct DEPTNO from EMP where DEPTNO not in(null)
结果也是空,说明转换逻辑是正确的。
那么问题可以回到:
select distinct DEPTNO from EMP where DEPTNO!=null
因为null值不能通过!=判断,这样是不会返回结果的。
下面是有null值的时候的写法:
select distinct DEPTNO from EMP e where not exists(
select null from DEPT where e.DEPTNO=DEPT.DEPTNO
)
下面的not exists只需判断有和无,那么select null 换成其他也一样。
从一个表检索与另一个表不相关的行
这一个例子和上一个非常相似。
查找出那些部门没有员工:
select d.* from DEPT d left outer join EMP e on e.DEPTNO=d.DEPTNO where e.DEPTNO is null
解析:
和上面不同的是上面是针对列,而这个是针对行。
下一章
与外表之间
sql 语句系列(null 值处理)[八百章之第二章]的更多相关文章
- sql 语句系列(多表之链)[八百章之第三章]
新增连接查询而不影响其他连接查询 请看图: 这种情况我们一般会使用左连接的方式. select e.ENAME,d.LOC,eb.RECEIVED from emp e join dept d on( ...
- (七)修改上一条SQL语句,NULL值的滤空函数nvl
修改上一条SQL语句 1.用c命令来修改(c 即 change ) 默认,光标闪烁位置指向上一条SQL语句的第一行.输入二则定位到第二行. c /错误的关键字/正确的关键字 SQL form emp; ...
- SQL order by 语句对null值排序
记order by 语句对null值排序: 目录 记order by 语句对null值排序: MySQL: Oracle: SqlServer: MySQL: 将null值放在最后 select * ...
- SQL中的NULL值
除is [not] null之外,空值不满足任何查找条件.–如果null参与算术运算,则该算术表达式的值为null.–如果null参与比较运算,则结果可视为false.在SQL-92中可看成unkno ...
- SQL语句中=null和is null
平时经常会遇到这两种写法:IS NOT NULL与!=NULL.也经常会遇到数据库有符合条件!=NULL的数据,但是返回为空集合.实际上,是由于对二者使用区别理解不透彻. 默认情况下,推荐使用 IS ...
- 数据库 SQL :有关 NULL 值引发 TRUE、FALSE、UNKNOW 三值逻辑
在 Java.C# 中,相信如果是 boolean 类型值,只有两种选择 true.false.然而,在 SQL 查询中,NULL 值的引入,使得新增了 UNKNOW ,因此,就产生了 TRUE.FA ...
- 【SQL】含有NULL值的排序
查询结果中有NULL值,当进行升序排序时,NULL值默认为“最大值”,排在最后面.要想改变NULL值的显示顺序,只需要在SQL语句后面加上NULLS FIRST(排在前面),NULLS LAST(排在 ...
- 解决用 VB 中用 ADO 访问 数据库时 SQL 查询处理 Null 值的问题( 使用 iff(isNull(字段), 为空时的值,不为空时的值) 来处理)
程序的环境是 VB6 + ADO + Access,在用 SQL 语句查询时,希望把两个字段合并成一个字段,但其中一个字段 Null 值直接导致两个字段合并后也变成了 Null 值.之前只能用 VB ...
- sp_executesql得到执行sql语句的返回值
执行 sql语句,得到 变量的值 ' declare @Partition int; ); ); SET @SQLString = N'SELECT @RangeKeyOUT = $PARTITION ...
随机推荐
- ES6下的Function.bind方法
在JavaScript的使用中,this的指向问题始终是一个难点.不同的调用方式,会使this指向不同的对象.而使用call,apply,bind等方式,可改变this的指向,完成一些令人惊叹的黑魔法 ...
- chap1-HttpRequest测试类
# HttpRequest测试类, 封装请求方法 import requests class HttpRequest: def http_request(self, url, method, data ...
- cesium入门示例-探测效果
动画实现方式通过多个canvas实现,参考的https://www.yueyanshaosun.cn/ysCesium/views/5_geometricObj2_entityCanvas.html ...
- Java实现Luhm算法--银行卡号合法性校验
银行卡是由"发卡行标识代码 + 自定义 + 校验码 "等部分组成的. 银联标准卡与以往发行的银行卡最直接的区别就是其卡号前6位数字的不同. 银行卡卡号的前6位是用来表示发卡银行 ...
- <JZOJ5910>duliu
愤怒 考场想到正解 然后觉得我的“正解”和正解差不多 一样的效果 被忽略的与正解的不同也想到了 然而 我懒得再写 于是快乐10分 气坏了 #include<cstdio> #include ...
- 修改npm安装的全局路径和配置环境变量
我之前安装npm时全是默认安装,模块全部安装在C盘了,今天心血来潮,把路径改到了D盘,结果改完后模块都不能识别了,都提示XX模块不是内部命令,这其实是环境变量配置的问题,我都是按照网上的教程改的环境变 ...
- DOS命令编译JAVA程序
上篇文章给大家写了怎么安装JDK配置,现在这篇文章我们就来学习下怎么在DOS命令下编译JAVA程序,以后没编译器都可以直接编译啦(嘻嘻!) 我这里就用永远的 “Hello wrold!”来演示下吧. ...
- <USACO09FEB>庙会捷运Fair Shuttleの思路
一个没有被我成功证明的 贪心 但是 ac了的 别人排序都是排终点.但我的排终点错了emm排起点才对qvq 有没有人友情看看怎么证(没有 #include<cstdio> #include& ...
- php发送post请求的4种方式
http://blog.163.com/fan_xy_qingyuan/blog/static/188987748201411943815244/ class Request{ public stat ...
- loadrunner通过socket测接口
#include "lrs.h" Action() { //建立到服务端的连接 lrs_create_socket("socket1",&quo ...