企业网站的功能中国国建设监理协会网站
news/
2025/9/30 4:42:25/
文章来源:
企业网站的功能,中国国建设监理协会网站,网站seo分析,抚养网站建设MySQL WITH AS及递归查询
WITH AS 官网#xff1a;WITH 是 SQL 中的一个关键字#xff0c;用于创建临时表达式#xff08;也称为 Common Table Expression#xff0c;CTE#xff09;#xff0c;它允许你在一个查询中临时定义一个表达式#xff0c;然后在后续的查询中引…MySQL WITH AS及递归查询
WITH AS 官网WITH 是 SQL 中的一个关键字用于创建临时表达式也称为 Common Table ExpressionCTE它允许你在一个查询中临时定义一个表达式然后在后续的查询中引用它。 理解当我们使用WITH AS 他会帮我们创建一个临时的表这个临时表只在本次SQL中生效。当我们使用这个临时表二次以上时他的效率是会比我们原本写两个一模一样的子查询是要搞的。 语法
WITH cte_name (column_name1, column_name2, ...) AS (-- CTE 查询SELECT ...FROM ...WHERE ...
)
-- 主查询
SELECT ...
FROM cte_name
WHERE ...实例
WITH UserNoDisable as (-- 查询出用户表中disable为0的数据select * from User where disable 0
)
select Stu.*,UserNoDisable.Extra from Stu Join UserNoDisable on Stu.Id UserNoDisable.Id
union all
select Tea.*,UserNoDisable.Extra from Tea Join UserNoDisable on Stu.Id UUserNoDisableser.Id;
-- 通过临时表可以使用我们的SQL变得更简洁原本需要写两次子查询的可以替换为去查临时表这也大大的提供了我们的性能。注意临时表一次可以建多个。
WITH tab1 as(...),tab2 as(...) select ....递归运算WITH RECURSIVE AS
在临时表的基础上添加RECURSIVE 来达到递归运算。
with RECURSIVE tab1(n) as (-- 这里是初始条件select 1-- 使用递归需要加上UNION ALL 关键字union all-- 这里是递归查询 按什么样的规则输出值每一次递归都会将前一次的查询结果做为输入直到查询的结果集为空时停止递归select n1 from tab1 where n 10
)
select * from tab1;结果
|n |
|1 | -- 1.初始条件结果
|2 | -- 2.拿初始条件的结果按递归查询的规则执行一次
|3 | -- .... 那上一次的
|4 |
|5 |
|6 |
|7 |
|8 |
|9 |
|10| -- 查到这里后下一次查询结果为空了则停止递归。递归查询使用 WITH RECURSIVE 关键字结合递归公共表达式RCTE来实现。它的执行顺序可以分为以下几步 初始查询 首先执行递归查询的初始部分也就是非递归的部分这部分的结果作为递归查询的起点。 递归查询 接着执行递归部分这部分会基于初始查询的结果逐步地进行迭代。每次迭代会将前一次迭代的结果作为输入然后应用递归规则。 递归终止条件 在递归查询的过程中必须定义一个终止条件要不然就是死循环当满足终止条件时递归将停止。 合并结果 将递归查询的结果与初始查询的结果进行合并得到最终的查询结果。 总结来说递归查询首先执行一个初始查询然后基于初始查询的结果进行递归迭代直到满足了设定的终止条件为止。最终将递归查询的结果与初始查询的结果合并得到最终的查询结果。 需要注意的是在编写递归查询时一定要谨慎地定义好递归规则和终止条件以避免无限循环或者递归层级过深导致的性能问题。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/922467.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!