OUTER/CROSS APPLY 在 SQL 中的实际应用
OUTER 和 CROSS APPLY 是强大的 SQL 运算符,提供增强的数据操作功能。 本文通过实际示例阐明了它们的实际用途。
场景 1:每个类别前 N 条记录
OUTER APPLY 对于检索每组中的前 N 行被证明是非常有价值的。 考虑查找每个存储过程的前两个参数:
<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>
这可以有效地将 sys.dm_exec_query_plan
应用于 sys.dm_exec_query_stats
中的每一行。
场景 3:重用计算列
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:逆透视多个列组
对于违反 1NF 的数据集,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 数据操作技能,为复杂的数据挑战提供高效的解决方案。
以上是OUTER/CROSS APPLY 如何解决现实世界中的 SQL 数据操作挑战?的详细内容。更多信息请关注PHP中文网其他相关文章!