exists用法
exists用法:select a.* from tb a where exists(select 1 from tb where name =a.name)
返回真假, 当 where 后面的条件成立,则列出数据,否则为空。
exists强调的是是否返回结果集,不要求知道返回什么。
比如:select name from student where sex = 'm' and mark exists(select 1 from grade where ...)
只要exists引导的子句有结果集返回,那么exists这个条件就算成立了,大家注意返回的字段始终为1,如果改成“select 2 from grade where ...”,那么返回的字段就是2,这个数字没有意义。所以exists子句不在乎返回什么,而是在乎是不是有结果集返回。
扩展资料
exist 相当于存在量词:表示集合存在,也就是集合不为空只作用一个集合。例如 exist P 表示P不空时为真;not exist P表示p为空时为真,in表示一个标量和一元关系的关系。例如:s in P表示当s与P中的某个值相等时为真; s not in P 表示s与P中的每一个值都不相等时为真。
in 把外表和内表作hash join,而exists是对外表作loop,每次loop再对内表进行查询。
绝对的认为exists比in效率高的说法是不准确的。这要看关联表的数据量大小。
如果查询的两个表大小相当,那么用in和exists差别不大。
如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in。