数据库032关系数据库标准语言SQL

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

AnIntroductiontoDatabaseSystem数据库系统概论AnIntroductiontoDatabaseSystem第三章关系数据库标准语言SQL(续1)AnIntroductiontoDatabaseSystem3.3查询3.3.1概述3.3.2单表查询3.3.3连接查询3.3.4嵌套查询3.3.5集合查询3.3.6小结AnIntroductiontoDatabaseSystem3.3.3连接查询查询结果或条件涉及多个表的查询称为连接查询SQL中连接查询的主要类型广义笛卡尔积等值连接(含自然连接)自身连接查询外连接查询AnIntroductiontoDatabaseSystem一、广义笛卡尔积不带连接谓词的连接很少使用例:SELECT*FROMStudent,SCAnIntroductiontoDatabaseSystem二、等值与非等值连接查询[例32]查询每个学生及其选修课程的情况。用WHERE子句指定连接条件:SELECT*FROMStudent,SCWHEREStudent.Sno=SC.Sno;AnIntroductiontoDatabaseSystem等值连接结果表Student.SnoSnameSsexSageSdeptSC.SnoCnoGrade95001李勇男20CS9500119295001李勇男20CS9500128595001李勇男20CS9500138895002刘晨女19IS9500229095002刘晨女19IS95002380AnIntroductiontoDatabaseSystem二、等值与非等值连接查询[例32]查询每个学生及其选修课程的情况。用WHERE子句指定连接条件:SELECT*FROMStudent,SCWHEREStudent.Sno=SC.Sno;或,用FROM子句指定连接条件:SELECT*FROMStudentJOINSCONStudent.Sno=SC.Sno;不建议用JOIN方式AnIntroductiontoDatabaseSystem等值连接前例是一种等值连接等值连接:连接运算符为=的连接操作SELECT*FROMStudent,SCWHEREStudent.Sno=SC.Sno;引用两表中同名属性时,必须加表名前缀区分。AnIntroductiontoDatabaseSystem自然连接将等值连接的目标列中重复的属性列去掉,就是自然连接。[例33]对[例32]用自然连接完成。SELECTStudent.Sno,Sname,Ssex,Sage,Sdept,Cno,GradeFROMStudent,SCWHEREStudent.Sno=SC.Sno;AnIntroductiontoDatabaseSystem带有选择条件的连接查询[例补充]查询选1号课的学生号,学生名,成绩SELECTStudent.Sno,Sname,GradeFROMStudent,SCWHEREStudent.Sno=SC.SnoANDCno=1;连接条件选择条件AnIntroductiontoDatabaseSystem带有选择条件的连接查询[例补充]查询选1号课的学生号,学生名,成绩SELECTStudent.Sno,Sname,GradeFROMStudent,SCWHEREStudent.Sno=SC.SnoANDCno=1;或:SELECTStudent.Sno,Sname,GradeFROMStudentJOINSCONStudent.Sno=SC.Sno;WHERECno=1;AnIntroductiontoDatabaseSystem[例35]查询选修2号课程且成绩在90分以上的所有学生的学号、姓名SELECTStudent.Sno,Student.SnameFROMStudent,SCWHEREStudent.Sno=SC.Sno/*连接条件*/ANDCno=2/*选择条件*/ANDGrade90;/*选择条件*/带有选择条件的连接查询AnIntroductiontoDatabaseSystem(当查询条件和结果来自两个关系时,用连接)1查询CS系的学号,姓名,课号,成绩2查询成绩大于95的姓名3查询选1号课成绩不及格的姓名4查询李勇选修的课号,成绩5查询95001选修的课号,课名6查询数据库原理课的学号,成绩练一练:AnIntroductiontoDatabaseSystem三、自身连接一个表与其自己进行连接,称为表的自身连接AnIntroductiontoDatabaseSystem[例34]查询每一门课的先行课名FirstSecondAnIntroductiontoDatabaseSystem自身连接(续)[例34]查询每一门课的先行课名SELECTFirst.Cname课名,Second.Cname先行课名FROMCourseFirst,courseSecondWHEREFirst.Cpno=Second.Cno;课名先行课名数据库数据结构信息系统数据库。。。。。。。AnIntroductiontoDatabaseSystem三、自身连接自身连接注意问题:1.需要给表起别名以示区别2.由于所有属性名都是同名属性,因此必须使用别名前缀AnIntroductiontoDatabaseSystem四、外连接(OuterJoin)普通连接操作只输出满足连接条件的元组SELECT*FROMStudent,SCWHEREStudent.Sno=SC.Sno;只输出满足Student.Sno=SC.Sno的行外连接操作可以将指定表中不满足连接条件的元组一并输出AnIntroductiontoDatabaseSystem外连接(续)[例33]查询每个学生及其选修课程的情况(包括没有选修课程的学生)---用外连接操作SELECTStudent.Sno,Sname,Ssex,Sage,Sdept,Cno,GradeFROMStudent,SCWHEREStudent.Sno*=SC.Sno;AnIntroductiontoDatabaseSystem外连接(续)查询结果:Student.SnoSnameSsexSageSdeptCnoGrade95001李勇男20CS19295001李勇男20CS28595001李勇男20CS38895002刘晨女19IS29095002刘晨女19IS38095003王敏女18MAnullnull95004张立男19ISnullnull本例中将左边的学生关系不满足连接条件的行输出,称为左外连接AnIntroductiontoDatabaseSystem外连接(续)练习:查询课名,学生号,成绩,包括没有被选修的课程AnIntroductiontoDatabaseSystem外连接(续)[例33]查询每个学生及其选修课程的情况(包括没有选修课程的学生)---用外连接操作用FROM子句指定连接条件:SELECTStudent.Sno,Sname,Ssex,Sage,Sdept,Cno,GradeFROMStudentLEFTOUTERJOINSCONStudent.Sno=SC.Sno;ORACLE:LEFTOUTJOINAnIntroductiontoDatabaseSystem外连接(续)SELECTStudent.Sno,Sname,Ssex,Sage,Sdept,Cno,GradeFROMStudent,SCWHEREStudent.Sno*=SC.Sno;或SELECTStudent.Sno,Sname,Ssex,Sage,Sdept,Cno,GradeFROMStudentLEFTOUTERJOINSCONStudent.Sno=SC.Sno;AnIntroductiontoDatabaseSystem外连接(续)左外连接右外连接全外连接AnIntroductiontoDatabaseSystem外连接(续)左外连接将左边关系的不满足连接条件的行输出WHERE子句方式(*出现在左边):WHERER.A1*=S.A1FROM子句方式:FROMRLEFT[OUTER]JOINSONR.A1=S.A1AnIntroductiontoDatabaseSystem外连接(续)右外连接将右边关系的不满足连接条件的行输出WHERE子句方式(*出现在右边):WHERER.A1=*S.A1FROM子句方式:FROMRRIGHT[OUTER]JOINSONR.A1=S.A1AnIntroductiontoDatabaseSystem外连接(续)全外连接将两边关系的不满足连接条件的行输出WHERE子句方式(*出现在两边):WHERER.A1*=*S.A1FROM子句方式:FROMRFULL[OUTER]JOINSONR.A1=S.A1AnIntroductiontoDatabaseSystem多表连接[例36]查询每个学生的学号、姓名、选修的课程名及成绩。AnIntroductiontoDatabaseSystem多表连接[例36]查询每个学生的学号、姓名、选修的课程名及成绩。SELECTStudent.Sno,Sname,Cname,GradeFROMStudent,SC,CourseWHEREStudent.Sno=SC.SnoANDSC.Cno=Course.Cno;结果:Student.SnoSnameCnameGrade95001李勇数据库9295001李勇数学85....................................AnIntroductiontoDatabaseSystem多表连接+选择条件[例:补充]查询CS系选数据库课成绩90的学生的学号、姓名、成绩。AnIntroductiontoDatabaseSystem多表连接+选择条件[例:补充]查询CS系选数据库课成绩90的学生的学号、姓名、成绩。SELECTStudent.Sno,Sname,GradeFROMStudent,SC,CourseWHEREStudent.Sno=SC.SnoANDSC.Cno=Course.CnoANDSdept='CS'ANDCname='数据库'ANDGrade90;AnIntroductiontoDatabaseSystem练习Student(Sno,Sname,Ssex,Sage,Sdept)Course(Cno,Cname,Cpno,Ccredit)SC(Sno,Cno,Grade)查询选1号课的学生号,学生名,成绩(用连接)查询每个学号的选课平均成绩,总学分(用连接,分组)AnIntroductiontoDatabaseSystem3.3查询3.3.1概述3.3.2单表查询3.3.3连接查询3.3.4嵌套查询3.3.5集合查询3.3.6小结AnIntroductiontoDatabaseSystem3.3.4嵌套查询嵌套查询概述嵌套查询分类嵌套查询求解方法引出子查询的谓词AnIntroductiontoDatabaseSystem嵌套查询(续)嵌套查询概述一个SELECT-FROM-WHERE语句称为一个查询块将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询AnIntroductiontoDatabaseSystem嵌套查询(续)SELECTSname外层查询/父查询FROMStudentWHERESnoIN(SELECTSno内层查询/子查询FROMSCWHERECno=2);AnIntroductiontoDatabaseSystem嵌套查询分类不相关子查询子查询的查询条件不依赖于父查询相关子查询子查询的查询条件依赖于父查询AnIntroductiontoDatabaseSystem引出子查询的谓词带有IN谓词的子查询带有比较运算符的子查询带有ANY或ALL谓词的子

1 / 122
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功