联合查询
基本语法:
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语句;