为了账号安全,请及时绑定邮箱和手机立即绑定

【九月打卡】第19天 MySQL8.0 通用表表达式

标签:
MySQL

第一板块:玩转MySQL8.0新特性,4-1;4-2;4-3;4-4,董旭阳

第二,三板块:

  1. 通用表表达式

    (1)非递归CTE

  2. (2)递归 CTE

    如果某个 CTE 在子查询中引用了自己,就称为递归 CTE。

    (3)递归限制

    对于递归 CTE 而言,需要在递归SELECT部分包含一个终止递归的条件。

    系统变量 cte_max_recursion_depth 用于设置 CTE 递归的次数限制。如果 CTE 递归的次数超过了该变量的值,服务器将会强制终止语句的执行。

    系统变量 max_execution_time 用于设置当前会话中查询语句的超时时间。

    优化器提示 MAX_EXECUTION_TIME 用于设置当前查询语句的超时时间。

  3. CTE语法

    通用表表达式使用WITH子句进行定义,该子句可以包含一个或多个逗号分隔的从句。每个从句包含一个子查询,以及指定的名称。以下示例在WITH子句中定义了两个 CTE:cte1 和 

cte2,然后在顶层SELECT中进行引用:
WITH
  cte1 AS (SELECT a, b FROM table1),
  cte2 AS (SELECT c, d FROM table2)
SELECT b, d FROM cte1 JOIN cte2
WHERE cte1.a = cte2.c;
//举例:
-- 不适用CTE
select * from (select 1) as dt;
-- 使用CTE
with dt as (select 1)
select * from dt;

//举例:递归

WITH RECURSIVE cte (n) AS
(
  SELECT 1
  UNION ALL
  SELECT n + 1 FROM cte WHERE n < 5
)
SELECT * FROM cte;
// 以上语句的执行结果是一个连续的数字序列:
+------+
| n    |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
|    5 |
+------+

// 举例限止递归
考虑以下递归 CTE,它没有包含递归终止条件
WITH RECURSIVE cte (n) AS
(
  SELECT 1
  UNION ALL
  SELECT n + 1 FROM cte
)
SELECT * FROM cte;

第四板块:

https://img1.sycdn.imooc.com//632e9b3000013b3018930841.jpg

https://img1.sycdn.imooc.com//632e9b300001e7e218970836.jpg

https://img1.sycdn.imooc.com//632e9b3000018f0318950838.jpg


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
Web前端工程师
手记
粉丝
0
获赞与收藏
0

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消