大家好,我是全栈小5,欢迎阅读小5的系列文章。
这是《Sql Server》系列文章,每篇文章将以博主理解的角度展开讲解,
特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。
温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!
目录
使用场景
错误写法
--这样运行代码会出错
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】新手一分钟看懂在已有表基础上修改字段默认值和数据类型
总结:温故而知新,不同阶段重温知识点,会有不一样的认识和理解,博主将巩固一遍知识点,并以实践方式和大家分享,若能有所帮助和收获,这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。