数据库实验实验七 数据查询实验报告 答案.docx
《数据库实验实验七 数据查询实验报告 答案.docx》由会员分享,可在线阅读,更多相关《数据库实验实验七 数据查询实验报告 答案.docx(12页珍藏版)》请在冰点文库上搜索。
数据库实验实验七数据查询实验报告答案
实验7数据查询
【实验内容】
7.1单表查询
1、 指定列或全部列查询
1) 查询S表中全体学生的详细记录。
usejxskselect*fromS
2) 查询所有学生的姓名及其出生年份。
usejxskselectSN,2012-AGEfromS
2、 按条件查询及模糊查询
1) 查询考试成绩有不及格的学生的学号。
usejxskselectdistinctSNOfromSCwhereSCORE<60
2) 查询年龄在20—23岁之间的学生的姓名、系名和年龄。
usejxskselectSN,DEPT,AGEfromS
whereAGE>=20andAGE<=30
3) 查询姓李的学生的姓名、学号和性别。
usejxskselectSN,SNO,SEXfromS
whereSNlike'李%'
4) 查询名字中第二个字为“明”字的男学生的姓名和系名。
usejxskselectSN,DEPTfromS
whereSNlike'_%明'andSEX='男'
3、 对查询结果排序
1) 查询信息系、计算机系学生的姓名、系名,结果按系名升序,按姓名降序排序。
usejxskselectSN,DEPT
fromS
whereDEPT='信息'ORDEPT='计算机'
orderbyDEPT,SNDESC
2) 查询所有有课程号C2成绩的学生的学号、课程号和成绩,并按成绩降序排序。
usejxskselectSNO,CNO,SCORE
fromSC
whereCNO='C2'andSCOREisnotnull
orderbySCOREDESC
4、 使用聚集函数的查询
1) 查询计算机系学生总人数。
usejxskselectCOUNT(*)
fromS
whereDEPT='计算机
2) 查询选修了微机原理课程的学生人数、平均成绩和最高成绩。
usejxskselectCOUNT(*),AVG(SCORE),MAX(SCORE)
fromC,SC
whereCN='微机原理'andC.CNO=SC.CNO
5、 分组统计查询
1) 查询各个课程号及相应的选择人数。
usejxskselectCNO,COUNT(SNO)as人数
fromSC
groupby(CNO)
2) 查询选修了两门以上课程的学生姓名和平均成绩。
usejxskselectSN,AVG(SCORE)
fromS,SC
whereS.SNO=SC.SNO
groupby(S.SN)
havingCOUNT(*)>2
7.2连接查询
1、 连接查询
1) 查询所有选课学生的学号、姓名、选课名称及成绩。
usejxskselectSN,S.SNO,CN,SCORE
fromS,SC,C
whereS.SNO=SC.SNOandC.CNO=SC.CNO
2) 查询每门课程的课程号、任课教师姓名及其选课人数。
usejxskselectC.CNO,TN,COUNT(SC.SNO)
fromSC,C,T,TC
whereC.CNO=SC.CNOAND
T.TNO=TC.TNOAND
C.CNO=TC.CNO
groupbyC.CNO,T.TN
2、 自身连接
1) 查询所有比“刘伟”工资高的教师的姓名、工资以及刘伟的工资。
usejxskselectX.TN,X.SAL,Y.SAL
fromTASX,TASY
whereX.SAL>Y.SALANDY.TN='刘伟'
2) 查询同时选修了“程序设计”和“微机原理”的学生的姓名、课程名。
usejxskselectdistinctSN,C1.CN,C2.C
fromCASC1,CASC2,SCASSC1,SCASSC2,S
whereC1.CNO=SC1.CNOAND
C2.CNO=SC2.CNOAND
C1.CN='程序设计'AND
C2.CN='微机原理'AND
SC1.SNO=SC2.SNOAND
SC1.SNO=S.SNO
3、 外连接
查询所有学生的学号、姓名、选课名称及成绩(没有选课的学生的选课信息显示为空)。
usejxsk
selectS.SNO,SN,CN,SCORE
fromS
LEFTOUTERJOINSC
ONS.SNO=SC.SNO
LEFTOUTERJOINC
ONC.CNO=SC.CNO
7.3嵌套查询
1、 返回一个值的子查询
查询与“刘伟”教师职称相同的教师号、姓名和职称。
usejxskselectTNO,TN,PROF
fromT
where(PROF=(selectPROFfromT
whereTN='刘伟')
)
2、 返回一组值的子查询
1) 使用ANY谓词查询讲授课程号为C5的教师姓名。
usejxskselectTN
fromT
where(TNO=ANY
(selectTNOfromTC
whereCNO='C5'))
2) 使用IN谓词查询讲授课程号为C5的教师姓名。
usejxskselectTN
fromT
where(TNOIN
(selectTNOfromTC
whereCNO='c5'))
3) 使用ALL谓词查询其他系中比计算机系所有教师工资都高的教师的姓名、工资和所在系。
usejxskselectTN,SAL,DEPT
fromT
where(SAL>ALL
(selectSALfromT
whereDEPT='计算机')AND
(DEPT<>'计算机')
4) 使用EXISTS谓词查询没有讲授课程号为C5的课程的教师姓名、所在系。
usejxskselectTN,DEPT
fromT
where(NOTEXISTS
(select*fromTC
whereTNO=T.TNOANDCNO='C5'))
5) 使用NOTEXISTS谓词查询至少选修了学生S2选修的全部课程的学生的学号。
usejxskselectDISTINCTSNO
fromSCSCX
whereNOTEXISTS
(select*fromSCSCY
whereSCY.SNO='S9'ANDNOTEXISTS
(select*fromSCSCZ
whereSCZ.SNO=SCX.SNOAND
SCZ.CNO=SCY.CNO))
7.4集合查询
1、 查询年龄不大于19岁或者属于计算机系的学生。
(使用UNION)
usejxskselect*fromS
whereDEPT='计算机'
union
select*fromS
whereAGE<19