鏁版嵁搴撹鍚庝範棰樺弬鑰冪瓟妗?- 鐧惧害鏂囧簱 联系客服

发布时间 : 星期二 文章鏁版嵁搴撹鍚庝範棰樺弬鑰冪瓟妗?- 鐧惧害鏂囧簱更新完毕开始阅读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