什么是“with [alias] as”在sql中?

时间:2013-04-22 20:00:04

标签: sql sql-server select

所以我在工作中遇到了以下内容,我可以立即告诉它但是我想找到它的任何文档,并且无法在线找到任何内容!

with details as
(
    select *,
    row_number() over (order by CREATED_DATE) as [Row]
    from
    (
        select top 10 * from MyTable
    ) t
)
select *
from details
where [Row] > @lowLimit and [Row] < @highLimit

这对我来说就像它的分页功能一样。但是,我并不确切知道我在sql语法中看到的结构。有没有人认识到这种语法,你能指出我可以在哪里阅读更多关于它的内容吗?

谢谢!

1 个答案:

答案 0 :(得分:6)

那是common table expression。这些用作单个查询的临时结果集。它们由以下查询处理,就像视图一样。你可以用它们做一些巧妙的东西,比如递归!

以下是链接中对其功能的简要说明:

  • 创建recursive查询。
  • 在不需要一般使用视图时替换视图;也就是说,您不必将定义存储在元数据中。
  • 通过从标量子选择派生的列或不具有确定性或具有外部访问权限的函数启用分组。
  • 在同一语句中多次引用结果表。

关于分号,请查看this答案以获得一个非常有用的提示 - 为什么你应该总是以分号开头的CTE。