Sql学习第三天——SQL 关于CTE(公用表达式)的递归
导读:1建站知识公用表表达式(CTE)具有一个重要的优点,那就是能够引用其自身,从而创建递归 CTE接下来详细介绍下:CTE 的基本语法结网站seo优化公司网站建设。
关于使用CTE(公用表表达式)的递归查询----SQL Server 2005及以上版本
公用表表达式 (CTE) 具有一个重要的优点,那就是能够引用其自身,从而创建递归 CTE。递归 CTE 是一个重复执行初始 CTE 以返回数据子集直到获取完整结果集的公用表表达式。
当网站seo优化诊断工具某个查询引用递归 CTE 时,它即被称为递归查询。递归查询通常用于返回分层数据,例如:显示某个组织图中的雇员或物料清单方案(其中父级产品有一个或多个组件,而那些组件可能还有子组件,或者是其他父级产品的组件)中的数据。
递归 CTE 可以极大地简化在 SELECT、INSERT、UPDATE、DELETE 或 CREATE VIEW 语句中运行递归查询所需的代码。在 SQL Server 的早期版本中,递归查询通常需要使用临时表、游标和逻辑来控制递归步骤流。
CTE 的基本语法结构如下:
复制代码 代码如下:
WITH expression_name [ ( column_name [,...n] ) ] AS ( CTE_query_definition ) --只有在查询定义中为所有结果列都提供了不同的名称时,列名称列表才是可选的。 --运行 CTE 的语句为: SELECT <column_list> FROM expression_name;
在使用CTE时应注意如下几点:CTE后面必须直接跟使用CTE的SQL语句(如select、insert、update等),否则,CTE将失效。如下面的SQL语句将无法正常使用CTE:
复制代码 代码如下:
with cr as ( select * from 表名 where 条件 ) --select * from person.CountryRegion --如果加上这句话后面用到cr将报错 select * from cr
2. CTE后面也可以跟其他的CTE,但只能使用一个with,多个CTE中间用逗号(,)分隔,如下面的SQL语句所示:复制代码 代码如下:
with cte1 as ( select * from table1 where name like '测试%' ), cte2 as ( select * from table2 where id > 20 ), cte3 as ( select * from table3 where price < 100 ) select a.* from cte1 a, cte2 b, cte3 c where a.id = b.id and a.id = c.id
3. 如果CTE的表达式名称与某个数据表或视图重名,则紧跟在该CTE后面的SQL语句使用的仍然是CTE,当然,后面的SQL语句使用的就是数据表或视图。4. CTE 可以引用自身,也可以引用高端网站建设在同一 WITH 子句中预先定义的 CTE。
5. 不能在 CTE_query_definition 中使用以下子句:
复制代码 代码如下:
COMPUTE 或 COMPUTE BY ORDER BY(除非指定了 TOP 子句) INTO 带有查询提示的 OPTION 子句 FOR XML FOR BROWSE
声明: 本文由我的SEOUC技术文章主页发布于:2023-05-24 ,文章Sql学习第三天——SQL 关于CTE(公用表达式)的递归主要讲述递归,表达式,SQL网站建设源码以及服务器配置搭建相关技术文章。转载请保留链接: https://www.seouc.com/article/web_6313.html