实验报告(九)
1、实验目的
(1) 掌握视图的创建与删除
(2) 掌握视图的查询与修改
(3) 理解视图与基表的区别和联系
2、实验预习与准备
(1) 视图的基本概念
(2) 创建与更新视图的SQL语句
3、实验内容及步骤
(1) 利用SQL语句创建如下视图:
a) 视图v_course,包含学分大于3的课程的编号,课程名称,课程学分,课程学时,学期,并将对应视图的列名分别改为no,name,credit,hour,term
CREATE VIEW v_course AS
SELECT cno AS no, cname AS name, credit, hour, term
FROM course
WHERE credit > 3;
b) 视图v_select中的数据为每个学生的学号、姓名、班级编号、院系、选修课程号,课程名及期末成绩
CREATE VIEW v_select AS
SELECT s.sno, s.sname, s.clno, c.department, sc.cno, co.cname, sc.score
FROM student s
JOIN score sc ON s.sno = sc.sno
JOIN course co ON sc.cno = co.cno
JOIN class c ON s.clno = c.clno;
c) 视图v_credit,包含每个班级的编号和该班级学分最大值;
CREATE VIEW v_credit AS
SELECT clno, MAX(credit) AS max_credit
FROM class
JOIN course_class ON class.clno = course_class.clno
JOIN course ON course_class.cno = course.cno
GROUP BY clno;
(2) 利用上面创建的视图完成下列题目:
a) 查询选修了“数据库原理”课程的学生学号,姓名和成绩
SELECT v_select.sno, v_select.sname, v_select.score
FROM v_select
JOIN course co ON v_select.cno = co.cno
WHERE co.cname = '数据库原理';
b) 查询班级学分最高的学生学号、姓名、班级号和学分
SELECT v_select.sno, v_select.sname, v_select.clno, c.max_credit
FROM v_select
JOIN v_credit c ON v_select.clno = c.clno
WHERE c.max_credit = (
SELECT MAX(max_credit)
FROM v_credit
);
c) 将下列课程信息插入视图v_ course中
课程编号 |
课程名 |
学分 |
学时 |
学期 |
308006 |
JSP |
3 |
64 |
5 |
该课程信息是否能添加到视图中,如果能添加,则添加后通过视图是否能查询到该课程信息。
INSERT INTO v_course (no, name, credit, hour, term)
VALUES ('308006', 'JSP', 3, 64, 5);
(3) 利用SQL语句在teacher表的tname列上创建唯一索引UQ_tname。用insert语句向teacher表中如下教师信息,并观察语句执行结果:
教师编号 |
教师姓名 |
密码 |
性别 |
电话 |
院系 |
身份 |
说明 |
0301 |
刘元朝 |
0301 |
男 |
Null |
机械学院 |
1 |
Null |
CREATE UNIQUE INDEX UQ_tname ON teacher(tname);
INSERT INTO teacher (tno, tname, pwd, sex, tel, department, type, remark)
VALUES ('0301', '刘元朝', '0301', '男', NULL, '机械学院', 1, NULL);