数据库实验(实验七 数据查询)实验报告 答案

  • 格式:docx
  • 大小:444.30 KB
  • 文档页数:10

实验7 数据查询

【实验内容】

7.1 单表查询

1、 指定列或全部列查询

1) 查询S表中全体学生的详细记录。

usejxskselect*fromS

2) 查询所有学生的姓名及其出生年份。

usejxskselectSN,2012-AGEfromS

2、 按条件查询及模糊查询

1) 查询考试成绩有不及格的学生的学号。

usejxskselectdistinctSNOfromSCwhereSCORE<60

2) 查询年龄在20 — 23岁之间的学生的姓名、系名和年龄。 usejxskselectSN,DEPT,AGEfromS

whereAGE>=20 andAGE<=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='微机原理'O=O

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=O=O

2) 查询每门课程的课程号、任课教师姓名及其选课人数。

O,TN,COUNT(SC.SNO)

fromSC,C,T,TC

O=OAND

T.TNO=TC.TNOAND

O=O

O,T.TN

2、 自身连接

1) 查询所有比“刘伟”工资高的教师的姓名、工资以及刘伟的工资。

usejxskselectX.TN,X.SAL,Y.SAL

fromTASX,TASY

whereX.SAL>Y.SALANDY.TN='刘伟'

2) 查询同时选修了“程序设计”和“微机原理”的学生的姓名、课程名。

usejxskselectdistinctSN,,C2.C

fromCASC1,CASC2,SCASSC1,SCASSC2,S

O=OAND

O=OAND

='程序设计'AND

='微机原理'AND

SC1.SNO=SC2.SNOAND

SC1.SNO=S.SNO

3、 外连接

查询所有学生的学号、姓名、选课名称及成绩(没有选课的学生的选课信息显示为空)。

usejxsk

selectS.SNO,SN,CN,SCORE

fromS

LEFTOUTERJOINSC

ONS.SNO=SC.SNO

LEFTOUTERJOINC

O=O 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) 使用NOT EXISTS谓词查询至少选修了学生S2选修的全部课程的学生的学号。

usejxskselectDISTINCTSNO

fromSCSCX

whereNOTEXISTS

(select*fromSCSCY

whereSCY.SNO='S9'ANDNOTEXISTS

(select*fromSCSCZ

whereSCZ.SNO=SCX.SNOAND

O=O))

7.4 集合查询

1、 查询年龄不大于19岁或者属于计算机系的学生。(使用UNION) usejxskselect*fromS

whereDEPT='计算机'

union

select*fromS

whereAGE<19