`

从一个表中查找另一表没有的记录

阅读更多
引用

   如果要从一个表中查询另一个表不存在的记录,这样的情况从不同数据的角度去分析,有些数据库提供了差集的函数,有些没有要写子查询。

1、DB2、postgreSQL差集函数except
select deptno from emp
except
select deptno from dept

2、Oracle的差集函数minus
select deptno from emp
minus
select deptno from dept

3、Mysql和sqlserver不支持差集函数,使用子查询
select deptno from dept where deptno not in (select deptno from emp)

但是使用not in的时候一定要注意null值的问题,in 和not in操作里面相当于or操作。
如果
   select deptno from dept where deptno not in (10,20,null)
这样等效于
   select deptno from dept where deptno not (deptno =10 or deptno = 20 or deptno =null)

not (deptno =10 or deptno = 20 or deptno =null) = (false or false or null)=(false or null)

在SQL中,TRUE or null的结果是true,而false or null的结果是null,所以在使用in谓词和or计算时,值可能是null的情况,这一点要记住。
要解决这样问题,可以使用not Exists和相关子查询
select deptno from dept d where not exists(select 'xx' from emp e where e.deptno = d.deptno)


分享到:
评论

相关推荐

    数据结构实验

    编写程序构造一个有序表La,从键盘接收一个关键字key,用二分查找法在La 中查找key,若找到则提示查找成功并输出key所在的位置,否则提示没有找到信息。 2.编写程序实现Hash表的建立、删除、插入以及查找操作。 ...

    arcgis工具

    使用一个属性字段作为超链 在内容表中右击包含一个超链接字段的图层,然后点击properties ,单击Display选项卡。选中Supprt Hyper3. Hyperlinks using field选项,单击下拉箭头并点击一个字段。 单击Document or URL...

    Excel新增工具集

    10、检查两列同行两单元格是否相同:由ID号意义相同的从表向主表合并列记录时,往往先将从表记录粘贴到主表中,然后删除从表中的ID等与主表重复的列记录,本命令用来比较两列同行单元格(ID号)是否相同。 (九)工作...

    计算机二级公共基础知识

    从线性表的第一个元素开始,依次将线性表中的元素与被查找的元素相比较,若相等则表示查找成功;若线性表中所有的元素都与被查找元素进行了比较但都不相等,则表示查找失败。 例如,在一维数组[21,46,24,99,57,...

    MySQL数据库:索引概述.pptx

    索引用来快速地寻找那些具有特定值的记录,如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。 索引提供指针以指向...

    SQL COOKBOOK(压缩1/2)

    3.4从一个表中查找另一个表没有的值 3.5在一个表中查找与其他表不匹配的记录 3.6向查询中增加联接而不影响其他联接 3.7检测两个表中是否有相同的数据 3.8识别和消除笛卡儿积 3.9聚集与联接 3.10聚集与外联接 ...

    SQL COOKBOOK(压缩2/2)

    3.4从一个表中查找另一个表没有的值 3.5在一个表中查找与其他表不匹配的记录 3.6向查询中增加联接而不影响其他联接 3.7检测两个表中是否有相同的数据 3.8识别和消除笛卡儿积 3.9聚集与联接 3.10聚集与外联接 ...

    入门学习Linux常用必会60个命令实例详解doc/txt

    hda1中的“1”代表hda的第一个硬盘分区 (partition),hda2代表hda的第二主分区,第一个逻辑分区从hda5开始,依此类推。此外,可以直接检查 /var/log/messages文件,在该文件中可以找到计算机开机后系统已辨认出来的...

    c程序设计习题参考(谭浩强三版)习题参考解答

    写一个函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。 76 10.6输入一行文字,找出其中大写字母,小写字母,空格,数字及其他字符各有多少。 77 10.7写一个函数,将一个3×3的矩阵转置。 77 9.8...

    Excel 2007数据透视表完全剖析 3/7

    12.2.2 怎样才能同时刷新一个工作簿中的所有数据透视表 281 12.2.3 怎样使用一种独特的顺序对数据项进行排序,它既不是增序也不是降序 282 12.2.4 怎样将数据透视表转换为硬数据 283 12.2.5 有简单的方法填充...

    Excel 2007数据透视表完全剖析 1/7

    12.2.2 怎样才能同时刷新一个工作簿中的所有数据透视表 281 12.2.3 怎样使用一种独特的顺序对数据项进行排序,它既不是增序也不是降序 282 12.2.4 怎样将数据透视表转换为硬数据 283 12.2.5 有简单的方法填充...

    Excel 2007数据透视表完全剖析 5/7

    12.2.2 怎样才能同时刷新一个工作簿中的所有数据透视表 281 12.2.3 怎样使用一种独特的顺序对数据项进行排序,它既不是增序也不是降序 282 12.2.4 怎样将数据透视表转换为硬数据 283 12.2.5 有简单的方法填充...

    Excel 2007数据透视表完全剖析 4/7

    12.2.2 怎样才能同时刷新一个工作簿中的所有数据透视表 281 12.2.3 怎样使用一种独特的顺序对数据项进行排序,它既不是增序也不是降序 282 12.2.4 怎样将数据透视表转换为硬数据 283 12.2.5 有简单的方法填充...

    用C编写班级成绩管理系统

    输入记录函数 STUDENT *create() 这是一个无参函数,用来执行学生成绩记录的输入,当学生为@时停止输入,函数结束后,带回一个链表头的指针指向一下个学生的信息插在表头。 N-S流程图如下: head=NULL无条件循环 ...

    VISUAL-FOXPRO数据库管理系统试题.doc

    A)是同一个数据库中的两个表 B)不同数据库中的两个表 C)两上自由表 D)一个是数据库表另一个是自由表 7、 在VisualFoxPro中,可以对字段设置默认值的表( )。 A)必须是数据库表 B)必须是自由表 C)自由表或数据库表 D)...

    MySql基本查询、连接查询、子查询、正则表达查询讲解

    如果不满足这些查询条件中的任何一个,这样的记录将被排除掉。OR关键字的语法规则如下: 条件表达式1 OR 条件表达式2 [ …OR 条件表达式n ] 其中,OR可以用来连接两个条件表达式。而且,可以同时使用多个OR关键字,...

    C语言程序设计标准教程

    为了解决这个问题,C语言中给出了另一种构造数据类型——“结构”。 它相当于其它高级语言中的记录。  “结构”是一种构造类型,它是由若干“成员”组成的。 每一个成员可以是一个基本数据类型或者又是一个构造...

    经典全面的SQL语句大全

     UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1...

    人事管理系统

    第一步,将本程序和你做的系统合并:将两者的表导入合并到同一个mdb文件,其它对象导入合并到另一个mdb文件。(注:本程序用到的表的表名使用了特殊前缀USys,默认情况下Access会当做系统对象隐藏,要显示并查看请...

    同学的打包代码

    能够完成对使用适当的查询语言从一个或多个表中查找相关信息。 4、 矩阵类设计 定义Matrix类,参照实现: (1) 任意行数,列数矩阵的构建 (2) 常数矩阵 (3) 转置矩阵 (4) 矩阵加法,减法,乘法 (5) 矩阵...

Global site tag (gtag.js) - Google Analytics