美文网首页
联合查询·;子查询;视图;视图算法

联合查询·;子查询;视图;视图算法

作者: Ancestor楠 | 来源:发表于2020-02-17 20:54 被阅读0次

联合查询

基本语法:

select 语句1

union [union 选项]

select 语句2……

union 选项(默认去重)

all:保留所有,不管重复

distinct:去重,默认的

意义:提高查询效率,减少带宽

分表:水平分表:10记录  两个表5+5

           垂直分表:一对一   常用表;不常用表

子查询

一个select语句包含另一个select语句

按位置分类

from子查询

where子查询

exists子查询

按结果分类

标量子查询  :一行一列的结果

列子查询 :一列多行的结果(一排记录)

行子查询 :多列一行;多行多列

-- 查询年龄最大且身高最高

-- 行子查询(最佳)

select * from my_student where

-- (age,height)称为行元素(别忘加括号)

(age,height)=(select max(age),max(height) from my_student);

表子查询 :多行多列

-- 表子查询

select * from my_student group by c_id order by height desc;--不符合要求(每个班取第一个人在排序)

-- 插入学生

insert into my_student values(null,'bc20200006','小航','女',25,185,4);

-- 查找每个班身高最高的学生 数据源要加limit才能查到想要的数据

select * from(select * from my_student order by height desc limit 9999999) as student

group by c_id; -- 每个班选出第一个学生而已

列子查询(了解)

=any等价于in; -- 其中一个即可

any等价于some; -- 二者是一样的

=all为全部

视图(为了查询数据起来方便)

视图(view):是一种有结构,但是没结果的虚拟表(数据从基表中得来)

视图优点:对外提供友好型,不同的视图对应不同的数据

创建视图

基本语法:create view 视图名字 as select 语句;

创建单表视图:基表只有一个

创建多表视图:基表来源至少两个(注意id不能重复

查看视图创建语句(结构,对基表没影响)

show tables [like] / desc 视图名 / show create table 视图名;

-- c查看视图创建语句

show create view my_v3\G

修改视图(本身不可以修改,视图来源(select语句)可以修改,可以定制)

alter view 视图名字 as 新的select语句;

删除视图

drop view 视图名字;

视图数据操作

新增数据

多表视图不能新增数据

可以向单表视图插入数据,但是视图中包含的字段必须有基表中所有不能为空、或没有默认值的字段

视图是可以向基表插入数据的

删除数据

多表视图不能删除数据

单表视图可以删除数据

更新数据

更新限制:with check option;

-- 视图:age字段限制更新

create view my_v4 as

select * from my_student where age>30 with check option;

-- 表示视图的数据来源都是年龄大于30的,是由where age>30决定的

-- with chhheck

-- option决定通过视力更新的时候,不能将已经得到的数据age>30的改成<30的

-- 将视图可以查到的数据改成年龄小于30

update my_v4 set age=29 where id=5;

-- 可以修改数据让视图可以查到:可以改,但是无效果

update my_v4 set age=32 where id=3; 

视图算法

视图算法:系统对视图以及外部查询视图的select语句的一种解析方式

视图算法分三种

undefined:未定义(默认的)

temptable:临时表算法

merge:合并算法

算法指定:在创建视图的时候create algorithm=指定算法 view 视图名字 as select语句;

-- 获取所有班级中最高的一个学生

create view my_v5 as

select * from my_student order by height desc;

select * from my_v5 group by c_id;

-- merge:合并算法

select * from my_student group by c_id order by height desc;

-- 指定算法为临时表算法

create algorithm=temptable view my_v6 as

select * from my_student order by height desc;

select * from my_v6 group by c_id;

相关文章

网友评论

      本文标题:联合查询·;子查询;视图;视图算法

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