1、数据库原理与应用实验报告数据库原理与应用实验报告班级:2013级软工5班 姓名:刘爽 学号:201326811811实验2、SQL的数据查询2.1 实验目的熟悉SQL语句的数据查询语言,能够SQL语句对数据库进行单表查询、连接查询、嵌套查询、集合查询和统计查询。2.2 实验内容实验内容主要是对数据库进行查询操作,包括如下四类查询方式:(1) 单表查询 查询的目标表达式为所有列、指定的列或指定的列的运算三种不同。 使用DISTINCT保留字消除重复行。 对查询结果排序和分组。 集合分组使用集函数进行各项统计。(2) 连接查询 笛卡儿连接和等值连接。 自连接。 外连接 复合条件连接。 多表连接。(
2、3) 嵌套查询 通过实验验证对子查询的两个限制条件。 体会相关子查询和不相关子查询的不同。 考察四类谓词的用法,包括:第一类,IN、NOT IN;第二类,带有比较运算符的子查询;第三类,SOME、ANY或ALL谓词的子查询,查询最大值和最小值;第四类,带有EXISTS谓词的子查询,实现“所有”等情况(如王宏的“所有”课程,“所有”女生选修的课程)(4) 集合运算 使用保留字UNION进行集合或运算。 采用逻辑运算符AND或OR来实现集合交和减运算。2.3 实验步骤以University_Mis数据库为例,该数据库中有四张如实验1,其中Score是每门课的考试成绩,Scredit是学生所有考试合
3、格课程所获得的积分总数,Ccredit每门课程的学分数。在数据库中,存在这样的联系:学生可以选择课程,一个课程对应一个教师。在表Reports中保存学生的选课记录和考试成绩。(1) 查询性别为“男”的所有学生的名称并按学号升序排列。 实现代码: select Snamefrom Students_lswhere Ssex=男order by Sno asc查询结果:(2) 查询学生的选课成绩合格的课程成绩,并把成绩换算为积分。积分的计算公式为:1+(考试成绩-60)*0.1*Ccredit。考试成绩=60 否则=0实现代码:SELECT Sno,1*Ccredit+(Score-60)*0.1
4、*CcreditFROM Reports_ls,Courses_lsWHERE Score=60 AND Reports_ls.Cno=Courses_ls.CnoUNIONSELECT Sno,0FROM Reports_ls,Courses_lsWHERE Score=3 )查询结果:(10) 查询编号S26的学生所选的全部课程的课程名和成绩。 实现代码: SELECT Cname,ScoreFROM Reports_ls,Courses_lsWHERE Reports_ls.Sno=S26AND Reports_ls.Cno=Courses_ls.Cno AND Cname IN(SEL
5、ECT CnameFROM Courses_lsWHERE Cno IN(SELECT CnoFROM Reports_lsWHERE Reports_ls.Sno=S26 )查询结果:(11) 查询所有选了“数据库原理及其应用”课程的学生编号和姓名。. 实现代码: SELECT DISTINCT Sno,SnameFROM Courses_ls,Students_lsWHERE Sno IN(SELECT SnoFROM Reports_lsWHERE Cno IN(SELECT CnoFROM Courses_lsWHERE Cname=数据库原理及其应用 )查询结果:(12) 求出选择了
6、同一个课程的学生对。 实现代码: SELECT Cno,Cname,Sno,SnameFROM Courses_ls,Students_lsWHERE Sno IN(SELECT SnoFROM Reports_lsWHERE Cno IN(SELECT CnoFROM Courses_ls)ORDER BY Cno ASC查询结果:(13) 求出至少被两名学生选修的课程编号。 实现代码: SELECT Cno,CnameFROM Courses_lsWHERE Cno IN(SELECT CnoFROM Reports_lsGROUP BY Cno HAVING(COUNT(Cno)=2)查
7、询结果:(14) 查询选修了编号S26的学生所选的某个课程的学生编号。 实现代码: SELECT Sno,CnameFROM Students_ls,Courses_lsWHERE Cname IN(SELECT CnameFROM Courses_lsWHERE Cno IN(SELECT CnoFROM Reports_lsWHERE Sno=S26)查询结果:(15) 查询学生的基本信息及选修课程编号和成绩。 实现代码: SELECT Students_ls.Sno,Sname,Semail,Scredit,Ssex,Courses_ls.Cno,Cname,ScoreFROM Stud
8、ents_ls,Courses_ls,Reports_lsWHERE Students_ls.Sno=Reports_ls.Sno AND Courses_ls.Cno=Reports_ls.Cno查询结果:(16) 查询学号S52的学生的姓名和选修的课程名称及成绩。 实现代码: SELECT DISTINCT Sname,Cname,ScoreFROM Students_ls,Courses_ls,Reports_lsWHERE Students_ls.Sno=S26 AND Courses_ls.Cno=Reports_ls.Cno AND Reports_ls.Sno=S26 AND C
9、name IN(SELECT CnameFROM Courses_lsWHERE Cno IN(SELECT CnoFROM Reports_lsWHERE Sno=S26 )查询结果:(17) 查询和学号S52的学生同性别的所有学生资料。 实现代码: SELECT Students_ls.*FROM Students_lsWHERE Ssex IN(SELECT SsexFROM Students_lsWHERE Sno=S52)查询结果:(18) 查询所有选课的学生的详细信息。 实现代码: SELECT Students_ls.*FROM Students_lsWHERE Sno IN(S
10、ELECT SnoFROM Reports_ls)查询结果:(19) 查询没有学生选的课程的编号和名称。 实现代码: SELECT Cno,CnameFROM Courses_lsWHERE Cno NOT IN(SELECT CnoFROM Reports_ls)查询结果:(20) 查询选修了课程名为C+的学生学号和姓名。 实现代码: SELECT Students_ls.Sno,Sname,CnameFROM Students_ls,Reports_ls,Courses_lsWHERE Students_ls.Sno=Reports_ls.Sno AND Courses_ls.Cno=Re
11、ports_ls.Cno AND Cname IN(SELECT CnameFROM Courses_lsWHERE Cname=C+)查询结果:(21) 找出选修课程UML或者课程C+的学生学号和姓名。 实现代码: SELECT Students_ls.Sno,Sname,CnameFROM Students_ls,Reports_ls,Courses_lsWHERE Students_ls.Sno=Reports_ls.Sno AND Courses_ls.Cno=Reports_ls.Cno AND Cname IN(SELECT CnameFROM Courses_lsWHERE Cn
12、ame=C+ OR Cname=UML)查询结果:(22) 找出和课程UML或课程C+的学分一样课程名称。 实现代码: SELECT Cno,CnameFROM Courses_lsWHERE Ccredit IN(SELECT CcreditFROM Courses_lsWHERE Cname=C+ OR Cname=UML)查询结果:(23) 查询所有选修编号C01的课程的学生的姓名。 实现代码: SELECT Sno,Sname,CnameFROM Students_ls,Courses_lsWHERE Sno IN(SELECT SnoFROM Reports_lsWHERE Repo
13、rts_ls.Cno=Courses_ls.Cno AND Cno IN(SELECT CnoFROM Courses_lsWHERE Cname=C+)查询结果:(24) 查询选修了所有课程的学生姓名。 实现代码: SELECT DISTINCT Sno,SnameFROM Students_ls,Courses_lsWHERE Sno IN(SELECT SnoFROM Reports_lsGROUP BY Sno HAVING COUNT(Cno)=7)查询结果:(25) 利用集合查询方式,查询选修课程C+或选择课程JAVA的学生的编号、姓名和积分。 实现代码: SELECT Stude
14、nts_ls.Sno,Sname,1*Ccredit+(Score-60)*0.1*Ccredit,CnameFROM Reports_ls,Courses_ls,Students_lsWHERE Score=60 AND Reports_ls.Cno=Courses_ls.Cno AND Students_ls.Sno=Reports_ls.Sno AND Students_ls.Sno IN(SELECT Students_ls.SnoFROM Reports_lsWHERE Reports_ls.Cno=Courses_ls.Cno AND Cno IN(SELECT CnoFROM C
15、ourses_lsWHERE Cname=JAVA OR Cname=C+)UNIONSELECT Students_ls.Sno,Sname,0,CnameFROM Reports_ls,Courses_ls,Students_lsWHERE (Score60 AND Students_ls.Sno=Reports_ls.Sno AND Reports_ls.Cno=Courses_ls.Cno AND EXISTS(SELECT *FROM Reports_lsWHERE Cno=C01 AND Reports_ls.Sno=Students_ls.Sno AND EXISTS(SELEC
16、T *FROM Reports_lsWHERE Cno=C03 AND Reports_ls.Sno=Students_ls.Sno)UNIONSELECT Students_ls.Sno,Sname,0,CnameFROM Students_ls,Courses_ls,Reports_lsWHERE (Score60 AND Students_ls.Sno=Reports_ls.Sno AND Reports_ls.Cno=Courses_ls.Cno AND EXISTS(SELECT *FROM Reports_lsWHERE Cno=C01 AND Reports_ls.Sno=Stu
17、dents_ls.Sno AND NOT EXISTS(SELECT *FROM Reports_lsWHERE Cno=C03 AND Reports_ls.Sno=Students_ls.Sno)UNIONSELECT Students_ls.Sno,Sname,0,CnameFROM Students_ls,Courses_ls,Reports_lsWHERE (Score=60 OR Score=NULL) AND Students_ls.Sno=Reports_ls.Sno AND Reports_ls.Cno=Courses_ls.Cno AND EXISTS(SELECT *FROM Reports_lsWHERE Cno=C01 AND Reports_ls.Sno=Students_ls.Sno AND NOT EXISTS(SELECT *FROM Reports_lsWHERE Cno=C03 AND Reports_ls.Sno=Students_ls.Sno)查询结果:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1