SQL中EXISTS理解使用

2023-11-16

SQL中EXISTS的理解使用

关联子查询

  • 在讲述EXISTS用法之前,先讲述一下关联子查询:
    关联子查询:是指在内查询中需要借助于外查询,而外查询离不开内查询的执行。

举个栗子:
在Oracle中自带的EMP表中,查询工资大于同职位平均工资的员工信息

  • EMP表:

在这里插入图片描述

  • Oracle语句:
select * from emp e
where sal >(select avg(sal) from emp where job = e.job);
  1. 首先执行外查询 select * from emp e,然后取出第一行数据,将数据中的JOB传递给内查询
  2. 内查询(select avg(sal) from emp where job = e.job) 根据外查询传递的JOB来查询平均工资,此时相当于select avg(sal) from emp where job = ‘CLERK’;
  3. 外查询取出的第一行数据比较sal是否大于内查询查出的平均工资,若大于,则保留改行作结果显示,反之则不保留
  4. 依次逐行查询、比较、是否保留;类似Java的for循环一样

执行结果:
在这里插入图片描述

EXISTS理解使用

EXISTS (subquery)
如果子查询包含任何行,则EXISTS运算符返回true。 否则它返回false。

用exists代替in是SQL性能优化的一个手段,使用exists能提高查询性能

举个栗子:
Oracle自带的EMP、DEPT表查询,部门编号小于30的所有员工信息

  • Oracle语句:
select * from emp where deptno in (select deptno from dept where deptno <30);

select * from emp e where exists (
	select * from dept d where  deptno <30 and d.deptno = e.deptno ;
);
  1. 首先执行外查询 select * from emp e,然后取出第一行数据,将数据中的部门编号传给内查询
  2. 内查询执行select * from dept d where deptno <30 and d.deptno = e.deptno ;看是否查询到结果,查询到,则返回true,否则返回false;比如传来的是30,则不满足deptno <30 and d.deptno = 30,返回false
  3. 内查询返回true,则该行数据保留,作为结果显示;反之,返回false,则不作结果显示
  4. 逐行查询看内查询是否查到数据,是否保留作结果显示

如果上述内查询为: select * from dept d where deptno <30
因为该语句都会查询到有结果,每一行都返回true,所以会查询到的是全部员工信息

查询结果:

在这里插入图片描述

not exists:子查询查询到有结果则返回false,没有查询到结果返回true
如下述语句,查询到的是deptno = 30 的员工信息(dept表只有10,20,30)

select * from emp e where not exists (
	select * from dept d where  deptno <30 and d.deptno = e.deptno ;
);

注意:exists子查询查找到有结果则返回true,即使子查询查到的内容为null,也返回true

个人学习理解,互相学习,互相指正!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL中EXISTS理解使用 的相关文章

随机推荐

  • Java数字字符串的判断与转换

    文章目录 引言 一 判断字符串是否为数字 1 1 第三方包StringUtils isNumeric 1 2 Java自带方法Character isDigit 1 3 正则表达式 二 将字符串转化为数字 2 1 整数 2 2 小数 参考
  • PostgreSQL基础+部署

    什么是postgreSQL PostgreSQL是一个功能强大的开源对象关系型数据库系统 他使用和扩展了SQL语言 并结合了许多安全存储和扩展最复杂数据工作负载的功能 PostgreSQL的起源可以追溯到1986年 作为加州大学伯克利分校P
  • Gin 框架学习

    Gin 框架
  • python 异步共享变量问题记录

    draw boxes multiprocessing Manager list item name image name replace jpg logging info Working on format item name pool m
  • 计组——搞懂主存储器芯片之地址线数据线及片选线和读写控制线

    一块存储芯片完整的构造图如下 内部进行了封装 存储矩阵是由一个一个的存储元构成 译码驱动电路分为译码器和驱动器 译码器会输出某一条线路的高电平信号 驱动器是为了保证译码器输出的高电平稳定可靠的 可以理解为将电信号放大的部件 读写电路是连通存
  • 【DL with Pytorch】第 3 章 :使用 DNN 的分类问题

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • Python:使用os模块执行cmd命令

    大家好 我是wangzirui32 今天我们来学习如何让Python执行cmd命令 很简单 输入代码 from os import system 在system里放入需要执行的命令即可 这里我写的是ipconfig命令 ok system
  • NSI50150ADT4G TO-252 ON安森美 150-350mA 50V 4.2W LED驱动器 工业级规格认证

    NSI50150ADT4G TO 252 ON安森美 150 350mA 50V 4 2W LED驱动器 工业级规格认证 是一款可调恒流调节器 CCR 是一种简单的 高性能低成本产品 适用于为 LED 中的调节电流提供成本高效的方案 C该
  • XGBoost实战1:boston房价预测

    boston房价数据集包括506个样本 每个样本包括13个特征变量和该地区的平均房价 房价显然和多个特征变量相关 对于XGBoost模型 我们分别用两种方式来创建 本章学习以下内容 1 XGBoost两种方式建模以及所需参数 2 gridS
  • 使用mysql_upgrade升级mysql5.1至5.6的数据库升级实施方案

    本方案是因为在工作中遇到的一个mysql主从功能配置的问题所引起的 有一个处在从位置上的mysql是5 1版本的 从5 1到5 6的mysql各种系统管理功能 像系统表表结构 日志文件格式等等均不一致 这时直接以5 1版本去作为一个5 6版
  • 信安软考 第十二章 网络安全审计技术

    一 网络安全审计概述 网络安全审计是指对网络信息系统的安全相关活动信息进行获取 记录 存储 分析和利用的工作 网络安全审计的作用在于建立 事后 安全保障措施 保存网络安全事件及行为信息 为网络安全事件分析提供线索及证据 以便发现潜在的网络安
  • rocketMq启动broker报错找不到或无法加载主类 Files\Java\jdk1.8.0_171\lib\dt.jar;C:\Program]

    假如弹出提示框提示 错误 找不到或无法加载主类 xxxxxx 1 打开runbroker cmd 将 CLASSPATH 加上英文双引号 切勿别加中文双引号 2 打开runserver cmd 同理 将 CLASSPATH 加上英文双引号
  • hexo+GitHub Pages一键搭建部署博客

    文章目录 前言 博客相关配置 matery主题相关配置 1 什么是 Hexo 2 准备工作 3 生成博客 4 更换主题 5 部署到github pages 总结 前言 现在技术更新迭代是非常的快 尤其是web方面 所以当前搭建一个博客差不多
  • Ubuntu16.04安装ROS Kinetic详细步骤

    文章目录 ROS安装 配置Ubuntu软件仓库 设置sources list 设置密钥 更新Debian软件包索引 安装ROS 初始化 rosdep 环境配置 构建工厂依赖 测试安装 开发环境 ROS安装 ROS Kinetic只支持Wil
  • CompletableFuture使用(二)

    CompletableFuture创建异步任务后 get 方法是阻塞到Future完成后返回结果 对于构建异步系统 需要将回调附加到CompletableFuture上 当Future完成时自动调用 就可以使用thenApply thenA
  • 【直播+福利】生产压测环境,如何做好安全保障?

    互联网 数字经济的不断发展使得系统架构不断演变 实现了从 单线程 到 多线程 多组件 再到 分布式 微服务 的一个跨越 分布式系统的复杂程度是公认的 牵一发而动全身 想要保障系统的稳定可用是所有企业的共有难题 生产全链路压测应运而生 可实际
  • Ansible-角色部署LAMP

    配置主机 root ansible cd etc ansible root ansible ansible ls ansible cfg hosts roles root ansible ansible vim hosts dev node
  • [图文]Openfiler应用篇(四) FTP和Quota

    本篇我们讨论openfiler FTP和Quota 磁盘配额 的应用 openfiler FTP和Quota功能必须在开启帐户功能的条件下才能使用 一 FTP应用 1 开启FTP 点击主菜单Services 在Manage Services
  • git的使用和规划

    1 拉取项目 在拉取项目的时候使用git rebase 这样分支管理更加清晰 2 提交项目 commit的时候不要把不希望别人看到的改到都commit上 commit的时候 要检查修改的文件代码书写是否正确 下图中打钩文件为想要提交的文件
  • SQL中EXISTS理解使用

    SQL中EXISTS的理解使用 关联子查询 EXISTS理解使用 关联子查询 在讲述EXISTS用法之前 先讲述一下关联子查询 关联子查询 是指在内查询中需要借助于外查询 而外查询离不开内查询的执行 举个栗子 在Oracle中自带的EMP表