数据库 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的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已 ...
最新文章
- 你真的了解Grid布局吗?
- .NET 获取客户端的操作系统版本、浏览器版本和IP地址
- openresty模板html页面,openresty 中使用lua 的页面模板类库template来渲染页面
- Ubuntu 12.04 图形界面问题解决 开机死机
- wpf控件设计时支持(3)
- Model 3车主对FSD套件不满意 德国法院下令特斯拉回购汽车
- NUAAccst计算机网络第四章网络层复习
- 脑筋急转弯合集,主治心情不好!开心一笑
- linux下加载so文件
- PS 如何导出ico图标
- everedit 保存机器学习路径注意事项
- 2021最新Android常用开源库总结,建议收藏
- 详解APK静态分析引擎`quark-engine`的5大功能
- (3)登录界面——登录
- 我喜欢出发(汪国真)
- 计算机的表白隐藏功能,微信隐藏符号功能大全 情人节可以发这些表白
- ubuntu18.04 安装 roboware-studio
- Docker原生网络、自定义网络、Docker容器通信、跨主机容器网络
- POJ 2375 Cow Ski Area 增加最小边使图强连通
- “我是集美貌与才华于一身的PAPI酱”,她为什么可以融到1200万