sql中的相关子查询和不相关子查询
本文最后更新于:5 个月前
-
不相关子查询:
select × from tableOneName where columnName in ( select columnName from tableTwoName where condition );
类似上面这种先执行子查询,得到一个集合或者值,然后将这个集合或者值作为一个常量,再带入到父查询中作为父查询的一个条件。
-
相关子查询
通俗来说,相关子查询就是:子查询要用到父查询中的值。
select * from tableOneName where columnOneName in ( select columnOneName from tableTwoName where tableTwoName.columnTwoName = tableOneName.columnTwoName )
先扫描副查询的数据表中的每一条记录,然后将当前这条记录中的子查询会用到的数据,带入到子查询中,然后再执行子查询,得到结果,然后再将这个结果回代到父查询中,判断父查询的值是否为true,如果为true则把这条记录放回到结果集中,反之,如果为false,则不会把这条记录放到结果集中。
此时,子查询就用到了父查询的结果
-
如何判断是相关的还是不相关的子查询?
如果子查询不能脱离父查询单独执行,那么就是相关子查询。
-
EXISTS
exists的概念和相关子查询的概念相似,它的作用就是判断子查询得到的结果集是否是一个空集。
它和相关子查询一样,在子查询中用到父查询的条件。
本博客所有文章除特别声明外,均采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 。转载请注明出处!