• 技术文章 >数据库 >Oracle

    oracle中not exists的用法是什么

    长期闲置长期闲置2022-03-03 10:46:27原创832

    在oracle中,“not exists”用于判断子句是否返回结果集,若子句返回结果集为false,若子句没有返回结果集则为true,语法为“select * from daul where not exists(子句查询条件)”。

    本教程操作环境:Windows10系统、Oracle 11g版、Dell G3电脑。

    oracle中not exists的用法是什么

    exists : 强调的是是否返回结果集,不要求知道返回什么, 比如:

      select name from student where sex = 'm' and mark exists(select 1 from grade where ...)

    只要exists引导的子句有结果集返回,那么exists这个条件就算成立了,大家注意返回的字段始终为1,如果改成“select 2 from grade where ...”,那么返回的字段就是2,这个数字没有意义。所以exists子句不在乎返回什么,而是在乎是不是有结果集返回。

    而 exists 与 in 最大的区别在于 in引导的子句只能返回一个字段,比如:

      select name from student where sex = 'm' and mark in (select 1,2,3 from grade where ...)

    ,in子句返回了三个字段,这是不正确的,exists子句是允许的,但in只允许有一个字段返回,在1,2,3中随便去了两个字段即可。

    而not exists 和not in 分别是exists 和 in 的 对立面。

    下面详细描述not exists的过程:

    如下:

    表A

    ID NAME

    1 A1

    2 A2

    3 A3

    表B

    ID AID NAME

    1 1 B1

    2 2 B2

    3 2 B3

    表A和表B是1对多的关系 A.ID => B.AID

    SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE A.ID=B.AID)

    执行结果为

    1 A1

    2 A2

    原因可以按照如下分析

    SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=1)
    --->SELECT * FROM B WHERE B.AID=1有值返回真所以有数据
    SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=2)
    --->SELECT * FROM B WHERE B.AID=2有值返回真所以有数据
    SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=3)
    --->SELECT * FROM B WHERE B.AID=3无值返回真所以没有数据

    NOT EXISTS 就是反过来

    SELECT ID,NAME FROM A WHERE NOT EXIST (SELECT * FROM B WHERE A.ID=B.AID)

    执行结果为

    3 A3

    EXISTS = IN,意思相同不过语法上有点点区别,好像使用IN效率要差点,应该是不会执行索引的原因

    SELECT ID,NAME FROM A  WHERE ID IN (SELECT AID FROM B)

    NOT EXISTS = NOT IN ,意思相同不过语法上有点点区别

    SELECT ID,NAME FROM A WHERE ID NOT IN (SELECT AID FROM B)

    有时候我们会遇到要选出某一列不重复,某一列作为选择条件,其他列正常输出的情况.

    推荐教程:《Oracle视频教程

    以上就是oracle中not exists的用法是什么的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:oracle
    上一篇:oracle中not like的用法是什么 下一篇:oracle无法删除用户怎么办
    Web大前端开发直播班

    相关文章推荐

    • oracle怎么转换字段类型• oracle存储过程中怎么声明变量• oracle怎么查询并赋值给变量• 如果查询oracle的字符编码• Oracle学习之using关键字(实例详解)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网