一. 视图 view
含义:视图是存放SQL查询语句的盒子,方便存储常用的SQL语句
用处:工作中需要多次使用的某个SQL语句,可以把语句定义为视图,使用时直接调用,提高工作效率,视图存放的是SQL语句,所以会随着数据的变化进行更新;使用视图时,会运行视图中的SQL查询语句创建一张临时表,链接断开后,临时表会自动删除,不占用内存,节省空间
注意事项:1.视图列名与select 列名需相互对应
2.不能再视图中创建视图,多重视图会降低效率
3.不能再视图中插入数据
创建视图: create view 视图名称 (视图列名1,视图列名2,…)
AS select 查询语句;
实际应用:创建视图,实现按照性别分组汇总的视图
create view 按性别汇总 (性别,人数)
as select 性别,count(*)
from student
group by 性别;
二.子查询
含义:相当于一次性视图,即在select查询中嵌套select查询语句
用处:用于复杂查询,可以放入from子句中,或者where子句中,如in(子查询),any(子查询),all(子查询),结合使用,实现复杂查询功能
注意事项:1.区别于视图,视图是存放经常使用的SQL语句,子查询是偶尔使用
http://2.in,all,any得到的是集合,不是单一数值,不能用于计算
3.尽量不要使用多重嵌套,会影响性能,不易维护
4.建议为子查询定义名称,方便理解和维护
实际应用:
1. 按照性别分组后统计人数
2. 哪些学生的成绩比课程0002的全部成绩里任意一个高?any和some意思相同
3.哪些学生的成绩比课程0002的全部成绩里任意一个高?
三.标量子查询—子查询中的一种
含义:返回的是单一的值
实际应用:1.找出大于平均成绩学生的学号和成绩
2.查询差生(成绩<=60)和优等生(成绩>80)
四.关联只查询—子查询中的一种
含义:利用关联条件,在每组中比较
实际应用:1.查找出每个课程中大于对应课程平均成绩的学生
2.找出每个课程最低成绩的学生,关联语句中group by可以省略
五.总结
六.SQLZOO练习
https://sqlzoo.net/wiki/SELECT_within_SELECT_Tutorial/zh
1.找出国家人口大于俄罗斯人口的国家
2. 查找出阿根廷(Argentina)和澳大利亞(Australia)所在的洲份中的国家名称和州名称,并按国家名称排序
3. 德国(Germany)在欧洲(Europe)國家的人口最多。奧地利(Austria)拥有德国总人口的11%。查找欧洲的国家名称和每个国家的人口,其中人口以德国人口的百分比来显示人口数
4 .找出 洲份名称和国家名称,其中每个洲只取出一个国家(条件:该国家排序在这个洲的首位)
5. 有些国家的人口是同洲份的所有其他国的3倍或以上。列出这些国家的名称和洲
参考文献:
知乎live讲座:
从零学会SQL:复杂查询www.zhihu.com