美文网首页
sql自学笔记(十七)——MySQL8.0版本的新特性(七)

sql自学笔记(十七)——MySQL8.0版本的新特性(七)

作者: itczt | 来源:发表于2019-05-05 08:54 被阅读0次

    非递归CTE

    MySQL8.0开始支持通用表达式(CTE),即WITH子句。

    派生表 通用表达式
    SELECT * FROM(SELECT 1)AS dt; WITH cte AS (SELECT 1) SELECT * FROM cte;

    在8.0中关于非递归CTE的使用

    先查看一下使用的派生表

    select * from (select 1) as dt;
    

    使用通用表表达式如何实现相应的功能

    with dt as (select 1)
    ->select * from dt;
    

    cte的另外一个功能

    with cte1(id) as(select 1),
    ->(cte 2(id) as (select id+1 from cte1))
    ->select * from cte1 join cte2;
    

    好处:前面定义好的通用表变量可以拿到后面使用

    递归CTE

    递归CTE在查询中引用自己的定义,使用RECURSLVE表示
    例:

    WITH RECURSIVE cte(n)AS #表示他是一个递归形式的cte
    (
        SELECT 1 #递归的初始化语句
        UNION ALL
        SELECT n+1 FROM cte WHERE n<5 #cte表示通用表表达式本身 
    )
    SELECT * FROM cte;
    

    在8.0中递归的cte的使用
    首先演示一下生成数字序列的效果




    使用递归调用表表达式如何查询员工表它的上下级关系

    select * from employees order by id;
    

    展示一下员工从上至下的管理关系

    with recarsive employee _paths(id,name,path)as
    ->(
    ->select id,name,cast(id as char(200))
    ->from employees
    ->where manger_id is null
    ->union all
    ->select e.id,e.name,concat(ep path,',',e.id)
    ->from employee_paths as ep join employees ase
    ->on ep.id = e.manager_id
    ->)
    ->select * from employee _ paths order by path;
    

    相关文章

      网友评论

          本文标题:sql自学笔记(十七)——MySQL8.0版本的新特性(七)

          本文链接:https://www.haomeiwen.com/subject/ffiqoqtx.html