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

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

作者: 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