MySQL:窗口函数、索引、视图

1)窗口函数

# 1 语法
函数名([expr]) over(partition by <分组字段> order by <排序字段> rows between <数据范围/窗口>)
 
# 2 数据范围
rows between 2 preceding and current row  # 前2行到当前行
rows between unbounded preceding and current row   # 本行及之前所有行
rows between current row and unbounded following   # 本行及之后所有行

# 当order by后面缺少窗口从句条件,窗口规范默认是rows between unbounded preceding and current row.
# 当order by和窗口从句都缺失, 窗口规范默认是 rows between unbounded preceding and unbounded following

常用窗口函数:聚合窗口函数、排序函数、偏移分析函数。

数据准备:

表结构如下:

 1.1 聚合窗口函数应用

sum()   count()  avg()  max()  min()

1.1.1 累计求和

 

 1.1.2 移动平均

 

 1.2 排序函数的应用

1.2.1 row_number()    rank()     dense_rank()

紧邻的括号不需添加任何字段。

row_number:一行一个序号,序号不重复。

rank:字段相同,序号相同,序号不连续。

dense_rank:字段相同,序号相同,序号连续。

 

 1.2.2 ntile(n)

ntile(n):将数据按照顺序切分成n片,返回其所在切片值
ntile不支持rows between

1.3 偏移分析函数

lag(...)     lead(...)

# 语法
lag(exp_str,offset,defval) over(partion by ......order by ......)  # 向前
lead(exp_str,offset,defval) over(partion by ......order by ......) # 向后

exp_str:字段名称
offset:偏移量,默认值为1
defval:当前移(后移)没有数据时的默认值,若没有指定默认值,则返回NULL,

 

 2)索引

从应用层次划分:主键索引、唯一索引、普通索引、复合索引

索引的优缺点总结:

索引的优点:

    1. 大大的提高查询速度

    2. 可以显著的减少查询和排序的时间。

索引的缺点

    当对表中的数据进行增加,修改,删除的时候,索引要同时进行维护,数据量越大维护时间越长。

 2.1 主键索引

# 添加主键的时候会自动创建主键索引,主键索引是一种唯一性索引
# 1 创建表时直接创建主键索引,同添加主键方式
create table test_index(
         tid int primary key,
         ...
);

# 2 修改表结构,添加主键索引
alter table test_index add primary key(tid);

2.2 唯一索引

# 特点:索引列的所有值只能出现一次,必须唯一
# 目的:一般是为了避免数据重复
# 1 创建表时添加
CREATE TABLE 表名(
   列名 类型(长度),
   UNIQUE [索引名称] (列名)   # 添加唯一索引
);

# 2 使用create语句创建:在已有表上创建
create unique index 索引名 on 表名(列名);

# 3 修改表结构添加索引
ALTER TABLE 表名 ADD UNIQUE 索引名(列名);

2.3 普通索引

# 目的:加快数据的访问速度
# 应用场景:经常出现在查询条件(where column = )或排序条件(order by column)中的数据列创建数据
# 1 使用create index 创建
create index 索引名 on 表名(列名[长度])

# 2 修改表结构添加索引
ALTER TABLE f ADD INDEX 索引名 (列名)

2.4 删除索引

# 删除test_index表中名为dname_indx的普通索引
alter table test_index drop index dname_index;

3)视图

3.1 视图

1、视图是一种虚拟表。

2、视图建立在已有表(基表)基础上。

3、可以理解为存储起来的select语句

4、视图向用户提供基表数据的另一种表现形式

3.2 作用

1、权限控制

2、简化复杂的多表查询

3.3 使用

# 语法:create view 视图名 as select 语句;

3.4 视图与表的区别

1、视图是建立在表的基础上,表存储数据库中的数据,而视图只是做一个数据的展示。

2、通过视图不能改变表中数据(一般情况下视图中的数据都是表中的列 经过计算得到的结果, 不允许更新)。

3、删除视图,表不受影响,而删除表,视图不再起作用。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值