发布时间 : 星期二 文章鏁版嵁搴撹鍚庝範棰樺弬鑰冪瓟妗?- 鐧惧害鏂囧簱更新完毕开始阅读c22e7104b52acfc789ebc9eb
答:select c.cno,cname from course c left join sc on c.cno = sc.cno
where sc.cno is null
14.查询计算机系哪些学生没有选课,列出学生姓名。
答:select sname from student s left join sc on s.sno = sc.sno Where sdept = '计算机系' and sc.sno is null
15.用子查询实现如下查询:
(1)查询选修C001课程的学生的姓名和所在系。
答:select sname,sdept from student where sno in( select sno from sc where cno = ' C001')
(2)查询通信工程系成绩80分以上的学生的学号和姓名。 答:select sno,sname from student where sno in( select sno from sc where grade > 80) and sdept = '通信工程系'
(3)查询计算机系考试成绩最高的学生的姓名。
答:select sname from student s join sc on s.sno = sc.sno where sdept = '计算机系'
and grade = (select max(grade) from sc join student s on s.sno = sc.sno
where sdept = '计算机系')
(4)查询年龄最大的男学生的姓名和年龄。 答:select sname,sage from student
Where sage = (select max(sage) from student and ssex = '男') and ssex = '男'
(5)查询C001课程的考试成绩高于该课程平均成绩的学生的学号和成绩。 答:select sno,grade from sc where cno = ' C001'
And grade > (select avg(grade) from sc where cno = ' C001')
16.创建一个新表,表名为test_t,其结构为(COL1, COL 2, COL 3),其中, COL1:整型,允许空值。
COL2:字符型,长度为10,不允许空值。 COL3:字符型,长度为10,允许空值。
试写出按行插入如下数据的语句(空白处表示空值)。
COL1 1 2 COL2 B1 B2 B3 COL3 C2 答:create table test_t ( COL1 int,
COL2 char(10) not null,
9
COL3 char(10) )
insert into test_t values(NULL, 'B1', NULL) insert into test_t values(1, 'B2', 'C2')
insert into test_t(COL1, COL2) values(2, 'B3')
17.删除修课成绩小于50分的学生的选课记录。 答:delete from sc where grade < 50
18.将所有选修C001课程的学生的成绩加10分。
答:update sc set grade = grade + 10 where cno = 'C001'
19.将计算机系所有选修“计算机文化学”课程的学生的成绩加10分。 答:update sc set grade = grade + 10 where sno in(
select sno from student where sdept = '计算机系') and cno in(
select cno from course where cname = '计算机文化学')。
20.试说明使用视图的好处。
答:使用视图能够带来如下好处:
? 简化数据查询语句:用户可以将复杂的查询语句封装在视图中,这样以后用户在使
用相同的查询时,只需对视图进行查询即可。
? 使用户能从多角度看到同一数据:视图机制能使不同的用户以不同的方式看待同一
数据,当许多不同种类的用户共享同一个数据库时,这种灵活性是非常重要的。 ? 提高了数据的安全性:使用视图可以定制允许用户查看哪些数据并屏蔽掉敏感的数
据,从而提高数据库数据的安全性。
? 提供一定程度的逻辑独立性:视图对应数据库三级模式中的外模式,因此,可以将
用户对数据的操作限制在视图上,而不直接对模式进行操作,这样当模式发生变化时,视图可以不变。
21.使用视图可以加快数据的查询速度,这句话对吗?为什么?
答:不对。使用视图不但不会加快对数据的查询速度,而且还会降低数据查询速度。因为通
过视图查询数据时,要先将这个查询转换为对基本表的查询,有时这个转换是比较复杂的。因此,通过视图查询数据比直接对基本表查询要慢。
22.写出创建满足下述要求的视图的SQL语句。
(1)查询学生的学号、姓名、所在系、课程号、课程名、课程学分。 答:CREATE VIEW V1
AS
SELECT S.Sno, Sname, Sdept, C.Cno, Cname, Ccredit FROM Student S JOIN SC ON S.Sno = SC.Sno JOIN Course C ON C.Cno = SC.Cno
(2)查询学生的学号、姓名、选修课程名和考试成绩。
10
答:CREATE VIEW V2
AS
SELECT S.Sno, Sname, Cname, Grade
FROM Student S JOIN SC ON S.Sno = SC.Sno
JOIN Course C ON C.Cno = SC.Cno
(3)统计每个学生的选课门数的视图,要求列出学生学号和选课门数。 答: CREATE VIEW V3
AS
SELECT Sno, Count(*) AS total FROM SC GROUP BY Sno
(4)统计每个学生的修课总学分的视图,要求列出学生学号和总学分(说明:考试成绩大于等于60才可获得此门课程的学分)。 答: CREATE VIEW V4
AS
SELECT Sno, SUM(Ccredit) sum_credit
FROM SC JOIN Course C ON C.Cno = SC.Cno
WHERE Grade >= 60 GROUP BY Sno
23.利用第22题建立的视图,完成如下查询:
(1)查询考试成绩大于等于90分的学生的姓名、课程名和成绩。 答:SELECT Sname, Cname, Grade FROM V2 WHERE Grade >= 90
(2)查询选课门数超过3门的学生的学号和选课门数。 答:SELECT Sno, total FROM V3 WHERE total > 3
(3)查询计算机系选课门数超过3门的学生的姓名和选课门数。 答:SELECT Sname, total FROM V3 JOIN Student S on S.Sno = V3.Sno
WHERE total > 3 and Sdept = '计算机系'
(4)查询修课总学分超过10分的学生的学号、姓名、所在系和修课总学分。 答:SELECT S.Sno, Sname, Sdept, sum_credit
FROM Student S JOIN V4 ON S.Sno = V4.Sno WHERE sum_credit > 10
(5)查询年龄大于等于20岁的学生中,修课总学分超过10分的学生的姓名、年龄、所在系和修课总学分。
答:SELECT Sname, Sage, Sdept, sum_credit
FROM Student S JOIN V4 ON S.Sno = V4.Sno WHERE sum_credit > 10 and Sage >= 20
24.修改22题(4)定义的视图,使其查询每个学生的学号、姓名、所在系、所选全部课程
11
的总学分以及总的选课门数。 答:CREATE VIEW V4_1
AS
SELECT Sno, SUM(Ccredit) sum_credit, COUNT(*) Total FROM SC JOIN Course C ON C.Cno = SC.Cno
GROUP BY Sno
ALTER VIEW V4 AS
SELECT S.Sno, Sname, Sdept, sum_credit, Total
FROM Student S JOIN V4_1 ON S.Sno = V4_1.Sno
12