文档详情

数据库技术项目式教程(MySQL)课件 任务4.4子查询.pptx

发布:2025-05-03约2.67千字共14页下载文档
文本预览下载声明

子查询

任务提出当查询涉及多张表时,习惯的做法是使用连接查询,先将涉及的多张表连接起来。对于查询结果只涉及一张表,而查询条件涉及其他一张或多张表的查询,除了使用多表连接查询外,可以使用嵌套查询。另外,部分查询的条件复杂,如,查询出选修“2003003”课程且平时成绩低于本课程平时成绩的平均分的学生学号,查询选修了全部课程的学生姓名。这些查询无法使用多表连接查询实现,需要使用嵌套查询实现。

任务分析在一个SELECT语句的WHERE子句中的行条件表达式或HAVING子句中的组筛选条件中,含有另一个SEELCT语句,这种查询称为嵌套查询。根据内部查询的查询条件是否依赖于外部查询,可将嵌套查询分为:不相关子查询相关子查询

1.不相关子查询根据外部查询和内部查询连接的关键字,可将不相关子查询分为:带比较运算符的子查询带IN、NOTIN关键字的子查询带ANY、ALL关键字的子查询相关知识与技能

(1)带比较运算符的子查询外层查询与内层查询之间可以用、、=、=、=、!=或等比较运算符进行连接。【例】查询数据库技术与应用1课程学生的选课信息。SELECT*FROMScoreWHERECno=(SELECTCnoFROMCourseWHERECname=数据库技术与应用1);先求解出内层查询结果,内层查询只执行一次,执行完毕后将结果传递给外层查询。相关知识与技能

(2)带IN、NOTIN关键字的子查询子查询的结果往往是一个集合。【例】查询出选修了课程编号为0901169课程的学生姓名和班级编号。SELECTSname,ClassNoFROMStudentWHERESnoIN(SELECTSnoFROMScoreWHERECno=0901169);【注意】IN前面必须有字段名,IN前面的字段名必须与子查询中SELECT后的字段名对应。相关知识与技能

【例】查询出选修了数据库技术与应用1课程的学生姓名和班级编号。【例】查询出选修2003003课程且平时成绩低于本课程平时成绩的平均值的学生学号。【例】查询没有选修课程编号为‘0901170’的学生学号和姓名。任务实施

(3)带ANY、ALL关键字的子查询使用ANY或ALL关键字时必须同时使用比较运算符。ANY 大于子查询结果中的某个值ALL 大于子查询结果中的所有值【例】查询男生中比任意一个女生年龄小的男生姓名和出生年月。SELECTSname,BirthFROMStudentWHERESex=男ANDBirthANY(SELECTBirthFROMStudentWHERESex=女);相关知识与技能

带ANY、ALL关键字的子查询【例】查询男生中比所有女生年龄小的男生姓名和出生年月。SELECTSname,BirthFROMStudentWHERESex=男ANDBirthALL(SELECTBirthFROMStudentWHERESex=女);相关知识与技能

2.相关子查询(1)带EXISTS、NOTEXISTS关键字的子查询【例】查询出选修了课程编号为0901169课程的学生姓名和班级编号。SELECTSname,ClassNoFROMStudentWHEREEXISTS(SELECT*FROMScoreWHERESno=Student.SnoANDCno=0901169);【注意】EXISTS关键字前面没有字段名,子查询的SELECT后为*,子查询中的WHERE条件中必须有连接条件关联外部表。相关知识与技能

【例】查询没有选修课程编号为0901170的学生学号和姓名。SELE

显示全部
相似文档