- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
单元08:多表查询 本单元要点 1. 联合查询 2.自然连接查询 3. 外连接查询 能力目标 能够正确判断查询数据来源 能够正确判断表之间的参照关系 能够构造正确的连接条件 知识目标 理解连接查询原理 理解关系之间的参照完整性 理解连接条件的表达方式 1. 联合查询 联合查询可合并多个相似的选择查询的结果集。等同于将一个表追加到另一个表,从而实现将两个表的查询组合到一起,使用谓词为UNION或UNION ALL。 select_statement1 UNION [ALL] select_statement2 [UNION [ALL] select_statement3][…n] 查询语法 ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一行。 查询结果的列标题继承第一个查询语句中的定义。 每个联合查询语句的字段列表数据类型必须兼容。 1. 联合查询 分别查询学生表和教师表,并将结果合并 查询示例 1、两个查询的列数目必须相同 2、并且对应列的数据类型相互兼容 课堂练习题目 2. 连接查询 查询所有学生的学号、姓名、性别、所属班级名称 问题导入 1.确定查询哪些信息 SELECT sno,sName,sex,className 2.这些信息来自哪里 FROM student,class 3.筛选哪些记录?——最重要的问题! 分析 如果缺少连接条件,则2个表做笛卡尔积运算,形成的结果包含大量冗余、错误的记录; 如果2个表的记录数量分别为m和n,则笛卡尔积的记录数量为m*n 2. 连接查询—笛卡尔积 2. 连接查询—笛卡尔积 表中包含多余的列,先进行投影操作 投影后形成的结果仍旧包含冗余的行,再进行选择操作,选择条件为class.classID=student.classID 学 号 姓 名 S001 张 三 S002 李 四 查询每位学生的姓名、成绩 学 号 姓 名 S001 张 三 S002 李 四 S001 S001 S002 S002 姓 名 张 三 李 四 成 绩 80 90 学 号 成 绩 S001 80 S002 90 编 号 1 2 学 号 成 绩 编 号 S001 80 1 S002 90 2 查询结果: 2. 连接查询示例 2. 连接查询 1.连接条件放在WHERE中(假设table1和table2是1:n) SELECT column_List FROM table1,table2 WHERE table1.主键=table2.外键 2.利用JOIN关键字(假设table1和table2是1:n) SELECT column_List FROM table1 JOIN table2 ON table1.主键=table2.外键 语法结构 如何确定连接条件? 1. 确定主键表和外键表:1方为主键表 ,n方为外键表 2. 连接条件为:主键表.主键=外键表.外键 3. 若两个表不存在参照关系,则需要增加与这两个表 都存在参照关系的表 2. 连接查询 查询所有学生的学号、姓名、性别、所属班级名称 查询示例 主键=外键 必须分清主键表和外键表 出现在FROM后面的表,必须存在相互间参照关系! 2. 连接查询 查询成绩表中所有学生的学号、姓名、课程名称、成绩 查询示例 查询哪些信息?——sno,sName,courseName,score 这些信息来自哪些表?——score,student,course 连接条件是什么? 分析 student.sno=score.sno AND score.courseID=course.courseID 2. 连接查询 student表和score表都有sno,因此要明确是哪个表的字段——表名.字段名 否则会出现“字段不明确”错误 2. 连接查询 查询所有学生的学号、姓名、性别、所属系部名称 查询示例 查询哪些信息?——sno,sName,departName 这些信息来自哪些表?——student,department 连接条件是什么? 分析 student.classID=class.classID AND class.departID=department.departID 这两个表不存在参照关系!因此需要增加与之有参照关系的表—class 2. 连接查询-常见错误 查询所有学生的学号、姓名、性别、所属班级名称 1.货不对版 标题与内容不对版 原因:数据来源不清楚。 2. 连接查询-常见错误 查询成绩表中所有学生的学号、姓名、课程名称、成绩 2.笛卡尔积 执行查询12秒后,结果为1543160 原因:查询数据来自3个表,但是只给出了1个连接条件,因此会产生笛卡尔积形式的结果 2.
文档评论(0)