【Sql Server】with as 递归查询的简单使用 以及在视图工具下的使用,注意小事项一

52 篇文章 1 订阅
18 篇文章 0 订阅

大家好,我是全栈小5,欢迎阅读小5的系列文章。

这是《Sql Server》系列文章,每篇文章将以博主理解的角度展开讲解,

特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。

温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!

目录

使用场景

错误写法

正确写法

公用表表达式

1. 递归查询

2. 多个公用表表达式

3. 写入INSERT语句

4. 更新UPDATE语句

5. 删除DELETE语句

文章推荐


使用场景

错误写法

--这样运行代码会出错
WITH 
cte(name) AS (
SELECT '张三A' name
UNION ALL
SELECT '张三B' name
UNION ALL
SELECT '张三C' name
)

正确写法

WITH 
cte(name) AS (
SELECT '张三A' name
UNION ALL
SELECT '张三B' name
UNION ALL
SELECT '张三C' name
)
select * from cte

公用表表达式

WITH语句在 SQL Server 中用于创建临时命名的结果集,也称为“公用表表达式”(Common Table Expression,CTE)。它允许您为查询定义一个或多个临时结果集,这些临时结果集可以在后续查询中引用。WITH语句通常与SELECT、INSERT、UPDATE或DELETE语句一起使用。

下面是WITH语句的基本语法:

WITH expression_name [ ( column_name [,...] ) ] AS ( CTE_query_definition )

在这里:

  • expression_name 是公用表表达式的名称。
  • column_name 是可选的,用于指定公用表表达式的列名。
  • CTE_query_definition 是公用表表达式的查询定义,它类似于SELECT语句。

以下是一些WITH语句的常见用法和示例代码:

1. 递归查询

递归查询是WITH语句的一个强大特性,它允许您在查询中引用自身,从而处理树状数据结构或层次结构数据。

WITH RecursiveCTE AS ( SELECT EmployeeID, ManagerID FROM Employees WHERE EmployeeID = @EmployeeID UNION ALL SELECT e.EmployeeID, e.ManagerID FROM Employees e INNER JOIN RecursiveCTE r ON e.ManagerID = r.EmployeeID ) SELECT * FROM RecursiveCTE;

2. 多个公用表表达式

您可以在单个WITH语句中定义多个公用表表达式,然后在后续查询中引用它们。

WITH CTE1 AS ( SELECT * FROM Table1 ), CTE2 AS ( SELECT * FROM Table2 ) SELECT * FROM CTE1 JOIN CTE2 ON CTE1.ID = CTE2.ID;

3. 写入INSERT语句

您可以在INSERT语句中使用WITH语句来指定要插入的数据集,这在需要对数据进行转换或筛选时非常有用。

WITH DataToInsert AS ( SELECT * FROM SourceTable WHERE Condition = 'Value' ) INSERT INTO DestinationTable (Column1, Column2, ...) SELECT Column1, Column2, ... FROM DataToInsert;

4. 更新UPDATE语句

类似于INSERT语句,您也可以在UPDATE语句中使用WITH语句来指定要更新的数据集。

WITH DataToUpdate AS ( SELECT * FROM SourceTable WHERE Condition = 'Value' ) UPDATE DestinationTable SET Column1 = DataToUpdate.Column1, Column2 = DataToUpdate.Column2 FROM DataToUpdate WHERE DestinationTable.ID = DataToUpdate.ID;

5. 删除DELETE语句

与INSERT和UPDATE一样,您也可以在DELETE语句中使用WITH语句来指定要删除的数据集。

WITH DataToDelete AS ( SELECT * FROM SourceTable WHERE Condition = 'Value' ) DELETE FROM DestinationTable FROM DestinationTable JOIN DataToDelete ON DestinationTable.ID = DataToDelete.ID;

这些示例演示了WITH语句的一些常见用法,可以根据具体的需求和数据结构调整这些示例代码。

文章推荐

【Sql Server】通过Sql语句批量处理数据,使用变量且遍历数据进行逻辑处理

【新星计划回顾】第六篇学习计划-通过自定义函数和存储过程模拟MD5数据

【新星计划回顾】第四篇学习计划-自定义函数、存储过程、随机值知识点

【Sql Server】Update中的From语句,以及常见更新操作方式

【Sql server】假设有三个字段a,b,c 以a和b分组,如何查询a和b唯一,但是c不同的记录

【Sql Server】新手一分钟看懂在已有表基础上修改字段默认值和数据类型

总结:温故而知新,不同阶段重温知识点,会有不一样的认识和理解,博主将巩固一遍知识点,并以实践方式和大家分享,若能有所帮助和收获,这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全栈小5

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值