在SQL中EXISTS的用法:介绍EXISTS和IN的区别
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
(1)在子查询中使用空仍然会返回结果集
从存在的表中选择*(选择空)
相当于:从表中选择*
(2)比较使用EXISTS和in的查询。请注意,两个查询返回相同的结果。
从存在的TableIn中选择*(从TableEx中选择BID,其中BNAME=TableIn。ANAME)
从表中选择*其中ANAME在(从表中选择BNAME)
(3)使用EXISTS和=ANY比较查询。请注意,两个查询返回相同的结果。
从存在的TableIn中选择*(从TableEx中选择BID,其中BNAME=TableIn。ANAME)
从表中选择*其中ANAME=ANY(从表中选择BNAME)
“不存在”与“存在”的效果相反。如果子查询不返回行,则满足“不存在”中的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的查询效率要快
存在(
版权声明:在SQL中EXISTS的用法:介绍EXISTS和IN的区别是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。