1、有学生-课程关系数据库,各关系表描述如下:

        student

列名

说明

数据类型

约束

Sno

学号

字符(8)

主键

Sname

姓名

字符(12)

非空,唯一

Ssex

性别

字符(2)

取‘男’或‘女’, 默认值 ‘女’

Sage

年龄

整型

取值16~40,默认值21

Sdept

院系

字符(20)

默认 ‘电子系’

列名

说明

数据类型

约束

Cno

课程号

字符(8)

主键

Cname

课程名

字符(8)

非空

Teacher

教师名

字符(10)

唯一

  Course

 

 

 

SC

列名

说明

数据类型

约束

Sno

学号

字符(8)

主键,参照Student表,级联更新和删除

 

Cno

课程号

字符(8)

主键,参照Course表,级联更新,拒绝删除

Grade

成绩

短整型

取值0~100

 

(1)用关系代数表达式表示下列问题
1)检索选修了教师‘所授课程的学生姓名和学号 ;    (2分)
(难度系数B)正确答案:
∏姓名, 学号(Student    (SC     (s授课教师=‘ (Course) ) ) )
或  ∏姓名, 学号( s授课教师=‘’( Student     SC  Course))
2)检索选修了课程号为C3或者C5的学生学号和成绩 ;      (3分)
(难度系数B)正确答案:
∏学号,成绩( s课程号=‘C3’( SC)∪∏学号( s课程号=‘C5’( SC)
(2)用SQL语句实现下列问题
1)写出创建S表的T-SQL语句 ;                           (5分)
(难度系数A)正确答案:
CREATE TABLE S 
(  Sno CHAR(8)   PRIMARY KEY,
   Sname  CHAR(12) NOT NULL UNIQUE
,
   Ssex  CHAR(2)  CHECK(Ssex in('男','女')) DEFAULT '女',
   Sage  INT   CHECK(STage>=16 AND STage<=40) DEFAULT 21,
   Sdept CHAR(20)  DEFAULT ‘电子系’
);
2) 检索姓"李"且倒数第2个字为"华"或"涛"字的学生的姓名和学号;
(4分)
(难度系数A)正确答案:
SELECT Sname,Sno
FROM Student
WHERE Sname LIKE '李% [华涛] _ _';
3)向学生选修课程表中插入元组“学生S6选修课程号C2”。     (2分)
(难度系数B)正确答案:
INSERT                                              
INTO  SC (Sno, Cno) 
VALUES( ‘S6’,’ C2’ )
4) 删除选课成绩在60分以下的学生记录;                  (4分)
(难度系数A)正确答案:
DELETE
     FROM Student
WHERE  SNO IN
            (SELECT  SNO
             FROM     SC
             WHERE GRADE<60);
或        
DELETE
          FROM Student
WHERE Student.SNO = SC.SNO AND SC.GRADE<60  ;
5) 把“大学英语”课程成绩提高5%;                     (3分)
(难度系数B)正确答案:
UPDATE  SC 
SET   Grade=Grade*1.05
WHERE Cno IN
            (SELECT  Cno 
             FROM   Course 
WHERE  Cname=‘大学英语’)
6)求出男同学的每一年龄组(超过4人)有多少人?要求查询结果按人数降序排列,人数相同的按年龄升序排列;                                (5分)
(难度系数A)正确答案:
SELECT Sage, COUNT(Sno)
FROM Student
WHERE Ssex=‘男’
 
GROUP BY  Sage  HAVING  COUNT(Sno)>4
ORDER BY  2 DESC, Sage ASC                       //其中ASC也可以省略不写
7)定义视图S_age,其中包括学生学号以及每个学生选修课程的门数(要求成绩非空)和平均成绩;                                   (5分)
(难度系数A)正确答案:
CREATE VIEW  S_age  (Sno, Cno_num, Avg_grade)
AS  SELECT Sno,COUNT(Cno),AVG(grade)
     FROM SC  
     WHERE grade IS NOT NULL
GROUP BY Sno10、alter table student
add
jiguan char(20),
 
8)在S表中删除院系字段列。                              (2分)
(难度系数C)正确答案:
alter table student
drop column Sdept