数据库实验报告论文大学论文.docx
《数据库实验报告论文大学论文.docx》由会员分享,可在线阅读,更多相关《数据库实验报告论文大学论文.docx(34页珍藏版)》请在冰豆网上搜索。
![数据库实验报告论文大学论文.docx](https://file1.bdocx.com/fileroot1/2022-12/8/c0ad534c-9a76-44c1-809f-fb0427c5e98d/c0ad534c-9a76-44c1-809f-fb0427c5e98d1.gif)
数据库实验报告论文大学论文
数据库作业
一、熟悉上机环境。
客户/服务器结构,数据库服务器在一台NT服务器上,同学们通过客户机(操作系统为Windows2000)上安装的SQLServer客户端程序,使用SQLServer数据库服务器。
具体包括:
1.了解SQLServer环境。
鼠标点击开始,进入“MicrosoftSQLServer企业管理器”,点击SQLServer组下的数据库服务器(服务器名称为NEUC-201S(WindowsNT)),可以看到服务器上的圆形标志变为绿色,说明客户端程序已与服务器连接成功。
点击服务器(NEUC-201S(WindowsNT))下的数据库,可以看到服务器上已建立的数据库,你可访问你有权访问的数据库,并进行相应的操作功能。
因为,数据库服务器上建有许多数据库,每个数据库都有一些合法的用户。
2.鼠标点击开始,进入“MicrosoftSQLServer查询分析器”,输入用户名和口令,进入SQL查询分析器。
如:
你登录的客户机为27号,那么请以用户名user27,口令为user27登录,登录后缺省连到数据库user27上,user27/user27是数据库user27的创建者,因此用户user27/user27具有在数据库user27上创建表等一切权力。
3.在SQL查询分析器环境下,你就可进行SQL命令语句操作了。
二、在数据库useri上创建学生选课有关关系模式,并插入相应的数据,实现有关查询。
1.描述学生、课程情况的E-R图如下,请将其转化为用关系数据模型描述的关系模式
createtableStudents--学生
(Snonchar(10),
Snamenchar(20),
Ssexnchar(8),
Sageint,
Sdeptnchar(20),
primarykey(Sno),
);
createtableCourses--课程
(
Cnonchar(4),
Cnamenchar(50),
Ctimeint,
Ccreditint,
Cpnonchar(4)
primarykey(Cno),
foreignkey(Cpno)referencesCourses,
);
createtableSC--选修
(
Snonchar(10),
Cnonchar(4),
Gradeint,
primarykey(Sno,Cno),
foreignkey(Sno)referencesStudents,
foreignkey(Cno)referencesCourses,
);
2.在数据库中定义这些关系模式,并向基本表中插入如下数据:
--插入学生表
insertintoStudents(Sno,Sname,Ssex,Sage,Sdept)
values('20121001','陆毅','男',21,'信息学院')
insertintoStudents(Sno,Sname,Ssex,Sage,Sdept)
values('20121002','李铭','男',24,'资土学院')
insertintoStudents(Sno,Sname,Ssex,Sage,Sdept)
values('20121003','赵红','女',20,'信息学院')
insertintoStudents(Sno,Sname,Ssex,Sage,Sdept)
values('20121004','黄晓明','男',23,'机械学院')
insertintoStudents(Sno,Sname,Ssex,Sage,Sdept)
values('20121005','李冰','女',19,'资土学院')
insertintoStudents(Sno,Sname,Ssex,Sage,Sdept)
values('20121006','李俊','男',25,'信息学院')
insertintoStudents(Sno,Sname,Ssex,Sage,Sdept)
values('20121007','赵金','男',27,'资土学院')
insertintoStudents(Sno,Sname,Ssex,Sage,Sdept)
values('20121008','杨英','女',22,'机械学院')
insertintoStudents(Sno,Sname,Ssex,Sage,Sdept)
values('20121009','张东宇','男',18,'信息学院')
insertintoStudents(Sno,Sname,Ssex,Sage,Sdept)
values('20121010','彭东','男',21,'机械学院')
--插入课程表
insertintoCourses(Cno,Cname,Ctime,Ccredit,Cpno)values('2001','C语言',25,2.5,null)
insertintoCourses(Cno,Cname,Ctime,Ccredit,Cpno)values('2003','C++语言',50,5,'2001')
insertintoCourses(Cno,Cname,Ctime,Ccredit,Cpno)values('1005','文本处理',20,2,'2003')
insertintoCourses(Cno,Cname,Ctime,Ccredit,Cpno)values('1006','信息安全',20,2,'2003')
insertintoCourses(Cno,Cname,Ctime,Ccredit,Cpno)values('2002','汇编语言',30,3,null)
insertintoCourses(Cno,Cname,Ctime,Ccredit,Cpno)values('1003','高等数学',60,6,null)
insertintoCourses(Cno,Cname,Ctime,Ccredit,Cpno)values('1002','数值分析',30,3,'1003')
insertintoCourses(Cno,Cname,Ctime,Ccredit,Cpno)values('2004','C#语言',20,2,'1001')
insertintoCourses(Cno,Cname,Ctime,Ccredit,Cpno)values('1001','离散数学',40,4,'1002')
insertintoCourses(Cno,Cname,Ctime,Ccredit,Cpno)values('1004','软件工程',30,3,'2004')
insertintoCourses(Cno,Cname,Ctime,Ccredit,Cpno)values('3001','工程制图',30,3,null)
insertintoCourses(Cno,Cname,Ctime,Ccredit,Cpno)values('3002','机械原理',60,6,'3001')
insertintoCourses(Cno,Cname,Ctime,Ccredit,Cpno)values('4001','线性代数',30,3,null)
insertintoCourses(Cno,Cname,Ctime,Ccredit,Cpno)values('4002','测绘工程',50,5,'4001')
--插入选修关系
insertintoSC(Sno,Cno,Grade)values('20121001','1003',91)
insertintoSC(Sno,Cno,Grade)values('20121001','1002',93)
insertintoSC(Sno,Cno,Grade)values('20121001','1001',89)
insertintoSC(Sno,Cno,Grade)values('20121001','2001',97)
insertintoSC(Sno,Cno,Grade)values('20121001','1004',90)
insertintoSC(Sno,Cno,Grade)values('20121001','1005',98)
insertintoSC(Sno,Cno,Grade)values('20121001','1006',87)
insertintoSC(Sno,Cno,Grade)values('20121001','2002',79)
insertintoSC(Sno,Cno,Grade)values('20121001','2003',97)
insertintoSC(Sno,Cno,Grade)values('20121001','2004',99)
insertintoSC(Sno,Cno,Grade)values('20121003','1003',81)
insertintoSC(Sno,Cno,Grade)values('20121003','1002',98)
insertintoSC(Sno,Cno,Grade)values('20121003','1001',79)
insertintoSC(Sno,Cno,Grade)values('20121003','2001',90)
insertintoSC(Sno,Cno,Grade)values('20121003','1004',92)
insertintoSC(Sno,Cno,Grade)values('20121003','1005',78)
insertintoSC(Sno,Cno,Grade)values('20121003','1006',80)
insertintoSC(Sno,Cno,Grade)values('20121003','2002',69)
insertintoSC(Sno,Cno,Grade)values('20121003','2003',87)
insertintoSC(Sno,Cno,Grade)values('20121003','2004',69)
insertintoSC(Sno,Cno,Grade)values('20121006','1003',83)
insertintoSC(Sno,Cno,Grade)values('20121006','1002',98)
insertintoSC(Sno,Cno,Grade)values('20121006','1001',99)
insertintoSC(Sno,Cno,Grade)values('20121006','2001',93)
insertintoSC(Sno,Cno,Grade)values('20121006','1004',72)
insertintoSC(Sno,Cno,Grade)values('20121006','1005',78)
insertintoSC(Sno,Cno,Grade)values('20121006','1006',80)
insertintoSC(Sno,Cno,Grade)values('20121006','2002',79)
insertintoSC(Sno,Cno,Grade)values('20121006','2003',83)
insertintoSC(Sno,Cno,Grade)values('20121006','2004',89)
insertintoSC(Sno,Cno,Grade)values('20121009','1003',81)
insertintoSC(Sno,Cno,Grade)values('20121009','1002',78)
insertintoSC(Sno,Cno,Grade)values('20121009','1001',77)
insertintoSC(Sno,Cno,Grade)values('20121009','2001',70)
insertintoSC(Sno,Cno,Grade)values('20121009','1004',99)
insertintoSC(Sno,Cno,Grade)values('20121009','1005',98)
insertintoSC(Sno,Cno,Grade)values('20121009','1006',89)
insertintoSC(Sno,Cno,Grade)values('20121009','2002',99)
insertintoSC(Sno,Cno,Grade)values('20121009','2003',84)
insertintoSC(Sno,Cno,Grade)values('20121009','2004',79)
insertintoSC(Sno,Cno,Grade)values('20121004','3001',84)
insertintoSC(Sno,Cno,Grade)values('20121004','3002',93)
insertintoSC(Sno,Cno,Grade)values('20121008','3001',87)
insertintoSC(Sno,Cno,Grade)values('20121008','3002',89)
insertintoSC(Sno,Cno,Grade)values('20121010','3001',94)
insertintoSC(Sno,Cno,Grade)values('20121010','3002',99)
insertintoSC(Sno,Cno,Grade)values('20121002','4001',92)
insertintoSC(Sno,Cno,Grade)values('20121002','4002',94)
insertintoSC(Sno,Cno,Grade)values('20121005','4001',94)
insertintoSC(Sno,Cno,Grade)values('20121005','4002',96)
insertintoSC(Sno,Cno,Grade)values('20121007','4001',91)
insertintoSC(Sno,Cno,Grade)values('20121007','4002',95)
3.插入相应的数据,试着插入重复的元组,结果如何?
答:
由于在定义关系模式时,已经添加主键约束(primarykey(Sno),primarykey(Cno),primarykey(Sno,Cno)),所以不可以再插入重复的元组。
4.在已建立的关系模式之上(已插入一些数据)建立主键约束,参照约束和用户定义的约束(要求学生年龄不小于14岁,不大于35岁),如果约束不能建立,请分析原因,修改后建立上述约束。
答:
由于在定义关系模式时,已经添加主键约束(primarykey(Sno),primarykey(Cno),primarykey(Sno,Cno))和参照约束(foreignkey(Sno)referencesStudents,
foreignkey(Cno)referencesCourses,foreignkey(Cpno)referencesCourses),现添加用户定义的约束(要求学生年龄不小于14岁,不大于35岁),示例如下图:
5.如果约束建立后,请试着插入重复元组,结果如何?
试着插入重复元组,无法插入:
答:
约束建立后,插入重复元组,无法插入,示例如下图:
三、用SQL完成下列查询
1.求选修了课程的学生的学号,要求:
(1)不使用distinct语句,消除重复元组,写出其SQL语句
selectSnofromSCgroupbySNohavingcount(*)>0
(2)
使用distinct语句,消除重复元组,写出其SQL语句
selectdistinctStudents.SnofromStudents,SCwhereStudents.Sno=SC.
Sno
(3)如果该查询写成:
selectStudents.SnofromStudents,SCwhereStudents.Sno=SC.Sno
请问该查询结果和上面哪个结果是相同的?
都不相同
2.求开设的课程号、课程名、学时和学分,要求对查询结果的列重新命名。
selectCourses.Cno课程号,Courses.Cname课程名,Courses.Ctime学时,Courses.Ccredit学分fromCourses
3.求计算机系和数学系的学生学号、姓名和年龄。
selectStudents.Sno,Students.Sname,Students.SagefromStudents
whereStudents.Sdeptin('计算机系','数学
4.求不是数学系、计算机系的学生的情况,要求select后写*代替列出所有的列名。
select*fromStudentswhereSdeptnotin('计算机系','数学系')
5.求全体学生的信息,要求按年龄升序排列。
select*fromStudentsorderbySageasc
6.求计算机系年龄在18~20岁之间的学生姓名和年龄
selectSname,SagefromStudentswhereSdept='计算机系'andSagebetween18and24
7.求姓名是以王开头的计算机系学生。
select*fromStudentswhereSnamelike'王%'andStudents.Sdept='计算机系'
8.求选修了C2(课号)课程的学生的学号、姓名、成绩。
selectStudents.Sno,Students.Sname,SC.GradefromStudents,SC
whereStudents.Sno=SC.SnoandSC.Cno='C2'
9.求学号为95开头的学生的学号和所选修的课程的学分。
selectStudents.Sno学号,Courses.Ccredit学分fromStudents,SC,Courses
whereStudents.Sno=SC.SnoandSC.Cno=Courses.CnoandStudents.Snolike'95%'
10.求选修C1课程且成绩为80分以上的学生的学号、姓名和成绩。
selectStudents.Sno学号,Students.Sname姓名,SC.Grade成绩fromStudents,SC,Courses
whereStudents.Sno=SC.SnoandSC.Cno=Courses.CnoandCourses.Cno='C1'andSC.Grade>80
11.求计算机系每个学生的姓名,选修的课程名和成绩。
selectStudents.Sname姓名,Courses.Cname课程名,SC.Grade成绩fromStudents,SC,Courses
whereStudents.Sno=SC.SnoandSC.Cno=Courses.CnoandStudents.Sdept='计算机系'
12.求每个学生的学号及平均成绩。
selectStudents.Sno学号,avg(Grade)平均成绩fromStudents,SC
whereStudents.Sno=SC.Sno
groupbyStudents.Sno
13.求男学生每一年龄组中超过1人的年龄组及人数。
selectSage年龄组,count(Sno)人数fromStudentsgroupbySagehavingcount(*)>1
14.求每一门课程的间接先行课号。
selectcourses1.Cno课程号,courses2.Cpno间接先行课号fromCoursescourses1,Coursescourses2
wherecourses1.Cpno=courses2.Cno
15.求选修了全部课程的学生的学号。
selectStudents.Sno学生的学号
fromStudents
wherenotexists(select*
fromCourses
wherenotexists(select*
fromSC
whereSno=Students.Snoand
Cno=Courses.Cno))
四、
1.修改表Students,在其中加入一个字段性别sexchar
(1)
ALTERTABLEstudentsADDsexchar
(1);
2.创建视图
▪创建计算机系学生视图CS_Students,其中包括学号、年龄和性别。
带withcheckopition子句
不带withcheckopition子句
▪时各插入一计算机系学生记录,通过视图查询插入的记录,结果如何?
通过表Students查询插入的记录,查看所在系字段上的值?
---withcheckoption
createviewCS_Studentsasselectsno,sage,ssex,sdept
fromstudents
wheresdept='CS'
withcheckoption
insertintoCS_Students(sno,sage,ssex,sdept)
values('2010012','19','M','CS');
没有withcheckoption
createviewCS_Studentsasselectsno,sage,ssex
fromstudents
wheresdept='CS'
insertintoCS_Students(sno,sage,ssex)
values('2010012','19','M');
Withcheckoption视图插入时加入为计算机系时图、表成功插入,不是时都无法成功加入;没有withnooption时可以插入students表,视图始终无法插入
创建一视图,表示学生的平均成绩,其中包括Sno,avgGrade。
通过