最新数据库实验二.docx
《最新数据库实验二.docx》由会员分享,可在线阅读,更多相关《最新数据库实验二.docx(36页珍藏版)》请在冰豆网上搜索。
最新数据库实验二
数据库实验二
计算机科学系实验报告(首页)
课程名称数据库系统概论班级网络工程2班
实验名称数据库中数据的查询指导教师索剑
姓名 李文森学号1214080613213
日期2014年5月12日
一、实验目的
学会使用SQL语言进行各种类型的查询,理解各种查询的异同及相互之间的转换。
二、实验设备与环境
SQLSERVER2000、XP系统
三、实验内容、程序清单及运行结果
实验内容:
练习单表查询、嵌套查询、连接查询及集合查询
操作步骤:
1)打开实验1建立的数据库
2)在查询分析器中完成以下单表查询语句
查询全体学生的姓名及其出生年份
查询年龄不在20~23岁之间的学生姓名、系别和年龄
查询既不是IS、MA,也不是CS系学生的姓名和性别
查询所有姓刘的学生的姓名、学号和性别
查询选修了3号课程的学生的学号及其成绩,结果按分数的降序排列
计算1号课程的学生平均成绩
查询选修了3门以上课程的学生学号
3)在查询分析器中完成以下连接查询语句
查询每个学生及其选修课程的情况(使用自然连接、外连接分别完成)
查询每一门课的间接先修课
查询选修2号课程且成绩在90分以上的所有学生
查询每个学生的学号、姓名、选修的课程名及成绩
4)在查询分析器中完成以下嵌套查询语句
查询与“刘晨”在同一个系学习的学生(使用嵌套查询、自身连接、比较运算符分别完成)
查询选修了课程名为“信息系统”的学生学号和姓名(使用嵌套查询、自然连接分别完成)
查询其他系中比信息系某一学生年龄小的学生姓名和年龄(使用ANY谓词、集函数分别完成)
查询所有选修了1号课程的学生(使用比较运算符、IN、EXISTS分别完成)
查询没有选修1号课程的学生的姓名
查询选修全部课程的学生姓名
查询至少选修了学生95002选修的全部课程的学生号码
5)在查询分析器中完成以下集合查询语句
查询计算机科学系的学生及年龄不大于19岁的学生并按学号排序(使用单表查询、集合查询分别完成)
查询计算机科学系的学生及年龄不大于19岁的学生的差集
6)在企业管理器可视化环境下重新完成2-5步骤的内容
程序清单及运行结果
第一:
查询
7)打开实验1建立的数据库
8)在查询分析器中完成以下单表查询语句
查询全体学生的姓名及其出生年份
SELECTSname,2014-SageASyearsFROMStudent;
查询选修了课程的学生学号(去掉重复行)
SELECTDISTINCTSnoFROMSC;
查询年龄不在20~23岁之间的学生姓名、系别和年龄
SELECTSname,Sdept,SageFROMStudentwhereSagenotbetween20and23;
查询既不是IS、MA,也不是CS系学生的姓名和性别
SELECTSname,SdeptFROMStudentWHERESdeptnotin('IS','MA','CS');
查询所有姓刘的学生的姓名、学号和性别
SELECTSname,Sno,SageFROMStudentWHERESnameLIKE'刘%';
查询选修了3号课程的学生的学号及其成绩,结果按分数的降序排列
SELECTSno,GradeFROMSCWHERECno='3'ORDERBYGradeDESC;
计算1号课程的学生平均成绩
SELECTAVG(Grade)FROMSCWHERECno='1';
查询选修了3门以上课程的学生学号
SELECTSnofromSCGROUPBYSnoHAVINGCOUNT(Cno)>3;
9)在查询分析器中完成以下连接查询语句
查询每个学生及其选修课程的情况(使用自然连接、外连接分别完成)
SELECTStudent.*,SC.CnoFROMStudent,SCWHEREStudent.Sno=SC.Sno;
SELECTStudent.*,CnoFROMStudentJOINSCON(Student.Sno=SC.Sno);
查询每一门课的间接先修课
SELECTfirst.Cno,second.CpnofromCoursefirst,CoursesecondWHEREfirst.Cpno=second.Cno;
查询选修2号课程且成绩在90分以上的所有学生
SELECTSnameFROMStudenta,SCbWHEREa.Sno=b.SnoANDCno='2'ANDGrade>90;
查询每个学生的学号、姓名、选修的课程名及成绩
SELECTa.Sno,Sname,c.Cname,GradeFROMStudenta,SCb,CoursecWHEREa.Sno=b.SnoANDb.Cno=c.Cno;
10)在查询分析器中完成以下嵌套查询语句
查询与“刘晨”在同一个系学习的学生(使用嵌套查询、自身连接、比较运算符分别完成)
1.嵌套查询
SELECT*FROMStudentaWHERESdeptIN(SELECTSdeptFROMStudentbWHEREb.Sname='刘晨');
2.自身连接
SELECTa.*FROMStudenta,StudentbWHEREb.Sname='刘晨'ANDa.Sdept=b.Sdept;
3.比较查询
SELECT*FROMStudentaWHERESdept=(SELECTSdeptFROMStudentbWHEREb.Sname='刘晨');
查询选修了课程名为“信息系统”的学生学号和姓名(使用嵌套查询、自然连接分别完成)
1.嵌套查询
SELECTSno,SnameFROMStudentWHERESnoIN(SELECTSnoFROMSCWHERECnoIN(SELECTCnoFROMCourseWHERECname='信息系统'));
2.自然连接
SELECTa.Sno,SnameFROMStudenta,SCb,CoursecWHEREa.Sno=b.SnoANDb.Cno=c.CnoANDCname='信息系统';
查询其他系中比信息系某一学生年龄小的学生姓名和年龄(使用ANY谓词、集函数分别完成)
1.ANY谓词
SELECTSname,SageFROMStudentWHERESage'IS';
2.聚集函数
SELECTSname,SageFROMStudentWHERESage<(SELECTMAX(Sage)FROMStudentWHERESdept='IS')ANDSdept<>'IS';
查询所有选修了1号课程的学生(使用比较运算符、IN、EXISTS分别完成)
1.比较运算符
2.IN
SELECTSnameFROMStudentWHERESnoIN(SELECTSnoFROMSCWHERECno='1');
3.EXISTS
SELECTSnameFROMStudentWHEREEXISTS(SELECT*FROMSCWHERESno=Student.SnoANDCno='1');
查询没有选修1号课程的学生的姓名
查询选修全部课程的学生姓名
SELECTSnameFROMStudentWHERENOTEXISTS(SELECT*FROMCourseWHERENOTEXISTS(SELECT*FROMSCWHERESno=Student.SnoANDCno=Course.Cno));
查询至少选修了学生95002选修的全部课程的学生号码
SELECTDISTINCTSnoFROMSCaWHERENOTEXISTS(SELECT*FROMSCbWHEREb.Sno='95002'ANDNOTEXISTS(SELECT*FROMSCcWHEREc.Sno=a.SnoANDc.Cno=b.Cno));
11)在查询分析器中完成以下集合查询语句
查询计算机科学系的学生及年龄不大于19岁的学生并按学号排序(使用单表查询、集合查询分别完成)
单表查询:
SELECT*FROMStudentWHERESdept='CS'ORSage<=19ORDERBYSno;
集合查询:
SELECT*FROMStudentWHERESdept='CS'UNIONSELECT*FROMStudentWHERESage<=19ORDERBYSno;
查询计算机科学系的学生及年龄不大于19岁的学生的差集
SELECT*FROMStudentWHERESdept='CS'ANDSage>19;
第二:
可视化实现结果
1.查询全体学生的姓名及其出生年份
2.查询选修了课程的学生学号(去掉重复行)
3.查询年龄不在20~23岁之间的学生姓名、系别和年龄
4.查询既不是IS、MA,也不是CS系学生的姓名和性别
5.查询所有姓刘的学生的姓名、学号和性别
6.查询选修了3号课程的学生的学号及其成绩,结果按分数的降序排列
7.计算1号课程的学生平均成绩
8.查询选修了3门以上课程的学生学号
9.在查询分析器中完成以下连接查询语句
查询每个学生及其选修课程的情况(使用自然连接、外连接分别完成)
10.查询每一门课的间接先修课
11查询选修2号课程且成绩在90分以上的所有学生
12查询每个学生的学号、姓名、选修的课程名及成绩
13在查询分析器中完成以下嵌套查询语句
查询与“刘晨”在同一个系学习的学生(使用嵌套查询、自身连接、比较运算符分别完成)
1.嵌套查询
2.自身连接
3.比较查询
查询选修了课程名为“信息系统”的学生学号和姓名(使用嵌套查询、自然连接分别完成)
1.嵌套查询
2.自然连接
14查询其他系中比信息系某一学生年龄小的学生姓名和年龄(使用ANY谓词、集函数分别完成)
1.ANY谓词
2.聚集函数
15.查询所有选修了1号课程的学生(使用比较运算符、IN、EXISTS分别完成)
1.比较运算符
2.IN
3.EXISTS
查询没有选修1号课程的学生的姓名
查询选修全部课程的学生姓名
SELECTSnameFROMStudentWHERENOTEXISTS(SELECT*FROMCourseWHERENOTEXISTS(SELECT*FROMSCWHERESno=Student.SnoANDCno=Course.Cno));
查询至少选修了学生95002选修的全部课程的学生号码
在查询分析器中完成以下集合查询语句
查询计算机科学系的学生及年龄不大于19岁的学生并按学号排序(使用单表查询、集合查询分别完成)
单表查询:
SELECT*FROMStudentWHERESdept='CS'ORSage<=19ORDERBYSno;
集合查询:
SELECT*FROMStudentWHERESdept='CS'UNIONSELECT*FROMStudentWHERESage<=19ORDERBYSno;
查询计算机科学系的学生及年龄不大于19岁的学生的差集
SELECT*FROMStudentWHERESdept='CS'ANDSage>19;
四、实验体会
数据库的逻辑关系很强,通过做实验,让我更容易的知道其中的奥秘,通过不断的实验来锻炼自己逻辑分析能力也是一个不错的选择。