- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
3.2.3 多表自然连接查询
1. 多表自然连接查询的工作原理多表查询指FROM子句包括多个数据表。
为简化问题,先看两个表的查询
两表自然连接查询工作原理
【例3-33】select * from 班级表, 学生表;结果非常庞大,有17个字段,180条记录,原因:
如果SELECT不带WHERE子句时,首先从前一个表(此处为“班级表”)中取一条记录
然后与后面的表(此处为“学生表”)中的每条记录进行逐一连接
再从第一张表取第二条记录,重复上述过程,直到第一张表的记录取完结束
结果存在组合爆炸的问题,产生很多无用的垃圾数据
两表自然连接查询工作原理2
二个表之间自然连接(内连)与主键、外键约束的关系:
SELECT从两表检索结果时,要得到有效的数据必须带WHERE子句,
通常二个表之间必须有主外键的约束,即二个表中有共同的字段(或字段集),
这个字段或字段集在一个表中为主键,
在另一个表中为外键。
如果二表是多对多的关系,也可以转化为二个一对多的关系。
两表自然连接查询 【例3-34】
【例3-34】将学生表和班级表进行自然连接,求结果集。
将学生表和班级表进行自然连接
select *from 班级表 inner join 学生表 on 班级表.班号 = 学生表.班号;
上述SELECT语句的等价SQL语句如下: select * ; from班级表, 学生表 where班级表.班号 = 学生表.班号;
两表自然连接查询 【例3-34】 2
例3-34中的子句
“from 班级表 inner join学生表on班级表.班号 = 学生表.班号”
或“from班级表, 学生表 where班级表.班号 = 学生表.班号”
表示的是“班级表”和“学生表”进行自然连接
自然连接操作是数据库SQL检索语句中最常用的操作
要求参与自然连接操作的两个关系表间存在一对多的约束,
即两个关系表间存在外键约束,这样的自然连接才有意义
两表自然连接查询与数据库模式关系
仅存在主外键约束的两个表可以进行自然连接
两表自然连接查询规则
一对多的自然连接的结果是一个关系表,关系表的结果为:
横向上(字段数)为两表的字段相叠加;
纵向上(记录数)以多表的记录为最终结果。
以“学生表”与“成绩表”的关联为例,由于“成绩表”中有60条记录,使用SELECT中的子句“WHERE 学生表.学号 = 成绩表.学号”表示将两表进行自然连接操作,其结果中字段为13个(3个在班级表,11个在学生表),记录为60条。
两表自然连接查询【例3-35】
【例3-35】求成绩在85分以上学生的学号、姓名和成绩。
求成绩在85分以上学生的学号、姓名和成绩
select 学生表.学号,姓名,成绩from 学生表,成绩表where 学生表.学号 = 成绩表.学号 and 成绩=85;
两表自然连接查询---别名例子
为简化SELECT的书写,SQL中允许使用表的别名,上例可写成如下SELECT语句。
select a.学号, 姓名, 成绩from 学生表 a,成绩表 b where a.学号 = b.学号 and 成绩 = 85;
a表示是数据表“学生表”的别名
b是数据表“成绩表”的别名
多表自然连接查询【例3-36】
将两表的自然连接推广到多表
【例3-36】将“学生表”、“成绩表”和“课程表”进行自然连接,求结果。
多表自然连接查询【例3-36】2
select *from (学生表 inner join 成绩表 on 学生表.学号 = 成绩表.学号) inner join 课程表 on 课程表.课程号 = 成绩表.课程号;
本例中可理解为先进行“课程表”与“成绩表”的自然连接,然后再用得到的关系与“学生表”进行自然连接。
例3-36的另一种书写方式为:select *from 学生表,成绩表,课程表where 学生表.学号 = 成绩表.学号 and 课程表.课程号 = 成绩表.课程号;
多表自然连接查询一般方法
必须首先知道数据库模式,才能编写正确的SQL语句
数据库导航概念
根据给出的已知条件,求需要的数据。
已知条件是在一个表中的某个字段取值,所求数据是我们感兴趣的字段。
要从已知的数据表出发,通过表间的关联到达目的表,最后根据题目要求筛选相关的字段和记录。
多表的自然连接查询【例3-37】
【例3-37】求“杨小建”的成绩表。
根据给出的数据库模式,我们知道:
已知条件为“学生表”的“姓名”字段
其内容等于“杨小建”
待求的是“课程
您可能关注的文档
最近下载
- T_CCUA 048-2025 政务信息系统运行维护费用定额测算方法.pdf VIP
- 大金控制手册.pdf VIP
- (1)--第2章-材料的结构材料化学.ppt VIP
- YY 0793.2-2023 血液透析和相关治疗用液体的制备和质量管理 第2部分:血液透析和相关治疗用水.pdf
- 【语文单元主题教学】六年级上册第三单元《单元整体教学以及教材解读》课件部编版创新.pptx VIP
- 一班第二组象物字课程.ppt VIP
- 企业安全生产应急预案(汇编5).pdf VIP
- 课题申报参考:“银发经济”发展的国际经验借鉴研究.docx VIP
- 校园网基础设施投资与运维服务规划与执行方案.docx VIP
- 2025呼和浩特粮油收储有限公司招聘18名工作人员笔试备考试题及答案解析.docx VIP
文档评论(0)