EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False
EXISTS 指定一个子查询,检测 行 的存在。

语法: EXISTS subquery
参数: subquery 是一个受限的 SELECT 语句 (不允许有 COMPUTE 子句和 INTO 关键字)。

结果类型: Boolean 如果子查询包含行,则返回 TRUE ,否则返回 FLASE 。

使用:

user表:

user_1011表:

语句:

select * from user u1 where exists(select * from user_1011 u2 where u1.name = u2.name);

结果:

注意,子查询中与主查询中的是否有关联会影响到结果!

在某些情况下,EXISTS关键字可以用=ANY和IN来代替功能。

select * from TableIn where exists(select BID from TableEx where BNAME=TableIn.ANAME)
select * from TableIn where ANAME in(select BNAME from TableEx)
select * from TableIn where exists(select BID from TableEx where BNAME=TableIn.ANAME)
select * from TableIn where ANAME=ANY(select BNAME from TableEx)

总结:

EXISTS(包括 NOT EXISTS )子句的返回值是一个BOOL值。 EXISTS内部有一个子查询语句(SELECT ... FROM...), 我将其称为EXIST的内查询语句。其内查询语句返回一个结果集。 EXISTS子句根据其内查询语句的结果集空或者非空,返回一个布尔值。

一种通俗的可以理解为:将外查询表的每一行,代入内查询作为检验,如果内查询返回的结果取非空值,则EXISTS子句返回TRUE,这一行行可作为外查询的结果行,否则不能作为结果。

分析器会先看语句的第一个词,当它发现第一个词是SELECT关键字的时候,它会跳到FROM关键字,然后通过FROM关键字找到表名并把表装入内存。接着是找WHERE关键字,如果找不到则返回到SELECT找字段解析,如果找到WHERE,则分析其中的条件,完成后再回到SELECT分析字段。最后形成一张我们要的虚表。
WHERE关键字后面的是条件表达式。条件表达式计算完成后,会有一个返回值,即非0或0,非0即为真(true),0即为假(false)。同理WHERE后面的条件也有一个返回值,真或假,来确定接下来执不执行SELECT。
分析器先找到关键字SELECT,然后跳到FROM关键字将STUDENT表导入内存,并通过指针找到第一条记录,接着找到WHERE关键字计算它的条件表达式,如果为真那么把这条记录装到一个虚表当中,指针再指向下一条记录。如果为假那么指针直接指向下一条记录,而不进行其它操作。一直检索完整个表,并把检索出来的虚拟表返回给用户。EXISTS是条件表达式的一部分,它也有一个返回值(true或false)。

在插入记录前,需要检查这条记录是否已经存在,只有当记录不存在时才执行插入操作,可以通过使用 EXISTS 条件句防止插入重复记录。
INSERT INTO TableIn (ANAME,ASEX) 
SELECT top 1 '张三', '男' FROM TableIn
WHERE not exists (select * from TableIn where TableIn.AID = 7)

EXISTS与IN的使用效率的问题,通常情况下采用exists要比in效率高,因为IN不走索引,但要看实际情况具体使用:
IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。

数据库 EXISTS的用法相关推荐

  1. 数据库中exists的用法

    exists的用法 查询出的结果相当于boolean 类型 true 或 false . SELECT m.id, m.name, m.sex, m.age FROM t_employee m WHE ...

  2. 数据库学习之EXISTS的用法

    在项目中总要多多少少接触一些sql语句,对于这个大概就是比较弱项了,既然是弱项了,那遇到就来个总结学习吧. 今天要总结的是exists的用法,对于这个感觉熟悉又陌生:熟悉是因为经常看到一些人用到,陌生 ...

  3. mysql数据库replace写入_MySQL数据库replace into 用法(insert into 的增强版)

    MySQL数据库replace into 用法我以前介绍过相关的教程,但有加强版各位朋友可能不知道吧,今天我们来看一篇关于MySQL数据库replace into增强版的介绍与用法例子. Error ...

  4. MySQL中EXISTS的用法

    比如在Northwind数据库中有一个查询为 SELECT c.CustomerId,CompanyName FROM Customers c WHERE EXISTS( SELECT OrderID ...

  5. SQL语句中EXISTS的用法

    记录:258 在业务开展中,会遇到类似需求. 需求1:UPDATE表TEST_TB01中的记录:满足条件:这些记录不在TEST_TB02中. 需求2:UPDATE表TEST_TB01中的记录:满足条件 ...

  6. mysql raiserror_RAISERROR在SQL Server数据库中的用法

    raiserror  是由单词 raise error 组成 raise  增加; 提高; 提升 raiserror 的作用: raiserror 是用于抛出一个错误.[ 以下资料来源于sql ser ...

  7. 查询前几条记录SQL在不同数据库中的用法

    13,(1)查询前几条记录SQL在不同数据库中的用法; 1. ORACLE SELECT * FROM TABLE1 WHERE ROWNUM<=N 2. INFORMIX SELECT FIR ...

  8. exists sql用法_SQL关于IN和EXISTS的用法和区别,读完之后,大部分程序员收藏了....

    1.exist,not exist一般都是与子查询一起使用. In可以与子查询一起使用,也可以直接in (a,b.....). 2.exist会针对子查询的表使用索引. not exist会对主子查询 ...

  9. sqlite mysql php_PHP实现的简单操作SQLite数据库类与用法示例

    本文实例讲述了PHP实现的简单操作SQLite数据库类与用法.分享给大家供大家参考,具体如下: SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已 ...

最新文章

  1. 怎么用canvas画秒针_用canvas画一个钟表
  2. Android图片颜色比例,Android开发学习之路-图片颜色获取器开发(1)
  3. yolov5损失函数笔记
  4. c语言单链表数据显示,C++_C语言单链表常见操作汇总,C语言的单链表是常用的数据结 - phpStudy...
  5. CodeForces - 1333C Eugene and an array(尺取)
  6. ue4 怎么传递变量到另一个蓝图_[UE4蓝图]虚幻4中实现简易天气系统(三)—— 受风力影响的Cascade雨水粒子...
  7. Freeview%20Play是什么
  8. [Android自定义控件] Android Scroller工具类和GestureDetector的简单用法
  9. nginx+redis 实现 jsp页面缓存,提升系统吞吐率
  10. 文件解压缩,删除文件,创建文件,读取xml文件为json字符串,得到相对路径下的图片名称...
  11. 2021-03-12 16个车辆信息检测数据集收集汇总
  12. 尼古拉特斯拉 名言_尼古拉清洁技术的表面魅力
  13. 最小采样频率计算公式_信号分析基础(五):信号采样与混叠概念
  14. TCP/IP网络编程之基于TCP的服务端/客户端(一)
  15. 关于移位密码的破解问题
  16. 灵活提取Excel数据工具
  17. Electron Fiddle 通过代理加速下载(Mac)
  18. win10下面搜索框无法搜索应用的解决方案
  19. 信息用短信服务器发送什么意思,已用短信息服务发送是什么意思
  20. 【cocos2d-x4.0学习笔记】dya01

热门文章

  1. 一件小事引发的思考--如何学习
  2. Yolov5添加注意力机制
  3. 2023年CDGA考试模拟题库(701-800)
  4. 固态硬盘和机械硬盘的区别,全面对标谁是大腿
  5. agx 安装ros opencv_【ROS开源】Jetson Nano阿克曼转向机器人
  6. 02用d编程写与写行类型
  7. 密钥(yao)(yue)
  8. python modifysetup什么意思_##python 如何操作excel? 有米有能直接modify的,不要再推荐那些只能读或者只能写的了...
  9. 广西北海中学2021年高考成绩查询,2021年北海最好的高中排名,北海重点高中升学率排名...
  10. 验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。 例如: 1^3=1 2^3=3+5 3^3=7+9+11 4^3=13+15+17+19