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

联合查询

基本语法:

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; -- 每个班选出第一个学生而已

视图

view:是一种有结构,但是没结果的虚拟表

创建视图

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

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

创建多表视图:基表来源至少两个

视图:单表和多表

create view my_v1 as

select * from my_student;

create view my_v2 as

select * from my_class;

create view my_v3 as

select * from my_student as a left join my_class as

c on s.c_id=c.id;-- 错误,id重复

多表

create view my_v3 as

select s.*,c.c_name,c.room from my_student as s

join my_class as c on s.c_id=c.id;

查看视图

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

-- c查看视图创建语句

show create view my_v3\G(\G横向查看)

修改视图

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

alter view my_v1 as

select id,name,age,sex,height,c_id from my_student;

删除视图

drop view 视图名字;

drop view my_v4;

算法

视图算法

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

视图算法分三种

undefined:未定义(默认的)

temptable:临时表算法

merge:合并算法

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容