一、多表查询
UNION联合查询
UNION操作符用于合并两个或多个SELECT语句的结果集
要求:
1.两边select语句的字段数必须一样
2.两边可以具有不同数据类型的字段
3.字段名默认按照左边的表来设置
4.用法:
select column_name(s) from table1 union select column_name(s) from table2;
INNER JOIN:内连接
INNER JOIN关键字在表中存在至少一个匹配时返回行。
select student.id, student.name, student.
-> address, score.math, score.english from s
-> tudent inner join score on student.id=sco
-> re.id;
LEFT JOIN:左连接
LEFT JOIN关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为NULL。
select column_name(s) from table1 left join table2 on table1.column_name=table2.colum_name;
select student.id, student.name, student.
-> address, score.math, score.english from s
-> tudent left join score on student.id=scor
-> e.id;
RIGHT JOIN:右连接
RIGHT JOIN关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为NULL。
select column_name(s) from table1 right join table2 on table1.column_name=table2.colum_name;
select student.id, student.name, student.
-> address, score.math, score.english from s
-> tudent right join score on student.id=sco
-> re.id;
子查询
查询的语句中还有一个查询
select name from stuent where id in (select id from score where math > 10);
二、视图表
语法:create view 视图名 as 查询语句;
视图表的特点
- 视图是数据的特定子集,是从其他表里提取出数据而形成的虚拟表,或者说临时表。
- 创建视图表依赖一个查询。
- 视图是永远不会自己消失的除非手动删除。
- 视图有时会对提高效率有帮助。临时表不会对性能有帮助,是资源消耗者。
- 视图一般随该数据库存放在一起,临时表永远都是在trmpdb里的。
- 视图适合多表连接浏览时使用;不适合增删改查,这样可以提高执行效率。
- 一般视图表的名称以V_为前缀,用来与正常表进行区分。
- 对原表的修改会影响到视图中的数据。对视图的修改也会影响到原表。
视图表是否能被修改,依赖于创建视图表时的算法值:
ALGORITHM有三个可选值:UNDEFINED,MERGE,TEMPTABLE。
默认值是undefined,效果是允许修改;merge和undefined效果一致;temptable是不允许修改。
只需在创建视图表时加上ALGORITHM=temptable就可以禁止修改视图表。
create ALGORITHM=temptable view 视图名 as 查询语句;
创建一个视图表
create view v_exam as select student.*, m
-> ath, english from student left join score
-> on student.id=score.id;
select * from v_exam;