OUTER 和 CROSS APPLY 在 SQL 查询中的实际应用
OUTER 和 CROSS APPLY 显着提高了各种实际应用程序中的 SQL 查询效率和可读性。 以下是一些说明性示例:
1。 每个类别的前 N 条记录:
在提取每组的前 N 行时,使用 APPLY 比嵌套查询具有性能优势。 考虑这个例子:
<code class="language-sql">SELECT pr.name, pa.name FROM sys.procedures pr OUTER APPLY (SELECT TOP 2 * FROM sys.parameters pa WHERE pa.object_id = pr.object_id ORDER BY pr.name) pa ORDER BY pr.name, pa.name;</code>
2。使用表值函数:
CROSS APPLY 简化了表值函数对外部查询的各个行的应用:
<code class="language-sql">SELECT * FROM sys.dm_exec_query_stats AS qs CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle);</code>
3。 高效的别名重用:
CROSS APPLY 允许在单个查询中有效地重用列别名:
<code class="language-sql">SELECT number, doubled_number, doubled_number_plus_one FROM master..spt_values CROSS APPLY (SELECT 2 * CAST(number AS BIGINT)) CA1(doubled_number) CROSS APPLY (SELECT doubled_number + 1) CA2(doubled_number_plus_one);</code>
4。 简化列逆透视:
APPLY 提供了一个优雅的解决方案,用于从具有非标准化结构的表中取消透视多个列组:
<code class="language-sql">SELECT Id, Foo, Bar, GrpName FROM T CROSS APPLY (VALUES('1', Foo1, Bar1), ('2', Foo2, Bar2), ('3', Foo3, Bar3)) V(GrpName, Foo, Bar);</code>
以上是OUTER 和 CROSS APPLY 如何增强实际应用程序中的 SQL 查询?的详细内容。更多信息请关注PHP中文网其他相关文章!