位置: 编程技术 - 正文

SQL中Exists的用法

编辑:rootadmin

推荐整理分享SQL中Exists的用法,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

比如在Northwind数据库中有一个查询为

这里面的EXISTS是如何运作呢?子查询返回的是OrderId字段,可是外面的查询要找的是CustomerID和CompanyName字段,这两个字段肯定不在OrderID里面啊,这是如何匹配的呢?

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

EXISTS 指定一个子查询,检测 行 的存在。

语法: EXISTS subquery

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

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

例表A:TableIn 例表B:TableEx

(一). 在子查询中使用 NULL 仍然返回结果集

等同于: select * from TableIn

(二). 比较使用 EXISTS 和 IN 的查询。注意两个查询返回相同的结果。

SQL中Exists的用法

(三). 比较使用 EXISTS 和 = ANY 的查询。注意两个查询返回相同的结果。

NOT EXISTS 的作用与 EXISTS 正好相反。如果子查询没有返回行,则满足了 NOT EXISTS 中的 WHERE 子句。

结论:

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 条件句防止插入重复记录。

EXISTS与IN的使用效率的问题,通常情况下采用exists要比in效率高,因为IN不走索引,但要看实际情况具体使用:

IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。

以上所述是小编给大家介绍的SQL中Exists的用法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对积木网网站的支持!

数据库SQL语句优化总结(收藏) 网上关于SQL优化的教程很多,但是比较杂乱。近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充。这篇文章

MySQL查询两个日期之间记录的方法 网上搜索出来的结果多是下面答案:MySQL中,如何查询两个日期之间的记录,日期所在字段的类型为datetime(--::)解决方案:直接使用=就可以

Sql Server中判断表、列不存在则创建的方法 一、SqlServer中如何判断表中某列是否存在首先跟大家分享SqlServer中判断表中某列是否存在的两个方法,方法示例如下:比如说要判断表A中的字段C是否存

标签: SQL中Exists的用法

本文链接地址:https://www.jiuchutong.com/biancheng/320274.html 转载请保留说明!

上一篇:SQL server 定时自动备份数据库的图文方法(sqlserver数据库定时任务)

下一篇:数据库SQL语句优化总结(收藏)(数据库sql语句优化作用是什么)

  • 缴纳购销合同印花税怎么算
  • 企业所得税优惠政策最新2023小微企业
  • 工程图纸设计费用收费标准
  • 定期定额不开票违法吗
  • 技术合同免税备案流程2022年
  • 企业转给法人的流程
  • 淘汰生产母猪处理销售收入的分录怎么处理?
  • 收到违约金需要缴纳所得税吗
  • 合伙制公司有董事会吗
  • 新成立的公司每天付款有要求吗
  • 员工基本养老保险缴纳比例
  • 向客户发放,赠品怎么写
  • 个人垫付汽车修理怎么办
  • word中的引号方向不对
  • 如何安装u盘的系统
  • win11如何添加快捷方式
  • 如何在数据透视表中增加一行
  • 业务招待费汇算清缴扣除标准
  • 取得基建借款分录
  • ieview.exe 是什么
  • 我告诉你windows7旗舰版
  • php入门课程
  • 实收资本与注册资本之间的关系
  • thinkphp 插件
  • 企业利润取出税费有哪些
  • php curlfile
  • 股东出资证明书范本
  • 织梦发布文章栏目怎么不显示
  • json转pojo
  • 土地租赁费计入哪个科目
  • 怎么看是不是真发
  • 折旧汇总分配周期参数设定完成可以更改吗
  • SQL Server 2012 FileTable 新特性详解
  • 公司收到社保局的提醒函怎么办
  • 租入厂房再转租新租赁准则如何处理
  • 小规模未开票收入按1%还是3%
  • 公司代垫个税账务处理
  • 购入农产品的增值税税率是多少
  • 销售货物时发票多开了金额如何处理?
  • 预付账款科目的余额如果在借方,则在资产负债表上
  • 抵扣旅客运输服务申报时填哪行
  • 现金日记账如何填写
  • 票面利率大于市场利率,则发行价格一定( )面值
  • 固定资产折旧计入什么费用
  • 发票丢失了可以用复印件加盖发票章入账吗
  • 诉讼费用负担原则是什么
  • 股东股权转让印花税 公司承担
  • 3%税率专票为什么不能抵扣
  • 预缴的税款抵扣有时间限制吗
  • 账户的基本结构不包括的内容有
  • mac安装mysql
  • mysql输入中文显示乱码
  • windows更新kb5001391
  • 怎样破解bios密码
  • 怎么查看445端口有没有关闭
  • 喝了阿胶补血口服液嗜睡
  • win8怎么看windows
  • bios里怎么找不到usb启动
  • 为快捷方式建立快捷方式
  • 在mac中该如何共享文件夹
  • windows8开发者预览版中文版ISO下载
  • linux计划任务每天执行一次
  • Metaio in Unity3d 教程---Metaio扫描图片要求(Image Tracking)
  • unity and unity
  • android 自定义
  • shell while
  • jquery提交表单调用serialize方法
  • bootstrap入门
  • 段正淳算正面人物吗
  • 原生js实现promise.all
  • <script defer> defer 是什么意思
  • 详解Bootstrap四种图片样式
  • 容易混淆的词汇
  • javascript的作用域
  • Qt for Android - ANT_HOME is set incorrectly or ant could not be located
  • 房产税纳税义务终止
  • 税务执法资格考试
  • 江苏省定额规则
  • 发现个人所得税被物业挂职
  • 什么督导组词
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设