数据库实验——多表查询及视图

以student数据库中的三个表 XSKC.sc,XSKC.student,XSKC.course为例进行查询操作。

1.使用T-SQL 语句实现进行以下操作:

1)查询选修了‘数学’或者‘大学英语’的学生学号、姓名、所在院系、选修课程号及成绩;
SELECT student.sno,sname,sdept,sc.cno,grade
FROM XSKC.sc,XSKC.student,XSKC.course
WHERE sc.sno=student.sno AND sc.cno=course.cno AND (cname=‘数学’ OR cname=‘大学英语’)

SELECT student.sno,sname,sdept,sc.cno,grade
FROM XSKC.sc,XSKC.student
WHERE cno IN
(SELECT cno
FROM XSKC.course
WHERE(cname=‘数学’ or cname=‘大学英语’) AND sc.sno=student.sno)
2)查询与‘张力’(假设姓名唯一)年龄不同的所有学生的信息;
SELECT *
FROM XSKC.student
WHERE sage NOT IN
(SELECT sage
FROM XSKC.student
WHERE sname=‘张力’)
3)按照“学号,姓名,所在院系,已修学分”的顺序列出学生学分的获得情况。其中已修学分为考试已经及格的课程学分之和;
SELECT student.sno 学号,sname 姓名,sdept 所在院系,已修学分=SUM(ccredit)
FROM XSKC.student,xskc.sc,xskc.course
WHERE student.sno=sc.sno AND sc.cno=course.cno AND grade>60
GROUP BY student.sno,sname,sdept
4)查找选修了至少一门和张力选修课程一样的学生的学号、姓名及课程号;
SELECT student.sno,sname,cno
FROM XSKC.student,XSKC.sc
WHERE student.sno=sc.sno AND sc.sno IN
(SELECT sc.sno
FROM XSKC.sc,XSKC.student
WHERE cno IN
( SELECT cno
FROM XSKC.student,XSKC.sc
WHERE sname=‘张力’ AND student.sno=sc.sno))
5)查询只被一名学生选修的课程的课程号、课程名;
SELECT cno,cname
FROM XSKC.course
WHERE cno IN
(SELECT cno
FROM XSKC.sc
GROUP BY cno
HAVING COUNT(*)=1)
6)使用嵌套查询出选修了“数据结构”课程的学生学号和姓名;
SELECT sno,sname
FROM XSKC.student
WHERE sno IN
(SELECT sno
FROM XSKC.sc
WHERE cno IN
(SELECT cno
FROM XSKC.course
WHERE cname=‘数据结构’))
7)使用嵌套查询查询其它系中年龄小于CS系的某个学生的学生姓名、年龄和院系;
SELECT sname,sage,sdept
FROM XSKC.student
WHERE sdept<>‘cs’ AND sage<SOME
(SELECT sage
FROM XSKC.student
WHERE sdept=‘CS’)
8)使用ANY、ALL 查询,列出其他院系中比WM系所有学生年龄小的学生的姓名;
SELECT sname
FROM XSKC.student
WHERE sage<ALL
(SELECT sage
FROM XSKC.student
WHERE sdept=‘WM’) AND sdept<>‘WM’
9)使用集合查询查询选修1号课程同时选修2号课程的同学的学号与姓名;
SELECT sno
FROM XSKC.sc
WHERE cno=1
INTERSECT
SELECT sno
FROM XSKC.sc
WHERE cno=2

2.使用T-SQL语句完成以下内容

1) 创建v_CS视图,包括CS系各学生的学号、姓名及年龄,要求进行修改和插入操作时仍需保证该视图只有CS系的学生;
CREATE VIEW v_CS
AS
SELECT sno,sname, sage
FROM XSKC.student
WHERE sdept = ‘CS’
WITH CHECK OPTION
2)创建v_CS_age20视图,包括CS系学生年龄在20岁以上的基本信息;并保证对视图文本的修改都要符合年龄大于20这个条件。
CREATE VIEW v_CS_age20
AS
SELECT *
FROM XSKC.student
WHERE sage>20
WITH CHECK OPTION
3)创建一个视图vstu_cg,用于查看学生学号、姓名、课程和成绩信息,并用WITH ENCRYPTION加密。
CREATE VIEW vstu_cg
WITH ENCRYPTION
AS
SELECT student.sno,sname,cname,grade
FROM XSKC.student,XSKC.sc,XSKC.course
WHERE student.sno=sc.sno AND sc.cno=course.cno
4)试着向视图v_CS中插入一个新的学生记录,(‘200515026’,‘赵红平’,‘21’),是否能插入成功,原因是什么?如何修改视图才可以插入成功?
修改视图:
ALTER VIEW v_CS
AS
SELECT sno,sname,sage
FROM XSKC.student
插入:
INSERT INTO v_CS
VALUES(‘200515026’,‘赵红平’,‘21’)
5)利用视图v_CS修改学号为200515001的学生姓名为“赵青青”;
update dbo.v_CS
set sname=‘赵青青’
where sno=‘200515001’
6)利用视图v_CS删除CS系学号为200515003的记录;
DELETE
FROM v_CS
WHERE Sno=‘200515003’
7)删除视图v_CS_age20;
DROP VIEW v_CS_age20

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章