第八章-多表连接及子查询.pptxVIP

  1. 1、本文档共41页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

第8章多表连接及子查询

知识点回顾SELECT语句的基本语法在SELECT子句中执行基本的算术运算ORACLE中的伪列使用DISTINCT或UNIQUE关键字删除重复列常用聚合函数及分组子句GROUPBY的使用使用ORDERBY对查询结果排序2

本章目标表连接原理多表连接查询等值连接非等值连接交叉连接内连接外连接特殊连接子查询的概念及应用单行子查询多行子查询3

表连接原理4基本书写方式1:SQLselect*fromt1,t2[wheret1.id=t2.id];--方括号内为可选基本书写方式2:SQLselect*fromt1joint2[ont1.id=t2.id];--方括号内为可选SQLselect*fromt1joint2[using(id)];--方括号内为可选

表连接原理5

表连接原理NESTEDLOOP数据子集较小时使用HASHJOIN两个巨大的表之间的连接在一个巨大的表和一个小表中的连接SORTMERGEJOIN在行已经被排序的前提下使用为佳6

表连接原理7

数据查询语句数据查询语句是最常用也是最复杂的语句,在介绍查询语句之前,我们先定义两个表,以供示例使用:学生信息表(t_student):学生编号(s_id),学生姓名(s_name)、学院编号(c_id)、学生已修课程数(s_source)和学生所在班班长编号(p_id)的表。学院信息表(t_college):学院编号(c_id),学院名称(c_name)和院系平均已修课程数(c_source_avg)。8

实验数据实验数据t_studentt_college9

表连接的分类实际应用场景中,表连接是对一个公共列中存储了相同类数据的两个(或多个)表进行关联的。根据表连接运算符的使用可以分为:等值连接和非等值连接。根据表连接的模式的使用可以分为:内部连接和外部连接。另外还有一些特殊连接:自连接和自然连接。公共列是两个或更多表中存在相同数据的列,比如,t_student表和t_college表都包含一个c_id的公共列。这里的公共列的列名不必一致,主要是存放的数据要有一定的相关性,甚至是业务上的同类数据。10

等值连接等值连接就是我们进行公共列关联时,使用的比较运算符使用的是“=”等任意表示相等的运算符。例:查询学生与院系的关联信息。11SQLSELECTt1.s_id,t1.s_name,t2.c_nameFROMt_studentt1,t_colleget2WHEREt1.c_id=t2.c_id;

非等值连接非等值连接与等值连接最大的区别就是公共列关联时使用的比较运算符不是“=”等相等类的运算符而是不等于一类的比较运算符,如:、、=、=等。这类连接实际应用场景较等值连接来说较为少见,例:查询一下学生自修课程数大于院系平均自修课程数的学生与院系的相关信息。12SQLSELECTt1.s_id,t1.s_name,t2.c_name,t1.s_courseFROMt_studentt1,t_colleget2WHEREt1.s_courset2.c_course_avgANDt1.c_id=t2.c_id;

交叉连接交叉连接又称为“笛卡尔积”连接,表1中的每一个记录与表2中的每一个记录配对,这里匹配顺序是任意的,用表2去匹配表1与表1匹配表2结果是一致的,只不过索引增加的位置会有不同(详见下面章节)如果第一个表中有m条记录,第二个表中有n条记录,结果是m*n条记录13

交叉连接基本的交叉连接,下例没有实际的业务意义,仅仅展示交叉连接运行效果。SQLSELECT*FROMt_studentt1,t_colleget2;SQLSELECT*FROMt_studentt1CROSSJOINt_colleget2;14

内部连接内连接主要有三种书写方式逗号+where子句[inner]join+on子句[inner]join+using子句内连接的两个表之间是没有主从关系的,也就是说调整内连接的两个表的排列顺序,对内连接运行结果没有影响(索引的设置会有影响,详见下面章节)。内连接的运行结果的记录数分别与两个表没有直接关系,但是与两个表之间的数据的组合有一定的关系。只有公共列能完全匹配上的记录才会输出到查询结果中。例:查询出学生信息与院系信息相关连的基础信息。15

内部连接逗号+where子句连接[inner]join子句+on子句连接[inner]join子句+using子句连接16SQLSELECTt1.s_id,t1.s_name,t1.c_id,t2.c_nameFROMt_studentt

文档评论(0)

精致文档 + 关注
实名认证
文档贡献者

精致文档

1亿VIP精品文档

相关文档