最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

使用公用表表达式的递归查询

来源:动视网 责编:小采 时间:2020-11-09 15:07:43
文档

使用公用表表达式的递归查询

使用公用表表达式的递归查询:微软从SQL2005起引入了CTE(Common Table Expression)以强化T-SQL。 公用表表达式 (CTE) 具有一个重要的优点,那就是能够引用其自身,从而创建递归 CTE。递归 CTE 是一个重复执行初始 CTE 以返回数据子集直到获取完整结果集的公用表表达式。 当某个查询引用递
推荐度:
导读使用公用表表达式的递归查询:微软从SQL2005起引入了CTE(Common Table Expression)以强化T-SQL。 公用表表达式 (CTE) 具有一个重要的优点,那就是能够引用其自身,从而创建递归 CTE。递归 CTE 是一个重复执行初始 CTE 以返回数据子集直到获取完整结果集的公用表表达式。 当某个查询引用递


微软从SQL2005起引入了CTE(Common Table Expression)以强化T-SQL。 公用表表达式 (CTE) 具有一个重要的优点,那就是能够引用其自身,从而创建递归 CTE。递归 CTE 是一个重复执行初始 CTE 以返回数据子集直到获取完整结果集的公用表表达式。 当某个查询引用递

  微软从SQL2005起引入了CTE(Common Table Expression)以强化T-SQL。

  公用表表达式 (CTE) 具有一个重要的优点,那就是能够引用其自身,从而创建递归 CTE。递归 CTE 是一个重复执行初始 CTE 以返回数据子集直到获取完整结果集的公用表表达式。

  当某个查询引用递归 CTE 时,它即被称为递归查询。递归查询通常用于返回分层数据,例如:显示某个组织图中的雇员或物料清单方案(其中父级产品有一个或多个组件,而那些组件可能还有子组件,或者是其他父级产品的组件)中的数据。

  递归 CTE 可以极大地简化在 SELECT、INSERT、UPDATE、DELETE 或 CREATE VIEW 语句中运行递归查询所需的代码。在 SQL Server 的早期版本中,递归查询通常需要使用临时表、游标和逻辑来控制递归步骤流。有关公用表表达式的详细信息,请参阅使用公用表表达式。

伪代码和语义

————————————————————————————

递归 CTE 结构必须至少包含一个定位点成员和一个递归成员。以下伪代码显示了包含一个定位点成员和一个递归成员的简单递归 CTE 的组件。

WITH cte_name ( column_name [,...n] )

AS

(

CTE_query_definition –- Anchor member is defined.

UNION ALL

CTE_query_definition –- Recursive member is defined referencing cte_name.

)

-- Statement using the CTE

SELECT * FROM cte_name

递归执行的语义如下:

  1. 将 CTE 表达式拆分为定位点成员和递归成员。
  2. 运行定位点成员,创建第一个调用或基准结果集 (T0)。
  3. 运行递归成员,将 Ti 作为输入,将 Ti+1 作为输出。
  4. 重复步骤 3,直到返回空集。
  5. 返回结果集。这是对 T0 到 Tn 执行 UNION ALL 的结果。

    示例

    ————————————————————————————

    原表:

     现在有一个需求,要查询出某个省下面的所有市和区(查询结果包含省)。如果只使用SQL语句来实现,需要使用到游标、临时表等技术。但在SQL Server2005中还可以使用CTE来实现。

    WITH district

    AS

    (

    --获得第一个结果集,并更新最终结果集

    SELECT * FROM t_tree WHERE id = 0

    UNION ALL

    --下面的select语句首先会根据从上一个查询结果集中获得的id值来查询parent_id

    --字段的值,然后district就会变当前的查询结果集,并继续执行下面的select 语句

    --如果结果集不为null,则与最终的查询结果合并,同时用合并的结果更新最终的查

    --询结果;否则停止执行。最后district的结果集就是最终结果集。

    SELECT a.* FROM t_tree aINNER JOIN district bONa.parent_id = b.id

    )

    SELECT * FROM district

    查询结果:

    有关使用公用表表达式的详细信息,请参阅使用公用表表达式的递归查询。

文档

使用公用表表达式的递归查询

使用公用表表达式的递归查询:微软从SQL2005起引入了CTE(Common Table Expression)以强化T-SQL。 公用表表达式 (CTE) 具有一个重要的优点,那就是能够引用其自身,从而创建递归 CTE。递归 CTE 是一个重复执行初始 CTE 以返回数据子集直到获取完整结果集的公用表表达式。 当某个查询引用递
推荐度:
标签: 查询 使用 微软
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top