1. 普通的子查询和关联子查询


两者的区别:
关联子查询:
子查询的内部引用了外层表信息,每行执行一次。外部查询执行一行,子查询就执行一次。并且是**部先查询一次,然后再执行一次内部查询

非关联子查询:子查询没有引用外层表信息,独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询,并且它是优先于外部查询先执行的,他执行了再执行外部。

对表中某一部分记录的集合进行比较时,就可以使用关联子查询。

关联子查询的执行逻辑:
外部先执行一次查询,取出一行数据(记录),接着将外部查询的数据作为内部子查询的条件(将外部查询某一字段的值,作为子查询WHERE子句条件的值),完成一次子查询,执行完毕后将子查询的值传递给外部查询,外部完成本轮查询,获得本次查询的结果。
外部再进行第二次查询,同样再取出另外一行数据,把数据作为子查询的条件,并获取子查询的值作为此次查询的条件完成本次查询。
以此循环,直到外部查询的每一行数据都匹配完成。

总结:
关联子查询, 其实就是子查询的特殊情况(因为需要用到外部表的记录),外表的记录每一行记录会先参与到每一次的子查询WHERE子句的筛选操作,再参与外部查询WHERE子句的筛选操作。