【发布时间】:2014-03-18 11:22:06
【问题描述】:
我正在阅读一篇关于使用apply & join 关键字的文章。查看一些 SQL,其中一个示例使用内部联接,而其他示例使用 apply 关键字。
这是表格图片
SELECT E.EMPID, E.NAME, E.DEPTID, D.NAME
FROM EMPLOYEE E
INNER JOIN DEPARTMENT D ON E.DEPTID = D.DEPTID
SELECT E.EMPID, E.NAME, E.DEPTID, CA.NAME
FROM EMPLOYEE E
CROSS APPLY
(SELECT * FROM DEPARTMENT D WHERE D.DEPTID = E.DEPTID) CA
两个查询都返回相同的输出和相同的执行计划。这是图片
再次使用外部应用和左外部连接
SELECT E.EMPID, E.NAME, E.DEPTID, D.NAME
FROM EMPLOYEE E
LEFT JOIN DEPARTMENT D ON E.DEPTID = D.DEPTID
SELECT E.EMPID, E.NAME, E.DEPTID, OA.NAME
FROM EMPLOYEE E
OUTER APPLY
(SELECT * FROM DEPARTMENT D WHERE D.DEPTID = E.DEPTID) OA
现在两个查询再次产生相同的输出和相同的执行计划。所以我只是不明白在什么样的情况下应该使用OUTER APPLY 或CROSS APPLY 而不是内连接或左外连接?
所以如果可能的话,请使用相同的场景,应该使用OUTER APPLY or CROSS APPLY,谢谢
【问题讨论】:
-
您可以在可以使用
joins 的情况下使用它们。您可以将apply用于join不容易工作的其他情况,例如调用表值函数、从相关子查询返回多行以及从每个匹配项中提取前行。 -
@Gordon Linoff :- 你能给出你所说的一小部分样本吗?谢谢
标签: sql sql-server tsql cross-apply