宝哥软件园

在SQL中EXISTS的用法:介绍EXISTS和IN的区别

编辑:宝哥软件园 来源:互联网 时间:2021-09-01

EXISTS IN SQL的功能是检查查询是否返回数据,这与“IN”明显不同。下面,边肖将介绍EXISTS在SQL中的用法以及EXISTS和IN的区别。感兴趣的伙伴可以阅读以下内容。

  SQL中EXISTS的用法:

例如,罗斯文数据库中有一个查询,如下所示

从客户中选择客户标识、公司名称

哪里存在(

从订单中选择订单编号

EXISTS是如何工作的?子查询返回OrderId字段,但外部查询正在查找CustomerID和CompanyName字段。这两个字段绝对不在OrderID中。它们如何匹配?

EXISTS用于检查子查询是否至少返回一行数据。子查询实际上并不返回任何数据,而是返回一个值“真”或“假”

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

语法:EXISTS子查询

参数:子查询是受限制的SELECT语句(不允许使用COMPUTE子句和INTO关键字)。

结果类型:布尔值如果子查询包含行,则返回真,否则返回FLASE。

示例表a:示例表b中的表:表ex

SQL中EXISTS的用法 EXISTS和IN的区别介绍

SQL中EXISTS的用法 EXISTS和IN的区别介绍

(1)在子查询中使用空仍然会返回结果集

从存在的表中选择*(选择空)

相当于:从表中选择*

SQL中EXISTS的用法 EXISTS和IN的区别介绍

(2)比较使用EXISTS和in的查询。请注意,两个查询返回相同的结果。

从存在的TableIn中选择*(从TableEx中选择BID,其中BNAME=TableIn。ANAME)

从表中选择*其中ANAME在(从表中选择BNAME)

SQL中EXISTS的用法 EXISTS和IN的区别介绍

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

从存在的TableIn中选择*(从TableEx中选择BID,其中BNAME=TableIn。ANAME)

从表中选择*其中ANAME=ANY(从表中选择BNAME)

SQL中EXISTS的用法 EXISTS和IN的区别介绍

“不存在”与“存在”的效果相反。如果子查询不返回行,则满足“不存在”中的WHERE子句。

  结论:

EXISTS(包括NOT EXISTS)子句的返回值是BOOL值。EXISTS有一个子查询语句(SELECT。出发地。),我称之为EXIST的内部查询语句。其中的查询语句返回一个结果集。EXISTS子句根据查询语句的结果集是否为空返回一个布尔值。

一种流行的理解是,外部查询表的每一行都被替换到内部查询中作为测试。如果内部查询返回的结果为非空,则EXISTS子句返回TRUE,并且该行可以用作外部查询的结果,否则不能用作结果。

分析器会先看语句的第一个字,当发现第一个字是SELECT关键字时,会跳转到FROM关键字,然后通过FROM关键字找到表名,将表加载到内存中。接下来,找到WHERE关键字。如果找不到,返回SELECT找到要分析的字段。如果找到WHERE,请分析条件,然后返回SELECT来分析字段。最后,形成一个我们想要的虚拟表。

WHERE关键字后面跟一个条件表达式。计算条件表达式后,会有一个返回值,即非0或0,为真,为假。同样,WHERE后面的条件也有一个返回值,true或false,以确定是否执行SELECT next。

分析器首先找到关键字SELECT,然后跳转到FROM关键字将STUDENT表导入内存,通过指针找到第一条记录,然后找到WHERE关键字计算其条件表达式。如果是真的,那么把这个记录放到一个虚拟表中,指针指向下一个记录。如果为false,指针直接指向下一条记录,不执行其他操作。始终搜索整个表,并将搜索到的虚拟表返回给用户。EXISTS是条件表达式的一部分,它也有一个返回值(真或假)。

在插入记录之前,有必要检查该记录是否已经存在。只有当记录不存在时,才会执行插入操作。您可以使用Exists条件句来防止插入重复记录。

插入表中(ASEX阿纳姆)

从表中选择前1名'张三','男'

WHERE不存在(从表In中选择* WHERE表In。AID=7)

EXISTS和in的使用效率通常高于IN,因为IN不取指标,但要看实际情况:

IN适用于外表大内心小的情况;EXISTS适用于外小内大的情况。

  in、not in、exists和not exists的区别:

  先谈谈in和exists的区别:

Exists: exists,后跟子查询。当子查询返回行数时,exists返回true。

从存在的类中选择*(从stu中选择“x ”,其中stu.cid=class.cid)

当in和exists在查询效率上进行比较时,in的查询效率比exists的查询效率要快

存在(

更多资讯
游戏推荐
更多+