mysql8其它新特性

文章目录

  • MySQL8.0新特性
    • 新特性1:窗口函数
      • 序号函数
        • ROW_NUMBER()函数
        • RANK()函数
        • DENSE_RANK()函数
      • 分布函数
        • PERCENT_RANK()
        • CUME_DIST()函数
      • 前后函数
        • LAG(expr,n)函数
        • LEAD(expr,n)函数
      • 首尾函数
        • FIRST_VALUE(expr)函数
        • LAST_VALUE(expr)函数
      • 其它函数
        • NTH_VALUE(expr,n)函数
        • NTILE(n)函数
    • 新特性2:公用表表达式
      • 普通公用表表达式
      • 递归公用表表达式

MySQL8.0新特性

MySQL从5.7版本直接跳跃发布了8.0版本,可见这是一个令人兴奋的里程碑版本。MySQL 8版本在功能上做了显著的改进与增强,开发者对MySQL的源代码进行了重构,最突出的一点是MySQL Optimizer优化器进行了改进。不仅在速度上得到了改善,还为用户带来了更好的性能和更棒的体验。

新特性1:窗口函数

可以分组,而且可以再分组内排序。另外,窗口函数不会因为分组而减少原表的行数,这对我们在原表数据的基础上进行统计和排序非常有用。
窗口函数的语法结构:
函数 OVER([PARTITION BY 字段名 ORDER BY 字段名 ASC|DESC])
或者是
函数 OVER 窗口名 ... WINDOW 窗口名 AS ([PARTITION BY 字段名 ORDER BY 字段名 ASC|DESC])

序号函数

ROW_NUMBER()函数

举例:查询goods数据表中每个商品分类下价格降序排列的各个商品信息。
在这里插入图片描述
mysql8其它新特性_第1张图片
mysql8其它新特性_第2张图片
mysql8其它新特性_第3张图片

RANK()函数

使用Rank()函数能够对序号进行并列排序,并且会跳过重复的序号,比如需要为1,1,3
在这里插入图片描述
mysql8其它新特性_第4张图片

DENSE_RANK()函数

在这里插入图片描述
mysql8其它新特性_第5张图片

分布函数

PERCENT_RANK()

等级值百分比函数: (rank - 1) / (rows - 1)
其中,rank的值为使用RANK函数产生的序号,rows的值为当前窗口的总计录值。
在这里插入图片描述

mysql8其它新特性_第6张图片
mysql8其它新特性_第7张图片

CUME_DIST()函数

主要用于查询小于或等于某个值的比例。
在这里插入图片描述
mysql8其它新特性_第8张图片

前后函数

LAG(expr,n)函数

返回当前行的前n行的expr的值。
在这里插入图片描述
mysql8其它新特性_第9张图片
mysql8其它新特性_第10张图片
mysql8其它新特性_第11张图片

LEAD(expr,n)函数

在这里插入图片描述
mysql8其它新特性_第12张图片
在这里插入图片描述
mysql8其它新特性_第13张图片

首尾函数

FIRST_VALUE(expr)函数

FIRST_VALUE(expr)函数返回第一个expr的值
在这里插入图片描述
mysql8其它新特性_第14张图片

LAST_VALUE(expr)函数

FIRST_VALUE(expr)函数返回最后一个expr的值

其它函数

NTH_VALUE(expr,n)函数

NTH_VALUE(expr,n)函数返回第n个expr的值
在这里插入图片描述
mysql8其它新特性_第15张图片

NTILE(n)函数

将分区中的有序数据分为n个桶,记录桶编号
在这里插入图片描述
mysql8其它新特性_第16张图片

新特性2:公用表表达式

公用表表达式的作用是可以替代子查询,而且可以被多次引用。递归公用表表达式对查询有一个共同根节点的树形结构数据非常高效,可以轻松搞定其他查询方式难以处理的查询。

普通公用表表达式

语法结构:

WITH CTE名称
AS (子查询)
SELECT|DELETE|UPDATE 语句;

mysql8其它新特性_第17张图片
mysql8其它新特性_第18张图片
CTE实现
mysql8其它新特性_第19张图片
mysql8其它新特性_第20张图片

递归公用表表达式

语法结构:

WITH RECURSIVE
CTE名称 AS (子查询)
SELECT|DELETE|UPDATE 语句;

案例:针对于我们常用的employees表,包含employee.id, last_ name和manager.id三个字段。如果a是b的管理者,那么,我们可以把b叫做a的下属,如果同时b又是c的管理者,那么c就是b的下属,是a的下下属。

mysql8其它新特性_第21张图片
mysql8其它新特性_第22张图片
mysql8其它新特性_第23张图片
mysql8其它新特性_第24张图片

你可能感兴趣的:(mysql,数据库,mysql)