达梦数据库原理及应用-项目实训答案_第1页
达梦数据库原理及应用-项目实训答案_第2页
达梦数据库原理及应用-项目实训答案_第3页
达梦数据库原理及应用-项目实训答案_第4页
达梦数据库原理及应用-项目实训答案_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目实训5实现数据查询(一)简单查询1.实训目的(1)掌握SELECT语句的基本用法。(2)掌握使用WHERE子句进行有条件查询的方法。(3)掌握使用IN和NOTIN、BETWEENAND和NOTBETWEENAND限定查询范围的方法。(4)掌握使用LIKE子句实现字符串匹配查询的方法。2.实训内容完成下面的查询。(1)查询所有学生的基本信息;select*fromstudent;查询所有课程的基本信息;select*fromcourse;查询所有学生的成绩信息。select*fromsc;(2)查询所有学生的学号、姓名、性别和出生日期。selectsno,sname,ssex,sbirthdayfromstudent;(3)查询所有课程的课程名称。selectcnamefromcourse;(4)查询前10门课程的课号及课程名称。select*fromcourselimit10;或:select*fromcourselimit0,10;或:selectTOP10*fromcourse;(5)查询所有学生的姓名及年龄。selectsname,year(curdate())-year(sbirthday)fromstudent;(6)查询所有年龄大于18岁的女生的学号和姓名。selectsno,snamefromstudentWhereyear(curdate())-year(sbirthday)>18andssex=’女’;(7)查询所有男生的信息。select*fromstudentWheressex=’男’;(8)查询所有任课教师的姓名(tname)和所在系别(tdept)。selecttname,tdeptfromteacher;(9)查询“电子商务”专业的学生姓名、性别和出生日期。selectsname,ssex,sbirthdayfromstudentWherespeciality=’电子商务’;(10)查询Student表中的所有系名。selectdistinctsdeptfromstudent;(11)查询“C01”课程的开课学期。selectctermfromteachingWherecno=’c01’;(12)查询成绩在80~90分之间的学生学号及课号。selectsno,cnofromscWheredegreebetween80and90;或:selectsno,cnofromscWheredegree>=80anddegree<=90;(13)查询在1970年1月1日之前出生的男教师信息。select*fromteacherWheretbirthday<’1970-1-1’andtsex=’男’;(14)输出有成绩的学生学号。selectdistinctsnofromscWheredegreeisnotnull;(15)查询所有姓“刘”的学生信息。select*fromstudentWheresnamelike’刘%’;(16)查询生源地不是山东省的学生信息。select*fromstudentWheresaddressnotlike’%山东省%’;(17)查询成绩为79分、89分或99分的记录。select*fromscWheredegree=79ordegree=89ordegree=99;或:select*fromscWheredegreein(79,89,99);(18)查询名字中第2个字是“小”字的男生的学生姓名和地址。selectsname,saddressfromstudentWheresnamelike’_小%’andssex=’男’;(19)查询名称以“计算机”开头的课程名称。selectcnamefromcourseWherecnamelike’计算机%’;(20)查询计算机工程系和软件工程系的学生信息。select*fromstudentWheresdept=’计算机工程系’orsdept=’软件工程系’;或:selectcnamefromcourseWherecnamein(’计算机工程系’,’软件工程系’);3.实训反思(1)LIKE的通配符有哪些?分别代表什么含义?%:代表任意多个任意字符;_:代表1个任意字符。(2)知道学生的出生日期,如何求出其年龄?利用表达式year(curdate())-year(sbirthday),可求出学生的年龄。(3)关键字ALL和DISTINCT有什么不同的含义?ALL:保留查询结果中的所有行,包括取值重复的行;DISTINCT:去掉查询结果中的重复行。(4)IS能用“=”来代替吗?不能(5)数据的范围除了可以利用BETWEENAND表示外,能否用其他方法表示?怎么表示?能用其他方法表示如:表示学生的成绩在80到90之间,可以用WHEREDEGREEBETWEEN80AND90;或者:WHEREDEGREE>=80ANDDEGREE<=90;如:表示学生的成绩不在60到90之间(即成绩大于90分,或小于60分),可以用WHEREDEGREENOTBETWEEN60AND90;或者:WHEREDEGREE>90ORDEGREE<60;(二)分组与排序1.实训目的(1)掌握聚集函数的使用方法。(2)掌握利用GROUPBY子句对查询结果进行分组的方法。(3)掌握利用ORDERBY子句对查询结果进行排序的方法。(4)掌握SELECT语句的灵活应用。2.实训内容完成下面的操作。(1)统计有学生选修的课程的门数。selectcount(distinctcno)fromsc;(2)计算“c01”课程的平均成绩。selectavg(degree)fromscwherecno=’c01’;或:selectavg(degree)fromscgroupbycnohavingcno=’c01’;(3)查询选修了“c03”课程的学生的学号及其成绩,查询结果按分数降序排列。selectsno,degreefromscwherecno=’c03’orderbydegreedesc;(4)查询各个课程号及相应的选课人数。selectcno,count(*)fromscgroupbycno;(5)统计每门课程的选课人数和最高分。selectcno,count(*),max(degree)fromscgroupbycno;(6)统计每个学生的选课门数和考试总成绩,并按选课门数降序排列。selectsno,count(*),sum(degree)fromscgroupbysnoorderbycount(*)desc;(7)查询选修了3门以上课程的学生学号。selectsnofromscgroupbysnohavingcount(*)>3;(8)查询成绩不及格的学生学号及课号,并按成绩降序排列。selectsno,cnofromscwheredegree<60orderbydegreedesc;(9)查询至少选修一门课程的学生学号。selectdistinctsnofromsc;或:selectsnofromscgroupbysnohavingcount(*)>=1;(10)统计输出各系学生的人数。selectsdept,count(*)fromstudentgroupbysdept;(11)统计各系的男、女生人数。selectsdept,ssex,count(*)fromstudentgroupbysdept,ssex;(12)统计各系的教师人数,并按人数升序排序。selecttdept,count(*)fromteachergroupbytdeptorderbycount(*);(13)统计不及格人数超过10人的课程号。selectcnofromscwheredegree<60groupbycnohavingcount(*)>10;(14)查询软件工程系的男生信息,查询结果按出生日期升序排序,出生日期相同的按地址降序排序。select*fromstudentwheresdept=’软件工程系’andssex=’男’orderbysbirthdayasc,saddressdesc;3.实训反思(1)聚集函数能否直接使用在SELECT子句、HAVING子句、WHERE子句、GROUPBY子句中?可以直接用在SELECT子句和HAVING子句;不能直接用在WHERE子句和GROUPBY子句。(2)WHERE子句与HAVING子句有何不同?作用对象不同:WHERE子句作用于被查询的表;HAVING子句作用于结果组,选择满足条件的结果组。(3)对查询结果进行重新排序时,必须指定排序方式吗?升序排序时,可以不指定排序方式,默认是升序;降序排序时,必须指定排序方式,关键字为DESC。(4)在对数据进行分组统计数据时,能不能按照多个字段进行分组?能,语法格式为:GROUPBY<列名清单>(三)多表连接查询1.实训目的(1)掌握SELECT语句在多表连接查询中的应用。(2)掌握多表连接的几种连接方式及应用。(3)能够灵活运用多表连接查询解决实际问题。2.实训内容完成下面的查询。(1)查询计算机工程系女学生的学生学号、姓名及考试成绩。selecta.sno,sname,degreefromstudenta,scbwherea.sno=b.snoandsdept=’计算机工程系’andssex=’女’;(2)查询“李勇”同学所选课程的成绩。(不考虑重名)selectdegreefromstudenta,scbwherea.sno=b.snoandsname=’李勇’;(3)查询“李新”老师所授课程的课程名称。selectcnamefromteachera,courseb,teachingcwherea.tno=c.tnoando=oandtname=’李新’;(4)查询女教师所授课程的课程号及课程名称。selectb.*fromteachera,courseb,teachingcwherea.tno=c.tnoando=oandtsex=’女’;(5)查询至少选修一门课程的女学生姓名。selectdistinctsnamefromstudenta,scbwherea.sno=b.snoandssex=’女’;或:selectsnamefromstudenta,scbwherea.sno=b.snoandssex=’女’groupbya.snohavingcount(*)>=1;(6)查询姓“王”的学生所学的课程名称。selectcnamefromstudenta,courseb,sccwherea.sno=c.snoando=oandsnamelike‘王%’;(7)查询选修“数据库原理及应用”课程且成绩在80~90分之间的学生学号及成绩。selectsno,degreefromcoursea,scbwhereo=oandcname=’数据库原理及应用’anddegreebetween80and90;(8)查询课程成绩及格的男生的学生信息、课程号与成绩。selecta.*,cno,degreefromstudenta,scbwherea.sno=b.snoandssex=’男’anddegree>=60;(9)查询选修“c04”课程的学生的平均年龄。selectavg(year(curdate())-year(sbirthday))fromstudenta,scbwherea.sno=b.snoandcno=’c04’;(10)查询选修“数学”课程的学生学号和姓名。selecta.sno,snamefromstudenta,scb,coursecwherea.sno=b.snoando=oandcname=’数学’;(11)查询“钱军”教师任课的课程号,选修其课程的学生的学号和成绩。selectb.*fromteachera,scb,teachingcwherea.tno=c.tnoando=oandtname=’钱军’;(12)查询在第3学期所开课程的课程名称及学生的成绩。selectcname,degreefromcoursea,scb,teachingcwhereo=oando=oandcterm=3;(13)查询“c02”号课程不及格的学生信息。selecta.*fromstudenta,scbwherea.sno=b.snoandcno=’c02’anddegree<60;(14)查询软件工程系成绩在90分以上的学生姓名、性别和课程名称。selectsname,ssex,cnamefromstudenta,scbwherea.sno=b.snoandsdept=’软件工程系’anddegree>=90;(15)查询同时选修了“C04”和“C02”课程的学生姓名和成绩。selectsname,b.degree,c.degreefromstudenta,scb,sccwherea.sno=b.snoandb.sno=c.snoando=’C04’ando=’C02’;3.实训反思(1)指定一个较短的别名有什么好处?可以简化表名(2)内连接与外连接有什么区别?内连接中,只有在两个表中匹配的行才能在结果集中出现;外连接中,可以只限制一个表,而对另一个不加限制。全外连接可以对两个表都不加限制。(四)嵌套查询1.实训目的(1)掌握嵌套查询的使用方法。(2)掌握相关子查询与嵌套子查询的区别。(3)掌握带IN谓词的子查询的使用方法。(4)掌握带比较运算符的子查询的使用方法。(5)掌握带有ANY或ALL的子查询的使用方法。(6)了解带有EXISTS的子查询的使用方法。2.实训内容完成下面的查询。(1)查询“李勇”同学所选课程的成绩。selectdegreefromscwheresno=(selectsnofromstudentwheresname=’李勇’);(2)查询“李新”老师所授课程的课程名称。selectcnamefromcoursewherecnoin(selectcnofromteachingwheretno=(selecttnofromteacherwheretname=’李新’));(3)查询女教师所授课程的课程号及课程名称。select*fromcoursewherecnoin(selectcnofromteachingwheretnoin(selecttnofromteacherwheretsex=’女’));(4)查询姓“王”的学生所学的课程名称。selectcnamefromcoursewherecnoin(selectcnofromscwheresnoin(selectsnofromstudentwheresnamelike‘王%’));(5)查询“C02”号课程不及格的学生信息。select*fromstudentwheresnoin(selectsnofromscwherecno=’c02’anddegree<60);(6)查询选修“大学英语”课程且成绩在80~90分之间的学生学号及成绩。selectsno,degreefromscwheredegreebetween80and90andcno=(selectcnofromcoursewherecname=’大学英语’);(7)查询选修“C04”课程的学生的平均年龄。selectavg(year(curdate())-year(sbirthday))fromstudentwheresnoin(selectsnofromscwherecno=’c04’);(8)查询选修“高等数学”课程的学生学号和姓名。selectsno,snamefromstudentwheresnoin(selectsnofromscwherecno=(selectcnofromcoursewherecname=’高等数学’));或:selectsno,snamefromstudentwheresnoin(selectsnofromsca,coursebwhereo=oandcname=’高等数学’);或:selectsno,snamefromstudenta,scbwherea.sno=b.snoandcno=(selectcnofromcoursewherecname=’高等数学’);(9)查询“钱军”教师任课的课程号,选修其课程的学生的学号和成绩。select*fromscwherecnoin(selectcnofromteachingwheretno=(selecttnofromteacherwheretname=’钱军’));(10)查询在第3学期所开课程的课程名称及成绩。selectcname,degreefromcoursea,scbwhereo=oandcnoin(selectcnofromteachingwherecterm=3);(11)查询与“李勇”同学同一个系的学生姓名。selectsnamefromstudentwheresdept=(selectsdeptfromstudentwheresname=’李勇’);(12)查询学号比“刘晨”同学大,而出生日期比他小的学生姓名。selectsnamefromstudentwheresno>(selectsnofromstudentwheresname=’刘晨’)andsbirthday<(selectsbirthdayfromstudentwheresname=’刘晨’);(13)查询出生日期早于所有女生出生日期的男生的姓名及系。selectsname,ssexfromstudentwheressex=’男’andsbirthday<all(selectsbirthdayfromstudentwheressex=’女’);(14)查询成绩比该课程平均成绩高的学生的学号及成绩。selectsno,degreefromscawheredegree>(selectavg(degree)fromscbwhereo=o);(15)查询不讲授“C01”课的教师姓名。selecttnamefromteacherwheretnonotin(selecttnofromteachingwherecno=’c01’);(16)查询没有选修“C02”课程的学生学号及姓名。selectsno,snamefromstudentwheresnonotin(selectsnofromscwherecno=’c02’);(17)查询选修了“数据库原理及应用”课程的学生学号、姓名及系。selectsno,sname,ssexfromstudentwheresnoin(selectsnofromscwherecno=(selectcnofromcoursewherecname=’数据库原理及应用’));3.实训反思(1)IN与“=”在什么情况下作用相同?当子查询的返回结果只有一个值时,IN与“=”作用是相同的。(2)当既能用连接查询又能用嵌套查询时,选择哪种查询较好?为什么?绝大多数场景优先选择连接查询,原因:性能更好、可读性与维护性更强、功能更强(3)子查询一般分为几种?两种:相关子查询和不相关子查询(4)相关子查询的执行过程是什么?1)子查询为父查询的每一个元组(行)执行一次,父查询将子查询引用列的值传给子查询;2)如果子查询的任何行与其匹配,则父查询取此行放入结果表;3)回到1),直到处理完外部表的每一行。(五)数据更新1.实训目的(1)掌握利用INSERT命令实现对表数据的插入操作。(2)掌握利用UPDATE命令实现对表数据的修改操作。(3)掌握利用DELETE命令实现对表数据的删除操作。2.实训内容(1)向STUDENT表中插入记录("2020010203","张静",”女”,"19

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论