4.1SQL视图简介和使用
视图是另一种查看数据的入口,常规视图本身并不存储实际的数据,而仅仅是由SQL语句组成的查询定义的虚拟表 。
从数据库系统内部来看,视图是由一张或多张表中的数据组成的,从数据库系统外部来看,视图就如同一张表一样,对表能够进行的一般操作都可以应用于视图(除插入数据)。
- 视图隐藏了底层的表结构,简化了数据访问操作,查看者不再需要知道底层表的结构及其之间的关系。
- 视图提供了一个统一访问数据的接口。(即可以允许用户通过视图访问数据的安全机制,而不授予用户直接访问底层表的权限)
- 从而加强了安全性,使用户只能看到视图所显示的数据。
- 视图还可以被嵌套,一个视图中可以嵌套另一个视图。
/*视图创建*/
create view 视图名称(<视图列名1><视图列名2>)
as
<select 查询语句>
4.2子查询及标量子查询,关联子查询
子查询:在SQL语句中直接查询视图中的表
—— in子查询:对比
—— any子查询:与some一样,对比另一组的任意一个(如:找出A组中的比B组中任意一个高的数据)
—— all子查询:对比全部(如:找出A组中的要比B组中的全部都高的数据)
【注意事项】
不能针对子查询使用运算符
子查询之间不能 互相嵌套
子查询后不能增加子查询别名
在SQL运行顺序中,先运行一级语句中的子查询,后运行二级语句中的子查询
标量子查询:查询单一的值(in,any,all,between)
关联子查询:关联“底层表”与“视图表”中的数据
4.2.1子查询:找出每个课程里,成绩最低的学号
/*查询思路:
SELECT查询结果:学号,成绩
FROM查询地址,从score表中查找数据
WHERE筛选条件:用子查询找*/
select 学号,成绩
from score
where 成绩 in(SELECT MIN(成绩)
FROM score
GROUP BY 课程号);
4.2.2标量子查询:查找大于平均成绩学生的学号和成绩
/*查询思路:
SELECT查询结果:学号,成绩
FROM查询地址,从score表中查找数据
WHERE筛选条件:成绩>平均成绩(用子查询计算平均成绩)*/
select 学号,成绩
from score
where 成绩>(select avg(成绩)
from score);
4.2.3关联子查询:找出每个课程中大于对应课程平均成绩的学生
/*查询思路:
SELECT查询结果:课程号,学号,成绩
FROM查询地址,从score表中查找数据,以S1作为别名
WHERE筛选条件:成绩>平均成绩(用子查询计算平均成绩,并以S2作为别名,关联S1)*/
select 课程号,学号,成绩
from score as S1
where 成绩>(select avg(成绩)
from score as S2
WHERE S1.课程号=S2.课程号
GROUP BY 课程号);
4.3SQL常用函数整理:
sqlzoo练习: