推荐回答
Exists方法描述如果在Dictionary对象中指定的关键字存在,返回True,若不存在,返回False。举个例子吧:select*fromawhereexistsselect*frombwherea.id=b.id;a表和b表使用id关联,这条语句的含义是,当b表能够查询出结果时,existsselect*frombwherea.id=b.id子句为真,只有满足exists结果为真时,才会查询出a表的记录。这样解释你明白了吗。
黎益华2019-12-22 00:36:19
提示您:回答为网友贡献,仅供参考。
其他回答
-
比如在Northwind数据库中有一个查询为SELECTc.CustomerId,CompanyNameFROMCustomerscWHEREEXISTSSELECTOrderIDFROMOrdersoWHEREo.CustomerID=c.CustomerID这里面的EXISTS是如何运作呢?子查询返回的是OrderId字段,可是外面的查询要找的是CustomerID和CompanyName字段,这两个字段肯定不在OrderID里面啊,这是如何匹配的呢? EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False。EXISTS指定一个子查询,检测行的存在。语法:EXISTSsubquery参数:subquery是一个受限的SELECT语句不允许有COMPUTE子句和INTO关键字。结果类型:Boolean如果子查询包含行,则返回TRUE,否则返回FLASE。在子查询中使用NULL仍然返回结果集select*fromTableInwhereexistsselectnull等同于:select*fromTableIn比较使用EXISTS和IN的查询。注意两个查询返回相同的结果。select*fromTableInwhereexistsselectBIDfromTableExwhereBNAME=TableIn.ANAMEselect*fromTableInwhereANAMEinselectBNAMEfromTableEx比较使用EXISTS和=ANY的查询。注意两个查询返回相同的结果。select*fromTableInwhereexistsselectBIDfromTableExwhereBNAME=TableIn.ANAMEselect*fromTableInwhereANAME=ANYselectBNAMEfromTableExNOTEXISTS的作用与EXISTS正好相反。如果子查询没有返回行,则满足了NOTEXISTS中的WHERE子句。结论:EXISTS包括NOTEXISTS子句的返回值是一个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条件句防止插入重复记录。INSERTINTOTableInANAME,ASEX SELECTtop1''张三'',''男''FROMTableInWHEREnotexistsselect*fromTableInwhereTableIn.AID=7EXISTS与IN的使用效率的问题,通常情况下采用exists要比in效率高,因为IN不走索引,但要看实际情况具体使用:IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。
樊成钢2019-12-22 00:54:14
-
简单点说ifEXISTSselect*fromtbwherename=''abc''就是这样用上面这句话的意思是查询表tb找name=''abc''的列如果有找到exists返回真否则返回假加上if语句还可以取反操作ifnotexists。
边冬霞2019-12-22 00:18:27
-
WHEREEXISTSSELECTT.IDFROMTEACHERTWHERET.ID=S.TID等同于WHERES.TIDINSELECTT.IDFROMTEACHER但exists的效率要高很多你原来那句相当于没有任何关联关系所以相当于SELECTS.NAMEFROMSTUDENTS不懂hi我。
龙少红2019-12-22 00:06:04
-
exists:强调的是是否返回结果集,不要求知道返回什么,比如:selectnamefromstudentwheresex=''m''andmarkexistsselect1fromgradewhere...,只要exists引导的子句有结果集返回,那么exists这个条件就算成立了,大家注意返回的字段始终为1,如果改成“select2fromgradewhere...”,那么返回的字段就是2,这个数字没有意义。所以exists子句不在乎返回什么,而是在乎是不是有结果集返回。而exists与in最大的区别在于in引导的子句只能返回一个字段,比如:selectnamefromstudentwheresex=''m''andmarkinselect1,2,3fromgradewhere...,in子句返回了三个字段,这是不正确的,exists子句是允许的,但in只允许有一个字段返回,在1,2,3中随便去了两个字段即可。而notexists和notin分别是exists和in的对立面。exists1桔子水果202019-7-21香蕉水果152019-7-32青菜蔬菜192019-7-2注意in只允许有一个字段返回有一种方法可以实现:SELECTId,Name,Class,COUNT,DateFROMtable1tWHEREDate=SELECTMAXDateFROMtable1WHEREId=t.Id。
黄盛珠2019-12-21 23:54:36