CTE和SubQuery之间的区别?


答案有两种版本,一种使用a SubQuery,另一种使用a CTE来解决相同的问题。


现在,使用CTE (Common Table Expression)over as 的好处是什么ub-query(因此,查询的实际操作更具可读性)


使用CTEover子选择的唯一好处是我实际上可以为子查询命名。当将CTE用作简单(非递归)CTE时,两者之间还有其他区别吗?


慕运维8079593
浏览 703回答 3
3回答

DIEA

在子查询与简单(非递归)CTE版本中,它们可能非常相似。您将必须使用探查器和实际执行计划来发现任何差异,而这将特定于您的设置(因此我们无法完全告诉您答案)。在一般 ; CTE可以递归使用;子查询不能。这使得它们特别适合于树形结构。

阿晨1998

Common Table Expression(当不使用它进行递归查询时)的主要优点是封装,而不是必须在希望使用它的每个位置声明子查询,您只需定义一次即可,但是有多个引用对此。但是,这并不能意味着它只执行一次(按照这个非常的答案以前的迭代,感谢所有那些评论)。如果多次引用,查询肯定有可能多次执行;查询优化器最终决定如何解释CTE。

MMTTMM

CTE对于递归最有用:WITH hier(cnt) AS (&nbsp; &nbsp; &nbsp; &nbsp; SELECT&nbsp; 1&nbsp; &nbsp; &nbsp; &nbsp; UNION ALL&nbsp; &nbsp; &nbsp; &nbsp; SELECT&nbsp; cnt + 1&nbsp; &nbsp; &nbsp; &nbsp; FROM&nbsp; &nbsp; hier&nbsp; &nbsp; &nbsp; &nbsp; WHERE&nbsp; &nbsp;cnt < @n&nbsp; &nbsp; &nbsp; &nbsp; )SELECT&nbsp; cntFROM&nbsp; &nbsp; hier将返回@n行(最多101)。对于日历,虚拟行集等有用。它们也更具可读性(我认为)。除此之外,CTE的和subqueries是相同的。
打开App,查看更多内容
随时随地看视频慕课网APP