问题:
查询学过编号为"01"并且也学过编号为"02"的课程的同学的信息
exists用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值true或false。
例表a:tablein
例表b:tableex
二). 比较使用 exists 和 in 的查询。注意两个查询返回相同的结果。
三). 比较使用 exists 和 = any 的查询。注意两个查询返回相同的结果。
not exists 的作用与 exists 正好相反。如果子查询没有返回行,则满足了 not exists 中的 where 子句。
一种通俗的可以理解为:将外查询表的每一行,代入内查询作为检验,如果内查询返回的结果取非空值,则exists子句返回true,这一行行可作为外查询的结果行,否则不能作为结果。
exists与in的使用效率的问题,通常情况下采用exists要比in效率高,因为in不走索引,但要看实际情况具体使用:
in适合于外表大而内表小的情况;exists适合于外表小而内表大的情况。