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的概念和相关子查询的概念相似,它的作用就是判断子查询得到的结果集是否是一个空集

    它和相关子查询一样,在子查询中用到父查询的条件。