《网络数据库SQL》自检自测题答案
有一个“学生-课程”数据库,数据库中包括三个表:
(1)“学生”表Student由学号(Sno)、姓名(Sname)、性别(Ssex)、年龄(Sage)、所在系(Sdept)五个属性组成,可记为:Student(Sno,Sname,Ssex,Sage,Sdept) Sno 为关键字。
(2)“课程”表Course由课程号(Cno)、课程名(Cname)、先修课号(Cpno)、学分(Ccredit)四个属性组成,可记为:Course(Cno,Cname,Cpno,Ccredit) Cno为关键字。
(3) “学生选课”表SC由学号(Sno)、课程号(Cno)、成绩(Grade)三个属性组成,可记为:SC(Sno,Cno,Grade) (SNO, CNO) 为关键字。
完成下列操作:
1、建立一个“学生”表Student,它由学号Sno、姓名Sname、性别Ssex、年龄Sage、所在系Sdept五个属性组成,其中学号属性不能为空,并且其值是唯一的。
CREATETABLE Student
(Sno CHAR(5) NOT NULL UNIQUE,
Sname CHAR(20),
Ssex CHAR(1),
Sage INT,
Sdept CHAR(15));
2、向Student表增加“入学时间”列,其数据类型为日期型。
ALTER TABLE Student ADD Scome DATE;
3、删除Student表
DROP TABLE Student ;
4、查询全体学生的学号与姓名
SELECT Sno, Sname
FROM Student;
5、查询全体学生的详细记录
SELECT *
FROM Student;
6、查所有选修过课的学生的学号
SELECT DISTINCT
Sno
FROM SC;
7、查所有年龄在20岁以下的学生姓名及其年龄
SELECT Sname, Sage
FROM Student
WHERE Sage <20;
8、查考试成绩有不及格的学生的学号
SELECT DISTINCT Sno
FROM Course
WHERE Grade <60;
9、查询年龄在20至23岁之间的学生的姓名、系别、和年龄
SELECT Sname, Sdept, Sage
FROM Student
WHERE Sage BETWEEN 20 AND 23;
10、查所有姓刘的学生的姓名、学号和性别
SELECT Sname, Sno, Ssex
FROM Student
WHERE Sname LIKE '刘%';
11、查姓“欧阳”且全名为三个汉字的学生的姓名
SELECT Sname
FROM Student
WHERE Sname LIKE '欧阳__';
12、查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列
SELECT Sno, Grade
FROM SC
WHERE Cno='3'
ORDER
BY Grade DESC;
13、计算1号课程的学生平均成绩
SELECT AVG(Grade)
FROM SC
WHERE Cno='1';
14、查询学习1号课程的学生最高分数
SELECT MAX(Grade)
FROM SC
WHERE Cno='1';
15、查询与“刘晨”在同一个系学习的学生
SELECT Sno, Sname, Sdept
FROM Student
WHERE Sdept IN
(SELECT Sdept
FROM Student
WHERE Sname='刘晨');
16、将一个新学生记录(学号:95020;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入Student表中
INSERT
INTO Student
VALUES ('95020', '陈冬', '男', 'IS', 18);
17、将学生95001的年龄改为22岁
UPDATE Student
SET Sage=22
WHERE Sno='95001';
18、将计算机科学系全体学生的成绩置零
UPDATE SC
SET Grade=0
WHERE ‘CS’=
( SELECT Sdept
FROM Student
WHERE Student.Sno=SC.Sno);
19、删除学号为95019的学生记录
DELETE
FROM Student
WHERE Sno=‘95019’;
20、删除计算机科学系所有学生的选课记录
DELETE
FROM SC
WHERE 'CS'=
(SELETE Sdept
FROM Student
WHERE Student.Sno=SC.Sno);
21、创建一存储过程getDetailByName,通过输入参数学生姓名(如“章山"),筛选出该学生的基本信息,对不存在此学生姓名的输入值,必须作一检测,打印信息“不存在此学生”。
(1)创建:
Create proceduregetDetailByName
@name nvarchar(10)
AS
IF (SELECT COUNT(*) FROMStudent WHERE Sname = @Name) > 0
SELECT *
FROM Student
Where Sname = @Name
ELSE
SELECT 警示 = '不存在姓名为 ' + @Name + ' 的学生资料'
22、创建Student表按学号升序建立唯一索引
Create Unique Index Stusno on Student(Sno)
23、创建Course表按课程号升序建立唯一索引
Create Unique Index Coucno on Course(Cno)
24、创建SC表按学号升序和课程号降序建立唯一索引
Create Unique Index Scno on SC(Sno ASC,Cno DESC)
25、建立信息系学生的视图
Creat View IS_Student
AS
Select Sno,Sname,Sage
From Student
WhereSdept=”IS”
26、建立所有女生记录的视图
Creat View F_Student(stdnum,name,sex,age,dept)
AS
Select *
From Student
Where Ssex=”女”
27、创建了一个名为stu_cou数据库,该数据库的主数据文件逻辑名称为“stu_cou_data”,物理文件名为“stu_cou.mdf”,路径为D:sql,初始大小为10MB,最大尺寸为无限大,增长速度为10%;数据库的日志文件逻辑名称为“stu_cou_log”,物理文件名为“stu_cou.ldf”,路径为D:sql,初始大小为1MB,最大尺寸为5MB,增长速度为1MB。
Create database stu_cou
on primary
(name=stu_cou_data,
filename='d:sqlstu_cou.mdf',
size=10,
maxsize=unlimited,
filegrowth=10%)
log on
(name=stu_cou_log,
filename='d:sqlstu_cou.ldf',
size=1,
maxsize=5,
filegrowth=1)
28、使用sp_addumpdevice创建一个备份设备stucbac,这是一个磁盘文件,其物理名称为“D:sqlstuc.bak”,将stu_cou数据库备份到该设备上。
Exec sp_addumpdevice ‘disk’,’stucbac’,’D:sqlstuc.bak’
Backup Database stu_cou to stucbac
29、查询选修了课程名为“信息系统”的学生学号和姓名
select Sno,Sname
from student
where sno in
(select Sno
from SC
where Cno in
( select Cno
from Course
where Cname=’信息系统’) )
或者
select Student.Sno,Sname
from Student,SC,Course
where Student.Sno=SC.Sno and
SC.Con=Course.Cno and
Course.Cname=‘信息系统’
30、查询其他系中比IS系任一学生年龄小的学生名单。
Select Sanme,Sage
From
Where Sage<ANY
(Select Sage
from Student
where Sdept=’IS’)
and Sdept<>’IS’
31、查询student表中的所有信息,将查询结果保存到当前数据库中的新数据表re_stu中。
Select * into re_stu from student
32、查询出所有所有学生的学号、姓名、性别、年龄、所在系,而且请使用中文作为查询结果的各字段的名称。
Select Sno as 学号,Sname as 姓名,Ssex as 性别,Sage as 年龄,Sdept as所在系
From Student
或者
Select 学号=Sno, 姓名=Sname,性别=Ssex,年龄=Sage, 所在系=Sdept
From Student