数据库 EXISTS的用法
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的用法相关推荐
- 数据库中exists的用法
exists的用法 查询出的结果相当于boolean 类型 true 或 false . SELECT m.id, m.name, m.sex, m.age FROM t_employee m WHE ...
- 数据库学习之EXISTS的用法
在项目中总要多多少少接触一些sql语句,对于这个大概就是比较弱项了,既然是弱项了,那遇到就来个总结学习吧. 今天要总结的是exists的用法,对于这个感觉熟悉又陌生:熟悉是因为经常看到一些人用到,陌生 ...
- mysql数据库replace写入_MySQL数据库replace into 用法(insert into 的增强版)
MySQL数据库replace into 用法我以前介绍过相关的教程,但有加强版各位朋友可能不知道吧,今天我们来看一篇关于MySQL数据库replace into增强版的介绍与用法例子. Error ...
- MySQL中EXISTS的用法
比如在Northwind数据库中有一个查询为 SELECT c.CustomerId,CompanyName FROM Customers c WHERE EXISTS( SELECT OrderID ...
- SQL语句中EXISTS的用法
记录:258 在业务开展中,会遇到类似需求. 需求1:UPDATE表TEST_TB01中的记录:满足条件:这些记录不在TEST_TB02中. 需求2:UPDATE表TEST_TB01中的记录:满足条件 ...
- mysql raiserror_RAISERROR在SQL Server数据库中的用法
raiserror 是由单词 raise error 组成 raise 增加; 提高; 提升 raiserror 的作用: raiserror 是用于抛出一个错误.[ 以下资料来源于sql ser ...
- 查询前几条记录SQL在不同数据库中的用法
13,(1)查询前几条记录SQL在不同数据库中的用法; 1. ORACLE SELECT * FROM TABLE1 WHERE ROWNUM<=N 2. INFORMIX SELECT FIR ...
- exists sql用法_SQL关于IN和EXISTS的用法和区别,读完之后,大部分程序员收藏了....
1.exist,not exist一般都是与子查询一起使用. In可以与子查询一起使用,也可以直接in (a,b.....). 2.exist会针对子查询的表使用索引. not exist会对主子查询 ...
- sqlite mysql php_PHP实现的简单操作SQLite数据库类与用法示例
本文实例讲述了PHP实现的简单操作SQLite数据库类与用法.分享给大家供大家参考,具体如下: SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已 ...
最新文章
- 怎么用canvas画秒针_用canvas画一个钟表
- Android图片颜色比例,Android开发学习之路-图片颜色获取器开发(1)
- yolov5损失函数笔记
- c语言单链表数据显示,C++_C语言单链表常见操作汇总,C语言的单链表是常用的数据结 - phpStudy...
- CodeForces - 1333C Eugene and an array(尺取)
- ue4 怎么传递变量到另一个蓝图_[UE4蓝图]虚幻4中实现简易天气系统(三)—— 受风力影响的Cascade雨水粒子...
- Freeview%20Play是什么
- [Android自定义控件] Android Scroller工具类和GestureDetector的简单用法
- nginx+redis 实现 jsp页面缓存,提升系统吞吐率
- 文件解压缩,删除文件,创建文件,读取xml文件为json字符串,得到相对路径下的图片名称...
- 2021-03-12 16个车辆信息检测数据集收集汇总
- 尼古拉特斯拉 名言_尼古拉清洁技术的表面魅力
- 最小采样频率计算公式_信号分析基础(五):信号采样与混叠概念
- TCP/IP网络编程之基于TCP的服务端/客户端(一)
- 关于移位密码的破解问题
- 灵活提取Excel数据工具
- Electron Fiddle 通过代理加速下载(Mac)
- win10下面搜索框无法搜索应用的解决方案
- 信息用短信服务器发送什么意思,已用短信息服务发送是什么意思
- 【cocos2d-x4.0学习笔记】dya01
热门文章
- 一件小事引发的思考--如何学习
- Yolov5添加注意力机制
- 2023年CDGA考试模拟题库(701-800)
- 固态硬盘和机械硬盘的区别,全面对标谁是大腿
- agx 安装ros opencv_【ROS开源】Jetson Nano阿克曼转向机器人
- 02用d编程写与写行类型
- 密钥(yao)(yue)
- python modifysetup什么意思_##python 如何操作excel? 有米有能直接modify的,不要再推荐那些只能读或者只能写的了...
- 广西北海中学2021年高考成绩查询,2021年北海最好的高中排名,北海重点高中升学率排名...
- 验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。 例如: 1^3=1 2^3=3+5 3^3=7+9+11 4^3=13+15+17+19