<table>
<tbody>
<tr>
<td width = 140px align = center><b>课题<br>名称</b></td>
<td >第5章 多表操作 </td>
<td> <div style = "vertical-align:top;text-align:center">计划<br>学时</div></td>
<td ><div style = "vertical-align:top;text-align:center">8 课时</div></td>
</tr>
<tr>
<td width = 140px align = center><b>内容<br>分析</b></td>
<td colspan=3>前面所学章节涉及的都是针对一张表的操作,即单表操作。然而实际开发中业务逻辑较为复杂,需要针对两张以上的表进行操作,即多表操作。本章将针对多表操作的相关知识进行详细地讲解。</td>
</tr>
<tr>
<td width = 140px align = center ><b>教学目标<br>基本要求</b></td>
<td colspan = 3>
1、 了解什么是外键,会为表添加外键约束和删除外键约束<br>
2、 了解三种关联关系,会向关联表中添加和删除数据<br>
3、 掌握使用交叉连接、内连接、外连接及复合条件连接查询多表中的数据<br>
4、 掌握子查询,会使用IN、EXISTS、ANY、ALL关键字及比较运算符查询多表中的数据<br>
</td>
</tr>
<tr>
<td width = 140px align = center><b>教学重点</b></td>
<td colspan = 3>
1、 外键<br>
2、 操作关联表<br>
3、 连接查询<br>
4、 子查询
</td>
</tr>
<tr>
<td width = 140px align = center><b>难点及措施</b></td>
<td colspan = 3>
1、连接查询<br>
2、子查询
</td>
<tr>
<td width = 140px align = center><b>教学方式</b></td>
<td colspan = 3>
讲师课堂教学要以PPT讲授为主,并结合多媒体进行教学
</td>
</tr>
<tr>
<td width = 140px align = center><b>教学过程</b></td>
<td colspan = 3>
<div style = "vertical-align:top;text-align:center"><h4><b>第一课时</b></h4></div>
<div style = "vertical-align:top;text-align:center"><h5><b>(外键)</b></h5></div>
<div style = vertical-align:top;text-align:left><h5><b>一、创设情境,导入外键概念</b></h5></div>
<div style= color:black>(1)老师提出需求,引出外键</div>
<div style = color:blue> 教师可以通过一个例子来讲解,例如,有学生档案和成绩单两张表,如果成绩单中有张三的成绩,学生档案中张三的档案却被删除了,这样就会产生垃圾数据或者错误数据。一个健壮数据库中的数据一定是有很好的参照完整性的,为表添加外键约束可以将两表之间的数据建立关系,并保证数据的完整性。</div>
<div style= color:black>(2)明确学习目标</div>
<div style = color:blue>
1、要求学生了解外键的概念以及使用外键的作用<br>
2、要求学生掌握如何为表添加外键约束,如何删除外键约束。
</div>
<div style = vertical-align:top;text-align:left><h5><b>二、进行重点知识的讲解</b></h5></div>
<div style= color:black>(1)什么是外键?</div>
<div style = color:blue> 教师首先给出外键的定义,然后通过一个案例来加深学生对定义的理解。创建两个表,一个班级表(grade)和一个学生表(student),其中student表中的gid是学生所在的班级id,是引入了grade表中的主键id,因此gid就可以作为表student的外键。(grade表和student表的建表语句参见教材5.1.1小节)
</div>
<div style= color:black>(2)如何为表添加外键约束?</div>
<div style = color:blue> 教师首先讲解添加外键约束的语法格式,讲解语法格式中的SQL语句。然后演示如何为表student添加外键约束,SQL语句为:“alter table student add constraint FK_ID foreign key(gid) REFERENCES grade (id);”。最后通过show create table语句查看student表的详细结构。
<br>
</div>
<div style=color:black>(3)如何删除外键约束?</div>
<div style = color:blue> 教师首先讲解删除外键约束的语法格式,讲解语法格式中的SQL语句。然后演示如何将表student中的外键约束删除,SQL语句为:“alter table student drop foreign key FK_ID;”。SQL语句执行后,最后通过show create table语句查看student表的详细结构。</div>
</div>
<div style = color:blue> </div>
<div style = vertical-align:top;text-align:left><h5><b>三、归纳总结,随堂练习,布置作业</b></h5></div>
<div style=color:black>(1)对课堂上讲解的知识点进行总结,使用随堂练习题巩固本节课的知识点。</div>
<div style=color:black>(2)使用系统中的测试题给学生布置作业。</div>
<div style = "vertical-align:top;text-align:center"><h4><b>第二课时</b></h4></div>
<div style = "vertical-align:top;text-align:center"><h5><b>(操作关联表)</b></h5></div>
<div style = vertical-align:top;text-align:left><h5><b>一、回顾上节课内容,继续讲解关联关系</b></h5></div>
<div style = color:black>(1)对上节课留的作业进行答疑。</div>
<div style = color:black>(2)回顾总结上节课的内容,引出本节课主题 </div>
<div style = color:blue> 上节课讲解了什么是外键以及如何添加和删除外键约束,在讲解这些知识点的时候,我们就知道表与表之间是会存在关联关系的。在实际开发中,需要根据实体的内容设计数据表,实体间会有各种关联关系,所以根据实体设计的数据表之间也存在着各种关联关系,MySQL中数据表的关联关系有三种。</div>
<div style = color:black>(3)明确学习目标</div>
<div style = color:blue>
1、要求学生熟悉MySQL中数据表有哪三种关联关系,以及各种关联关系的含义<br>
2、要求学生掌握如何为关联表添加数据、删除关联表的数据。<br>
3、要求学生能查询出为空值(不为空值)的数据
</div>
<div style = vertical-align:top;text-align:left><h5><b>二、进入重点知识点的讲解</b></h5></div>
<div style = color:black>(1)关联关系</div>
<div style = color:blue> 教师首先列举出MySQL中数据表的三种关联关系,然后分别进行讲解,在讲解的过程中最好结合具体的例子,例如在讲解多对一的关联关系时,举出员工与部门之间的关系的例子,一个部门可以有多个员工,而一个员工不能属于多个部门。在一一讲解完这三种关联关系后,教师说出其中一种关联关系,让学生举出相对应的例子,考察学生是否真正掌握这三种关联关系的含义。
<br>
</div>
<div style = color:black>(2)如何为关联表添加数据?</div>
<div style = color:blue>
首先通过为表student和表grade添加外键约束来建立两个表的关联关系,在操作之前,教师需要让学生明确表student和表grade是多对一关系。在进行添加外键约束操作时,根据第一课时讲解的添加外键约束语法写出具体的sql语句并执行,语句执行成功后,再使用show create table语句查看外键约束是否成功添加。外键约束添加成功后,再先后为主表grade和从表student添加数据,其中student表的外键gid的取值只能是grade表id字段值中的一个。两个表之间的数据建立关联性之后,再分两个步骤查询软件一班有哪些学生,首先需要查询软件一班的id,然后根据这个id在student表中查询该班级有哪些学生。<br>
</div>
<div style = color:black>(3)如何为删除关联表数据?</div>
<div style = color:blue> 教师首先讲解关联表删除数据时应该注意的情况:由于grade表和student表之间具有关联关系,参照列被参照的值是不能被删除的,因此,如果要删除软件一班,一定要先删除该班级的所有学生,再删除班级。然后分步骤演示先删除student表中属于软件一班的所有学生,再在grade表中将软件一班删除,通过SELECT语句查询软件一班是否被成功的删除。作为比较教师最好能演示不删除软件二班中的所有学生,而直接删除表grade中的软件二班的情况。<br>
</div>
</div>
<div style = vertical-align:top;text-align:left><h5><b>三、归纳总结,布置作业</b></h5></div>
<div style = color:black>(1)对课堂上讲解的知识点进行总结,使用随堂练习题巩固本节课的知识点。</div>
<div style = color:black>(2)使用系统中的测试题给学生布置作业。</div>
<div style = "vertical-align:top;text-align:center"><h4><b>第三课时</b></h4></div>
<div style = "vertical-align:top;text-align:center"><h5><b>(交叉连接和内连接)</b></h5></div>
<div style = vertical-align:top;text-align:left><h5><b>一、回顾上节课内容,继续讲解交叉连接和内连接</b></h5></div>
<div style = color:black>(1)对上节课留的作业进行答疑。</div>
<div style = color:black> (2)引出本节课主题 </div>
<div style = color:blue> 在关系型数据库管理系统中,建立表时各个数据之间的关系不必确定,通常将每个实体的所有信息存放在一个表中,当查询数据时,通过连接操作查询多个表中的实体信息,当两个或多个表中存在相同意义的字段时,便可以通过这些字段对不同的表进行连接查询,本课时将详细讲解交叉连接和内连接。 </div>
<div style = color:black>(3) 明确学习目标</div>
<div style = color:blue> 要求学生学会如何进行交叉连接和内连接操作</div>
<div style = vertical-align:top;text-align:left><h5><b>二、进入重点知识点的讲解</b></h5></div>
<div style = color:black>(1)交叉连接 </div>
<div style = color:blue> 教师首先给学生讲解交叉连接返回的结果以及笛卡尔积的概念,并结合一个具体的例子来加强理解,例如department表中有4个部门,employee表中有4个员工,那么交叉连接的结果就有4*4=16条数据。然后讲解交叉连接的语法格式,最后再通过一个案例演示使用交叉连接查询部门表和员工表中的所有的数据(可参见教材例5-1),在演示案例之前首先要创建department表和employee表这两个表,并在两个表中分别插入相关数据。</div>
<div style = color:black> (2)内连接 </div>
<div style =color:blue> 教师首先讲解什么是内连接,以及内连接的查询结果,讲解内连接的语法格式,并通过一个案例在department表和employee表之间使用内连接查询。然后讲解在MySQL中,还可以使用where条件语句来实现内连接同样的功能,再通过一个案例来演示比较。最后引出什么是自连接,并通过一个案例演示。<br>
</div>
<div style = vertical-align:top;text-align:left><h5><b>三、归纳总结,随堂练习,布置作业</b></h5></div>
<div style=color:black>(1)对课堂上讲解的知识点进行总结,使用随堂练习题巩固本节课的知识点。</div>
<div style=color:black>(2)使用博学谷系统中的测试题给学生布置作业。</div>
<div style = "vertical-align:top;text-align:center"><h4><b>第四课时</b></h4></div>
<div style = "vertical-align:top;text-align:center"><h5><b>(外连接和复合条件连接查询)</b></h5></div>
<div style = vertical-align:top;text-align:left><h5><b>一、回顾上节课内容</b></h5></div>
<div style = color:black>(1)对上节课留的作业进行答疑。</div>
<div style = color:black> (2)进入本节课主题,讲解外连接和复合条件连接查询 </div>
<div style = color:blue> 为了防止数据表中插入错误的数据,在MySQL中,定义了一些维护数据库完整性的规则,即表的约束。</div>
<div style = color:black>(3) 明确学习目标</div>
<div style = color:blue>使学生掌握外连接和复合条件连接查询</div>
<div style = vertical-align:top;text-align:left><h5><b>二、进入重点知识点的讲解</b></h5></div>
<div style=color:black>(1)外连接</div>
<div style=color:blue> 教师首先讲解什么是外连接以及外连接的查询结果,并讲解外连接的语法格式,然后讲解外连接分为两种
<li>LEFT JOIN(左连接):返回包括左表中的所有记录和右表中符合连接条件的记录。</li>
<li>RIGHT JOIN(右连接):返回包括右表中的所有记录和左表中符合连接条件的记录。</li>
教师最后针对左连接和右连接分别进行详细地讲解,在讲解的过程中,左连接和右连接最好至少各结合一个案例来演示(可参见教材例5-5和例5-6)。
</div>
<div style=color:black>(2)复合条件连接查询</div>
<div style =color:blue> 教师首先讲解什么是复合条件连接查询以及复合条件连接的查询结果,并讲解复合条件连接查询的语法格式,最后通过一个案例来演示复合条件连接查询的操作(可参见教材例5-7)。
</div>
<div style = vertical-align:top;text-align:left><h5><b>三、归纳总结,随堂练习,布置作业</b></h5></div>
<div style=color:black>(1)对课堂上讲解的知识点进行总结,使用随堂练习题巩固本节课的知识点。</div>
<div style=color:black>(2)使用测试题给学生布置作业。</div>
<div style = "vertical-align:top;text-align:center"><h4><b>第五课时</b></h4></div>
<div style = "vertical-align:top;text-align:center"><h5><b>(子查询)</b></h5></div>
<div style = vertical-align:top;text-align:left><h5><b>一、回顾上节课内容</b></h5></div>
<div style = color:black>(1)对上节课留的作业进行答疑。</div>
<div style = color:black> (2)进入本节课主题,引出子查询的知识点 </div>
<div style = color:blue> 子查询是指一个查询语句嵌套在另一个查询语句内部的查询。它可以嵌套在一个SELECT、SELECT...INTO 语句、INSERT...INTO等语句中。在执行查询语句时,首先会执行子查询中的语句,然后将返回的结果作为外层查询的过滤条件,在子查询中通常可以使用IN、EXISTS、ANY、ALL操作符。</div>
<div style = color:black>(3) 明确学习目标</div>
<div style = color:blue> 1、要求学生掌握带IN关键字和带比较运算符的子查询</div>
<div style = color:blue> 2、要求学生了解带EXISTS关键字、ANY关键字和ALL关键字的子查询。</div>
<div style = vertical-align:top;text-align:left><h5><b>二、进入重点知识点的讲解</b></h5></div>
<div style=color:black>(1)带IN关键字的子查询</div>
<div style=color:blue> 教师首先讲解带IN关键字子查询特点,然后通过一个案例来演示使用IN关键字进行子查询(可参见教材例5-7)。最后讲解SELECT语句中还可以使用NOT IN关键字,其作用正好与IN相反,再结合一个案例来演示NOT IN关键字的使用(可参见教材例5-8)。
</div>
<div style=color:black>(2)带EXISTS关键字的子查询</div>
<div style =color:blue> 教师首先讲解带EXISTS关键字子查询特点,然后通过一个案例来演示使用EXISTS关键字进行子查询(可参见教材例5-10)。最后总结案例,并提醒学生在使用时要注意的地方。
</div>
<div style = color:black>(3)带ANY关键字的子查询</div>
<div style = color:blue> 教师首先讲解带ANY关键字子查询特点,然后通过一个案例来演示使用ANY关键字进行子查询(可参见教材例5-11)。最后总结案例,并提醒学生在使用时要注意的地方。</div>
<div style=color:blue> (4)带ALL关键字的子查询</div>
<div style=color:blue> 教师首先讲解带ALL关键字子查询特点,然后通过一个案例来演示使用ALL关键字进行子查询(可参见教材例5-12)。最后总结案例,并提醒学生在使用时要注意的地方。</div>
<div style=color:blue> (5)带比较运算符的子查询</div>
<div style=color:blue> 教师首先讲解子查询中可以使用的比较运算符有哪些,并分别解释它们的含义,然后通过一个案例来演示带比较运算符的子查询(可参见教材例5-13)。最后总结案例,并提醒学生在使用时要注意的地方。</div>
<div style = vertical-align:top;text-align:left><h5><b>三、归纳总结,随堂练习,布置作业</h5></div>
<div style=color:black>(1)对课堂上讲解的知识点进行总结,使用随堂练习题巩固本节课的知识点。</div>
<div style=color:black>(2)使用测试题给学生布置作业。</div>
<div style = "vertical-align:top;text-align:center"><h4><b>第六课时</b></h4></div>
<div style = "vertical-align:top;text-align:center"><h5><b>(上机练习)</b></h5></div>
<div style = color:blue> 上机练习主要针对本章中需要重点掌握的知识点,以及在程序中容易出错的内容进行练习,通过上机练习可以考察同学对知识点的掌握情况,对代码的熟练程度。</div>
<div style = vertical-align:top;text-align:left><h5><b>上机一:(考察知识点是为表添加外键约束、删除外键约束)</b></h5></div>
<div style = color:black>客户表(Persons)和订单表(Orders)中的字段及其表数据如下所示:</div>
<div style = color:black>"Persons" 表:</div>
<TABLE>
<TR>
<TD>Id_P</TD>
<TD>LastName</TD>
<TD>FirstName</TD>
<TD>Address</TD>
<TD>City</TD>
</TR>
<TR>
<TD>1</TD>
<TD>Adams</TD>
<TD>John</TD>
<TD>INT</TD>
<TD>商品编号</TD>
</TR>
<TR>
<TD>2</TD>
<TD>Bush</TD>
<TD>George</TD>
<TD>Fifth Avenue</TD>
<TD>New York</TD>
</TR>
<TR>
<TD>3</TD>
<TD>Carter</TD>
<TD>Thomas</TD>
<TD>Changan Street</TD>
<TD>Beijing</TD>
</TR>
</TABLE>
<div style = color:black>"Orders" 表:</div>
<TABLE>
<TR>
<TD>Id_O</TD>
<TD>OrderNo</TD>
<TD>Id_P</TD>
</TR>
<TR>
<TD>1</TD>
<TD>77895</TD>
<TD>3</TD>
</TR>
<TR>
<TD>2</TD>
<TD>44678</TD>
<TD>3</TD>
</TR>
<TR>
<TD>3</TD>
<TD>22456</TD>
<TD>1</TD>
</TR>
<TR>
<TD>4</TD>
<TD>24562</TD>
<TD>1</TD>
</TR>
<TR>
<TD>5</TD>
<TD>34764</TD>
<TD>65</TD>
</TR>
</TABLE>
<div style = color:black> Persons表和Orders表是一对多的关系,其中Orders表中的字段Id_P是订单对应的客户编号,是引入了客户表(Persons)中的主键Id_P。请按照上述描述信息,写出满足下列要求的sql语句。</div>
1)为Orders表添加一个名为FK_ID的外键约束,用Id_P字段连接表Persons中的信息。
2)将表Orders中名为FK_ID的外键约束删除。
<br>
<br>
<div style = "vertical-align:top;text-align:center"><h4><b>第七课时</b></h4></div>
<div style = "vertical-align:top;text-align:center"><h5><b>(上机练习)</b></h5></div>
<div style = vertical-align:top;text-align:left><h5><b>上机一:(考察知识点为交叉连接、外连接)</b></h5></div>
<div style = color:black> 请按照以下要求操作Persons表和Orders表。</div>
<div style = color:black>要求如下:</div>
<div style=color:blue>
1)使用交叉连接查询这两个表中所有数据行的笛卡尔积<br>
2)使用左连接查询出名字(FirstName)为John客户的所有订单号(OrderNo),并按订单号降序排列
</div>
<div style = color:black> Persons表和Orders表是一对多的关系,其中Orders表中的字段Id_P是订单对应的客户编号,是引入了客户表(Persons)中的主键Id_P。请按照上述描述信息,写出满足下列要求的sql语句。</div>
1)为Orders表添加一个名为FK_ID的外键约束,用Id_P字段连接表Persons中的信息。
2)将表Orders中名为FK_ID的外键约束删除。
<br>
<br>
<div style = "vertical-align:top;text-align:center"><h4><b>第八课时</b></h4></div>
<div style = "vertical-align:top;text-align:center"><h5><b>(上机练习)</b></h5></div>
<div style = vertical-align:top;text-align:left><h5><b>上机一:(考察知识点为子查询)</b></h5></div>
<div style = color:black> 请按照以下要求的子查询方式操作Persons表和Orders表。</div>
<div style = color:black>要求如下:</div>
<div style=color:blue>
1)查询Persons表中是否存在所在城市为Tokyo的客户,如果存在,则查询Orders表中的所有记录<br>
2)使用带比较运算符的子查询,查询Thomas客户所有订单的订单号
</div>
</td>
</tr>
<tr>
<td width = 140px align = center><b>
思考题和习题</b>
</td>
<td colspan = 3>
</td>
</tr>
<tr>
<td width = 140px align = center><b>
教学后记
</b>
</td>
<td colspan = 3></td>
</tr>
</tbody>
</table>
-