在SQL中是否存在子查询比连接更有效的情况?

ctr*_*yan 7 sql join subquery

我看到人们假设有些情况下,子查询比连接更有效但我从未真正看到过这样的好例子?

如果要在连接上使用子查询,会出现什么情况?

Joe*_*lli 4

典型的示例是在一个表中搜索在另一个表中没有对应行的行。

SELECT a.*
    FROM TableA a
    WHERE NOT EXISTS(SELECT NULL FROM TableB b WHERE b.parent_id = a.id)
Run Code Online (Sandbox Code Playgroud)

一般好于

SELECT a.* 
    FROM TableA a
        LEFT JOIN TableB b
            ON a.id = b.parent_id
    WHERE b.parent_id IS NULL
Run Code Online (Sandbox Code Playgroud)

另请参阅:左外连接与 NOT EXISTS