实验二 交互式SQL实验报告
时间:2020-09-01 08:11:44 来源:勤学考试网 本文已影响 人
。
试验一 交互式SQL
一 实验目的
1.熟悉数据库的交互式SQL工具。
2.熟悉通过SQL对数据库进行操作。
.完成作业的上机练习。3二 实验工具SQL Server 2005
利用SQL Server 2005及其交互式查询来熟悉SQL语句。
三 实验内容和要求
1.在SQL Server 2005中建立一个数据库,进行实验所要求的各种操作,所有的SQL操作均在建立的新库里进行;
2.根据以下要求认真填写实验报告,记录所有的实验用例的SQL语言;
3.1 数据定义
(1)熟悉基本表的创建、修改及删除。
(2)熟悉索引的创建和删除。
3.2 数据操作
(1)完成各类查询操作(单表查询,连接查询,嵌套查询)等;
;)完成各类更新操作(插入数据,修改数据,删除数据)(23.3 视图的操作
视图的定义(创建和删除),查询,更新(注意更新的条件)。
3.4 具体操作内容
在MS SQL Server中创建学生-课程数据库,要求有学生表(Student)、课程表(Course)和选课表(SC),向三个表中分别插入相关数据,再用SQL语句完成一下要求的查询。
1.使用SQL语言创建下面的三个表。
表一:学生信息表(Student)
列名
说明
数据类型
约束
Sno
学号
字符串,长度为10
非空
Sname
姓名
字符串,长度为20
非空
Ssex
性别
字符串,长度为10
非空
Sage
年龄
字符串,长度为10
非空
Sdept
所在系
字符串,长度为10
非空
表二:课程信息表(Course)
列 名
说 明
数据类型
约 束
Cno
课程号
整形
非空
Cname
课程名
字符串,长度为20
非空
Cpno
先行课
整型
允许为空
Ccredit
学分
整型
非空
表三:学生选课信息表(SC)
精选资料,欢迎下载
。
列名
说明
数据类型
约束
Sno
学号
字符串,长度为10
Student的外码主码,引用
Cno
课程号
整型
的外码主码,引用Course
Grade
成绩
字符串,长度为10
0~100 取值
在以上的三个表中,分别插入下面的数据;2. )表一:学生信息表(Student
Sno
Sname
Ssex
Sage
Sdept
200215121
李勇
男
20
CS
200215122
刘晨
女
19
CS
200215123
王敏
女
18
MA
200215125
张立
男
19
IS
Course)表二:课程信息表(
Cno
Cname
Cpno
Ccredit
1
数据库
5
4
2
数学
2
3
信息系统
1
4
4
操作系统
6
3
5
数据结构
7
4
6
数据处理
2
7
语言PASCAl
6
4
)表三:学生选课信息表(SC
Sno
Cno
Grade
200215121
1
92
200215121
2
85
200215121
3
88
200215122
2
90
200215122
3
80
语句:根据上面的三种表,写出完成如下查询功能的SQL3. (1)查询全体学生的姓名、出生年份和所在的院系,要求用小写字母表示所有系名 (2)查询选修了课程的学生学号 23岁)之间的学生的姓名、系别、年龄岁(包括20岁和查询年龄在(3)20~23 )学生的姓名和性别MA)和信息系(IS(4) 查询计算机科学系(CS)、数学系( i个字符为的课程的详细情况(5) 查询以“DB_”开头,且倒数第3查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序(6)
排列 号课程的学生最高分数、最低分数、平均分数查询选修(7) 1 门课程的学生学号查询选修了3(8)
(9) 查询每一门课的间接先修课(即先修课的先修课) 90号课程且成绩大于等于分的所有学生2(10) 查询选修 查询与‘刘晨'在同一个系学习的学生(11)
精选资料,欢迎下载
。
(12) 查询其他系中比计算机科学系所有学生年龄都小的学生姓名及年龄
(13) 将一个新学生元组(学号:200215128;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中
(14) 将学生200215121的年龄改为22岁
(15) 删除学号为200215128的学生记录
(16) 建立信息系学生的视图
(17) 在信息系学生的视图中找出年龄小于20岁的学生
(18) 的学生姓名改为“刘辰”200215122is_Student中学号为将信息系学生视图
四 实验报告
4.1 实验环境:
Windows XP
Microsoft SQL server Management Studio 2005
4.2 实验内容与完成情况:
(1) 查询全体学生的姓名、出生年份和所在的院系,要求用小写字母表示所有系名
SELECT Sname NAME,'Year of Birth:' BIRTH,2004-Sage BIRTHDAY,LOWER(Sdept) DEPARTMENT FROM
Student;
(2)查询选修了课程的学生学号
SELECT DISTINCT Sno FROM SC;
(3)查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别、年龄
SELECT Sname,Sdept,Sage FROM Student WHERE Sage BETWEEN 20 AND 23;
(4)查询计算机科学系(CS)、数学系(MA)和信息系(IS)学生的姓名和性别
SELECT Sname,Ssex FROM Student WHERE Sdept IN('CS','MA','IS');
(5)查询以“DB_”开头,且倒数第3个字符为i的课程的详细情况
精选资料,欢迎下载
。
SELECT * FROM Course WHERE Cname LIKE 'DB\_%__'ESCAPE'\';
查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列(6) SELECT * FROM Student ORDER BY Sdept,Sage DESC;
1号课程的学生最高分数、最低分数、平均分数(7)查询选修 SELECT MAX(Grade) MAX,MIN(Grade) MIN,AVG(Grade) AVG FROM SC WHERE Cno='1';
3门课程的学生学号(8)查询选修了 SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*)>3;
查询每个学生及其选修课程的情况 )(8)SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM Student,SC
WHERE Student.Sno=SC.Sno;
①查询每一门课的间接先修课(即先修课的先修课)(9)SELECT first.Cno,second.Cpno FROM Course first,Course second
WHERE first.Cpno=second.Cno;
②查询每一门课的间接先修课(即先修课的先修课)(消除有空的行)SELECT first.Cno,second.Cpno FROM Course first,Course second
WHERE first.Cpno=second.Cno and second.Cpno is not null;
分的所有学生2号课程且成绩大于等于90(10) 查询选修①Student.Sno=SC.Sno
where from Sdept Student ,SC Student.Sno,Sname,Ssex,Sage, select
and Cno='2' and Grade>=90;
②select Sno,Sname,Ssex,Sage, Sdept from Student where Sno=(select Sno from Sc where
Cno='2' and grade >='90'); 精选资料,欢迎下载
。
查询与‘刘晨'在同一个系学习的学生(11)
①select Sno,Sname,Sdept from Student where Sdept in (select Sdept from Student where
');
刘晨Sname='②and
S1.Sdept=s2.Sdept S2 where select S1.Sno,S1.Sname,S1.sdept from Student S1,student
';
刘晨S2.Sname='③select Sno,Sname ,Sdept from Student where Sdept =(select Sdept from student where
');
Sname='刘晨④select Sno,Sname,Sdept from Student S1 where exists (select * from Student S2 where
');
S2.Sdept=S1.Sdept and S2.Sname ='刘晨
(12)查询其他系中比计算机科学系所有学生年龄都小的学生姓名及年龄①select Sname ,Sage from Student
where Sage <all(select Sage from Student where Sdept='CS')
and Sdept<>'CS';
②select Sname ,Sage from Student
where Sage <(select min(Sage) from Student where Sdept='CS')
and Sdept<>'CS';
;年龄:;姓名:陈冬;性别:男;所在系:200215128IS(13)将一个新学生元组(学号: Student表中18岁)插入到insert into Student(Sno,Sname,Ssex,Sdept,Sage)
','IS','18'); 男values ('200215128','陈冬','select * from Student;
岁200215121)将学生的年龄改为2214(update Student set Sage ='22' where Sno='200215121';
select * from Student;
精选资料,欢迎下载
。
(15)删除学号为200215128的学生记录
delete from Student where Sno='200215128';
select * from Student;
(16)建立信息系学生的视图
create view is_Student as select Sno,Sname,Sage from Student where Sdept='IS';
(17)在信息系学生的视图中找出年龄小于20岁的学生
select Sno,Sage from is_Student where Sage<20 ;
(18)将信息系学生视图is_Student中学号为200215122的学生姓名改为“刘辰”
update is_Student set Sname='刘辰' where Sno='200215122';
select * from is_Student;
(19)删除信息系学生视图is_Student中学号为200215125的记录
delete from is_Student where Sno='200215125';
select * from is_Student;
4.3 出现的问题:
在写第(9)个查询功能的时候用
select first.Cno,second.Cpno from Course first,Course second where
first.Cpno=second.Cno;
这句SQL语句输出的结果中有的课程没有先修课。
4.4 解决方案(列出遇到的问题和解决办法,列出没有解决的问题):
原因:没有排除掉那些没有先修课的课程,所以查询结果中会有空值。
解决方案:这样写就会把没有先修课的课程给排除掉。
精选资料,欢迎下载
。
select first.Cno,second.Cpno from Course first,Course second where
first.Cpno=second.Cno and second.Cpno is not null;
五 实验感想
通过这次实验课,让我对数据库的书写规范有了更深刻的印象,同时对数据查询,数据更新,视图的创建、删除、查询、更新有了进一步的了解,对他们的认识不再是那么抽象。
现在感觉,理论加实践这种学习方法真的很好,对于巩固知识很有效。
精选资料,欢迎下载
。
Welcome !!!
欢迎您的下载,资料仅供参考!
精选资料,欢迎下载