WITH子句和子查询之间的区别? 您所在的位置:网站首页 with和and有什么区别 WITH子句和子查询之间的区别?

WITH子句和子查询之间的区别?

2024-07-11 11:13| 来源: 网络整理| 查看: 265

WITH子句用于subquery factoring,也称为公用表表达式或CTE:

WITH query_name子句允许您为子查询块指定名称。然后,可以通过指定query_name在查询中引用多个位置的子查询块。Oracle数据库通过将查询名视为内联视图或临时表来优化查询。

在第二个示例中,您所说的temp_table是一个内联视图,而不是一个临时表。

在许多情况下,选择使用哪种查询取决于您的首选样式,CTE可以使代码更具可读性,特别是对于多级子查询(当然,观点各不相同)。如果只引用CTE/inline视图一次,您可能看不到性能上的任何差异,优化器可能最终得到相同的计划。

但是,当您需要在多个地方使用相同的子查询时,例如在联合中,它们特别有用。您可以将内联视图拉出到CTE中,这样代码就不会重复,如果优化器认为这是有益的,它将允许优化器将其具体化。

例如,这个人为设计的示例:

代码语言:javascript复制select curr from ( select curr from tableone t1 left join tabletwo t2 on (t1.empid = t2.empid) ) temp_table where curr >= 0 union all select -1 * curr from ( select curr from tableone t1 left join tabletwo t2 on (t1.empid = t2.empid) ) temp_table where curr < 0

可以重构为:

代码语言:javascript复制with temp_table as ( select curr from tableone t1 left join tabletwo t2 on (t1.empid = t2.empid) ) select curr from temp_table where curr >= 0 union all select -1 * curr from temp_table where curr < 0

子查询不再需要重复。重复的代码越复杂,从维护的角度来看,使用CTE就越有利。子查询的开销越大,使用CTE带来的性能好处就越多,尽管优化器通常很擅长弄清楚您在做什么。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有