SQL语句实验题目
- 建立课程表
- 建立学生表
- 建立选课表
- 查询所有学生的详细信息(包含学生、选课及课程信息)
- 查询1班的学生学号及姓名
- 查询‘刘晨’的出生年
- 查询姓‘刘’的学生的详细情况(包括学生表、选课表及课程表的全部信息)
- 查询选修了1号课的学生姓名、性别、成绩
- 查询没有先行课的课程的课程号和课程名
- 查询2班的所有女生的情况
- 查询学分为2到3之间的课程号及课程名
- 查询选修1或2号课的学生的班号、学号、姓名、课程名及成绩
- 查询2班至少选修一门其先行课为1号课的学生的班号、学号、姓名、性别、系、课程号及成绩
- 查询2号科成绩最高的学生班号、学号
- 查询1班2号课成绩最低的学生班号、学号
- 查询选修2号课且成绩不是最低的同学班号、学号
- 查询包含2班1号同学所选全部课程的同学的班号、学号
- 查询选修每门课程的课程号及人数
- 实现上述数据库的备份和恢复功能
学习掌握SQL SERVER 2000环境数据库备份方法
练习SQL SERVER 数据库备份与恢复技术方法。
源程序代码和实验结果
E-R图:
建立 S_CS_C 数据库
create database S_SC_C;
1.建立课程表
create table Course
(cno char(1) PRIMARY KEY,
cname char(10) NOT NULL,
cpno char(1),
ccredit int
);
课程表:
2.建立学生表
create table Student
(sclass char(1) NOT NULL ,
sno char(1) ,
sname char(4) NOT NULL,
ssex char(2) NOT NULL,
sage smallint NOT NULL,
sdept char(2) NOT NULL
primary key (sno,sclass)
);
学生表:
3.建立选课表
create table SC
(sclass char(1) NOT NULL,
sno char(1),
cno char(1),
grade char(2),
primary key (sno,cno, sclass),
foreign key (sno,sclass) references Student (sno,sclass),
foreign key (cno) references Course (cno)
);
选课表:
4.查询所有学生的详细信息(包含学生、选课及课程信息)
select Student.sno,sname,ssex,Student.sclass,Sdept,SC.cno,grade,Course.cname,cpno,
ccredit
from Student left outer join(SC join Course on SC.cno=Course.cno)on(Student.sclass=SC.sclass and Student.sno=SC.sno);
所有学生信息:
5.查询1班的学生学号及姓名
select sno,sname
from Student
where sclass='1';
1班的学生学号及姓名:
6.查询‘刘晨’的出生年
select 2019-sage BIRTH
from Student
where sname='刘晨' ;
‘刘晨’的出生年:
7.查询姓‘刘’的学生的详细情况(包括学生表、选课表及课程表的全部信息)
select distinct *
from Student LEFT OUTER JOIN SC ON (Student.sno=SC.sno AND Student.sclass=SC.sclass) left outer join Course on(Course.cno=SC.cno)
where sname like '刘%';
姓‘刘’的学生的详细情况:
8.查询选修了1号课的学生姓名、性别、成绩
select sname,ssex,grade
from Student LEFT OUTER JOIN SC ON (Student.sno=SC.sno AND Student.sclass=SC.sclass) left outer join Course on(Course.cno=SC.cno)
where SC.cno=1;
9.查询没有先行课的课程的课程号和课程名
select Course.cno,Course.cname
from Course
where cpno is NULL;
10.查询2班的所有女生的情况
select *
from Student LEFT OUTER JOIN SC ON (Student.sno=SC.sno AND Student.sclass=SC.sclass) left outer join Course on(Course.cno=SC.cno)
where ssex='女' AND Student.sclass=2;
11.查询学分为2到3之间的课程号及课程名
select cno,cname
from Course
where ccredit between 2 AND 3;
12.查询选修1或2号课的学生的班号、学号、姓名、课程名及成绩
select SC.sclass,SC.sno,Student.sname,Course.cname,SC.grade
from Student LEFT OUTER JOIN SC ON (Student.sno=SC.sno AND Student.sclass=SC.sclass) left outer join Course on(Course.cno=SC.cno)
where SC.cno=1 OR SC.cno=2
13.查询2班至少选修一门其先行课为1号课的学生的班号、学号、姓名、性别、系、课程号及成绩
select Student.sclass,Student.sno,sname,ssex,sdept,SC.cno,grade
from Student ,SC
where Student.sno=SC.sno and Student.sclass=SC.sclass and SC.sclass=2 and SC.cno in
( select SC.cno
from Course left outer join SC on (Course.cno=SC.cno)
where Course.cpno=1
);
14.查询2号科成绩最高的学生班号、学号
select sclass,sno
from SC
where cno=2 and grade >=all(select grade from SC where cno=2)
15.查询1班2号课成绩最低的学生班号、学号
方法一:
select sclass,sno
from Student
where sclass=1 AND sno in (
select sno
from SC
where SC.cno=2 AND SC.sclass=1 AND SC.grade in (
select MIN(grade)
from SC
where SC.cno=2
)
);
方法二:
select sclass,sno
from SC
where cno=2 and sclass=1 and grade <=all(select grade from SC where cno=2 and sclass=1)
16.查询选修2号课且成绩不是最低的同学班号、学号
select sclass,sno
from SC
where cno=2 and grade >any (select grade
from SC
where cno=2);
17.查询包含2班1号同学所选全部课程的同学的班号、学号
select distinct SCX.sclass,SCX.sno
from SC SCX
where not exists (
select *
from SC SCY
where SCY.sclass=2 and SCY.sno=1 and not exists
( select *
from SC SCZ
where SCZ.cno=SCY.cno and SCZ.sno=SCX.sno and SCZ.sclass=SCX.sclass
)
);
18. 查询选修每门课程的课程号及人数
select cno,count(sno)
from SC
group by cno;
19. 实现上述数据库的备份和恢复功能