mysql exists用法
在mysql中,有个关键字exists比较难理解,今天就来搞明白其含义和应用 exists的使用总是跟子查询关联起来,一种是不相关子查询,对于exists来说更常用的是相关子查询 不相关子查询:子查询和父查询没有直接的关系。只要子查询为真,则返回父查询的所有结果。否则返回空 select A.id from A where exists (select B.name from B where B.name = "hello world"); 相关子查询: select A.id from A where exists (select B.id from B where B.id = A.bid); 分析上面这句相关子查询的工作步骤: 步骤1,首先从表A取出一条数据,然后其中把A.bid列数据带入到子查询中, 步骤2,执行子查询,当子查询结果不为空时,返回true,否则返回false, 步骤3,父查询根据子查询的结果,如果为true,则把该条数据加入返回结果集中,否则跳过 遍历表A的所有数据,重复执行以上3个步骤,完成后把结果集返回 分析exists和in的使用场景。 原则:小表查询内嵌,大表查询外套 查询效率分析,从减少遍历查询次数角度优化: 当父查询表的数据量大,子查询表数据量小时,使用in;因为使用in,子查询是嵌套在父查询里面的,因此需要遍历父查询