首页 > 数据库 > mysql教程 > OUTER 和 CROSS APPLY 如何增强实际应用程序中的 SQL 查询?

OUTER 和 CROSS APPLY 如何增强实际应用程序中的 SQL 查询?

Linda Hamilton
发布: 2025-01-10 07:47:41
原创
832 人浏览过

How Can OUTER and CROSS APPLY Enhance SQL Queries in Real-World Applications?

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板