视图的特点
- 视图是一个虚表,是从一个或几个基本表(或视图)导出的表;
- 只存放视图的定义,不存放视图对应的数据
- 基表中的数据发生变化,从视图中查询出的数据也随之改变;
- 视图一经定义,就可以和基本表一样被查询、删除。
视图的更新- 视图更新是指通过视图来插入、删除和修改数据。
- 在行列子集视图中更新数据,更新的结果是基本表中的数据发生了更新。
- 视图定义中的WITH CHECK OPTION对视图的更新进行强制检查,不符合视图定义条件的,不允许更新。
视图的作用- 简化用户的操作
- 使用户能以多种角度看待同一数据
- 对重构数据库提供了一定程度的逻辑独立性
- 能够对机密数据提供安全保护
- 适当的利用视图可以更清晰的表达查询
- 1 SQL视图:根据视图CJ_STUDENT创建视图CJ_TJ
#已建有视图cj_student,视图中包含所有成绩不及格(含没有成绩)的学生的学号,姓名,课程名,成绩,按成绩降序排序。
根据视图cj_student创建视图cj_tj,包含课程名,不及格人数,不及格人姓名列表(以 | 分割),按照不及格人数降序排列。
学生数据库db_student包括三个数据表student(学生表)、course(课程表)和sc(选课表)。表结构如下:
1)student(学生表):
SNO学号CHAR(7)
SNAME姓名CHAR(10)
SSEX性别CHAR(2)
SAGE年龄SMALLINT
SDEPT所在系 VARCHAR(20)
2)course(课程表)
CNO课程号CHAR(10)
CNAME课程名VARCHAR(20)
CCREDIT学分SMALLINT
SEMSTER学期SMALLINT
PERIOD学时SMALLINT
3)sc(选课表)
SNO 学号CHAR(7)
CNO 课程号CHAR(10)
GRADE 成绩 SMALLINT
[注意:SQL表名请用小写]
CREATE VIEW cj_tj AS
SELECT
cname,
COUNT(*) a,
GROUP_CONCAT(sname SEPARATOR '|')
FROM
cj_student
GROUP BY cname
ORDER BY a DESC
- 2
SQL视图:建立视图IS_STUDENT
#建立视图is_student,视图中包含信息系全体学生的基本信息。(要求限制更新)
表结构如第一题。
create view is_student
as
select * from student where sdept='信息系'
with check option;
- 3
SQL视图:建立视图AVG_CJ
#建立视图avg_cj,视图包括学生的学号以及他们的平均成绩(取整),按成绩降序排列。
表结构如第一题。
create view avg_cj
as
select sno,round(avg(grade)) from sc
group by sno order by round(avg(grade)) desc;
- 4
SQl视图:建立视图CJ_STUDENT
#建立视图cj_student,视图中包含所有成绩不及格(含没有成绩)的学生的学号,姓名,课程名,成绩,按成绩降序排序。
表结构如第一题。
CREATE VIEW cj_student AS
SELECT
sc.`Sno`,sname,
cname,
grade
FROM
student,
course,
sc
WHERE sc.`Sno`=student.`Sno`
AND sc.`Cno`=course.`Cno`
AND (grade<60 OR grade IS NULL)
ORDER BY grade DESC