《数据库开发与应用(SQL Server 2005)pp5教学课件.ppt》由会员分享,可在线阅读,更多相关《数据库开发与应用(SQL Server 2005)pp5教学课件.ppt(50页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数据库开发与应用(数据库开发与应用(SQL Server 2005SQL Server 2005)pp5pp5教学课件教学课件目录目录目录目录项目描述项目描述本项目根据本项目根据BBSBBS网站论坛业务需求,利用聚合函数对数据进行汇总;网站论坛业务需求,利用聚合函数对数据进行汇总;按照分组条件对数据进行分组检索;实现多个表或视图之间查询满足按照分组条件对数据进行分组检索;实现多个表或视图之间查询满足一定条件的联接查询或子查询。一定条件的联接查询或子查询。目录目录项目目标项目目标1 11会用聚合函数实现数据汇总会用聚合函数实现数据汇总会用聚合函数实现数据汇总2 22正确使用分组查询正确使用分组查
2、询正确使用分组查询3 33熟练使用联接查询熟练使用联接查询熟练使用联接查询4 44正确使用组合查询正确使用组合查询正确使用组合查询5 55熟练使用子查询熟练使用子查询熟练使用子查询目录目录5.1.1 5.1.1 5.1.1 5.1.1 汇总查询汇总查询汇总查询汇总查询 BBSBBS数据库中存储了发帖信息,如果想知道帖子的总数、帖子点击数最高值、最低值、平均数据库中存储了发帖信息,如果想知道帖子的总数、帖子点击数最高值、最低值、平均值的情况,值的情况,T-SQLT-SQL提供了聚合函数,以便数据分析分析和报表的生成。提供了聚合函数,以便数据分析分析和报表的生成。聚合函数对数据表中某一列值或一组值
3、执行计算,并返回单个值。聚合函数经常与聚合函数对数据表中某一列值或一组值执行计算,并返回单个值。聚合函数经常与 SELECT SELECT 语句的语句的 GROUP BY GROUP BY 子句一起使用,用于检索数据,进行分析和报表生成。除了子句一起使用,用于检索数据,进行分析和报表生成。除了 COUNTCOUNT函数以外,聚合函数都会忽略空值。函数以外,聚合函数都会忽略空值。5.1 5.1 背景知识背景知识目录目录函数说明函数说明AVG(ALL|DISTINCT AVG(ALL|DISTINCT 表达式表达式)返回组中各值的平均值,返回组中各值的平均值,ALL ALL 是默认值,对所有值求平
4、均值;是默认值,对所有值求平均值;DISTINCTDISTINCT指定指定 AVG AVG 返回唯一值返回唯一值的平均值,排除重复值。的平均值,排除重复值。SUM(ALL|DISTINCT SUM(ALL|DISTINCT 表达式表达式)返回表达式中所有值的和。返回表达式中所有值的和。ALL ALL 是默认值,对所有的值求和。指定是默认值,对所有的值求和。指定 SUM SUM 返回唯一值的和。返回唯一值的和。MAX(ALL|DISTINCT MAX(ALL|DISTINCT 表达式表达式)返回表达式的最大值。返回表达式的最大值。MIN(ALL|DISTINCT MIN(ALL|DISTINCT
5、 表达式表达式)返回表达式的最小值。返回表达式的最小值。COUNT(ALL|DISTINCT COUNT(ALL|DISTINCT 表达式表达式|*)|*)返回组中的项数。返回组中的项数。COUNT(*)COUNT(*)返回组中的项数。包括返回组中的项数。包括 NULL NULL 值和重复项。值和重复项。COUNT(ALL COUNT(ALL 表达式表达式)对组中的每一行都计算对组中的每一行都计算 expression expression 并返回非空值的数量。并返回非空值的数量。COUNT(DISTINCT COUNT(DISTINCT 表达式表达式)对组中的对组中的每一行都计算每一行都计算
6、 expression expression 并返回唯一非空值的数量。并返回唯一非空值的数量。5.1 5.1 背景知识背景知识5.1.1 5.1.1 5.1.1 5.1.1 汇总查询汇总查询汇总查询汇总查询 目录目录要查询发帖表要查询发帖表TopicTopic帖子的数量,就可以利用帖子的数量,就可以利用COUNTCOUNT函数查询出帖子总数。汇总例如,要查询发帖函数查询出帖子总数。汇总例如,要查询发帖表表TopicTopic帖子的数量,就可以利用帖子的数量,就可以利用COUNTCOUNT函数查询出帖子总数。函数查询出帖子总数。汇总5.1 5.1 背景知识背景知识5.1.1 5.1.1 5.1.
7、1 5.1.1 汇总查询汇总查询汇总查询汇总查询 目录目录5.1.2 5.1.2 5.1.2 5.1.2 数据分组数据分组数据分组数据分组 利用利用T-SQLT-SQL聚合函数可以用来汇总数据,如上例所示,可以要统计发帖表聚合函数可以用来汇总数据,如上例所示,可以要统计发帖表TopicTopic帖子的数量。但帖子的数量。但如果要统计每个版块的帖子数量的情况,或则每个用户的发帖情况,就需要用到数据分组查询。如果要统计每个版块的帖子数量的情况,或则每个用户的发帖情况,就需要用到数据分组查询。分组就是按照某一列的值或者某个列的组合的值,将结果集分成若干个组进行统计,每组在分组就是按照某一列的值或者某
8、个列的组合的值,将结果集分成若干个组进行统计,每组在指定列上或列组合上都有相同的值。指定列上或列组合上都有相同的值。例如,在发帖表例如,在发帖表TopicTopic中统计每个版块的帖子数量的情况,如图所示。中统计每个版块的帖子数量的情况,如图所示。分组5.1 5.1 背景知识背景知识目录目录5.1.3 5.1.3 5.1.3 5.1.3 联接查询联接查询联接查询联接查询 关系数据库将数据分解为多个表,更方便存储和数据处理。如果数据存储在多个表中,如何用一关系数据库将数据分解为多个表,更方便存储和数据处理。如果数据存储在多个表中,如何用一条条SELECTSELECT语句检索出数据?就需要用到联接
9、查询。语句检索出数据?就需要用到联接查询。联接查询是联接查询是T-SQLT-SQL功能最强大的语句之一,在关系数据库中利用联接运算符,从多个数据表中查询功能最强大的语句之一,在关系数据库中利用联接运算符,从多个数据表中查询满足一定条件的记录。满足一定条件的记录。在在SQL ServerSQL Server中连接查询类型分为内部联接、外部联接、交叉联接、自联接。中连接查询类型分为内部联接、外部联接、交叉联接、自联接。5.1 5.1 背景知识背景知识目录目录1 1内部联接(内部联接(INNER JOININNER JOIN)内部联接也叫等值联接,它是基于两个表之间的某一的列值相等进行联接。通常两内
10、部联接也叫等值联接,它是基于两个表之间的某一的列值相等进行联接。通常两个表之间要建立主外间关系,根据某一列的数值进行比较,检索满足条件的数据。这种个表之间要建立主外间关系,根据某一列的数值进行比较,检索满足条件的数据。这种联接方式是最常用的。联接方式是最常用的。例如,查询帖子主题及所属版块的名称,如图所示。这部分信息分别存储在发帖表例如,查询帖子主题及所属版块的名称,如图所示。这部分信息分别存储在发帖表TopicTopic和版块信息表和版块信息表SectionSection中,要通过所属版块编号中,要通过所属版块编号TSectionIDTSectionID外键等值联接查询。外键等值联接查询。发
11、帖表查询结果集版块信息表5.1 5.1 背景知识背景知识5.1.3 5.1.3 5.1.3 5.1.3 联接查询联接查询联接查询联接查询 目录目录2 2外部联接(外部联接(OUTER JOINOUTER JOIN)在内部联接连个表时,结果集中体现的是两个表中都存在的数据行,但有时会出现在内部联接连个表时,结果集中体现的是两个表中都存在的数据行,但有时会出现在一个表中没有关联的数据行,为了在结果集中能够检索出来,需要使用外部联接查询。在一个表中没有关联的数据行,为了在结果集中能够检索出来,需要使用外部联接查询。外部联接可分为左外联接(外部联接可分为左外联接(LEFT OUTER JOINLEFT
12、 OUTER JOIN)、右外联接()、右外联接(RIGHT OUTER JOINRIGHT OUTER JOIN)、)、全外联接(全外联接(FULL OUTER JOINFULL OUTER JOIN)。左外联接可以检索出左表中所有数据行,右外联接可以)。左外联接可以检索出左表中所有数据行,右外联接可以检索出右表中所有数据行,全外联接可以检索出左右两表中所有数据行。检索出右表中所有数据行,全外联接可以检索出左右两表中所有数据行。例如,所有注册用户的发帖情况,如图所示。要查询用户信息表例如,所有注册用户的发帖情况,如图所示。要查询用户信息表UsersUsers中所有用户,中所有用户,在主贴表在
13、主贴表TopicTopic中发帖情况,但注册用户未必全部发帖,如果用户信息表中发帖情况,但注册用户未必全部发帖,如果用户信息表UsersUsers作为左表,作为左表,采用左外联接查询。采用左外联接查询。发帖表用户信息表查询结果集5.1 5.1 背景知识背景知识5.1.3 5.1.3 5.1.3 5.1.3 联接查询联接查询联接查询联接查询 目录目录3 3交叉联接(交叉联接(CROSS JOINCROSS JOIN)交叉联接将两个表在没有联接条件限制组合起来,交叉联接将产生联接所涉及的表的笛卡尔交叉联接将两个表在没有联接条件限制组合起来,交叉联接将产生联接所涉及的表的笛卡尔积。笛卡尔积就是将第一
14、个表的行数乘以第二个表的行数得到其结果集的行数的乘积。积。笛卡尔积就是将第一个表的行数乘以第二个表的行数得到其结果集的行数的乘积。例如,发帖表例如,发帖表TopicTopic中帖子主题与版块信息表中帖子主题与版块信息表SectionSection中版块名称交叉连接,如图所示。交叉中版块名称交叉连接,如图所示。交叉联接后返回的结果集中主题信息和版块信息有的是不正确的,这些信息不符合实际联接后返回的结果集中主题信息和版块信息有的是不正确的,这些信息不符合实际不正确匹配5.1 5.1 背景知识背景知识5.1.3 5.1.3 5.1.3 5.1.3 联接查询联接查询联接查询联接查询 目录目录组合查询组
15、合查询 多数多数SQLSQL语句只能从一个表或多个表中由单条语句只能从一个表或多个表中由单条SELECTSELECT语句返回一个结果集。但多条语句返回一个结果集。但多条SELECTSELECT语句执行,只能返回多个单一结果集。使用语句执行,只能返回多个单一结果集。使用UNIONUNION语句可以把两个或两个以上的查语句可以把两个或两个以上的查询结果集合并未一个结果集。询结果集合并未一个结果集。例如,查询所有发帖和回帖人的编号和帖子主题,如图所示。查询发帖表例如,查询所有发帖和回帖人的编号和帖子主题,如图所示。查询发帖表TopicTopic中发中发帖人编号帖人编号TUserIDTUserID和主
16、题和主题TTopicTTopic信息,与回帖表信息,与回帖表ReplyReply发帖人编号发帖人编号RUserIDRUserID和主题和主题RTopicRTopic信信息进行合并,返回一个结果集。息进行合并,返回一个结果集。回帖表发帖表查询结果集5.1 5.1 背景知识背景知识5.1.4 5.1.4 5.1.4 5.1.4 组合查询组合查询组合查询组合查询 目录目录子查询子查询 子查询是一个嵌套在子查询是一个嵌套在SELECTSELECT、INSERTINSERT、UPDATEUPDATE或或DELETEDELETE语句或其他子查询中的查询。子语句或其他子查询中的查询。子查询可以嵌套在查询可以
17、嵌套在WHERE WHERE 或或 HAVING HAVING 子句内,也可以嵌套在其他子查询内。子查询也称为内部子句内,也可以嵌套在其他子查询内。子查询也称为内部查询,而包含子查询的语句也称为外部查询。子查询的查询,而包含子查询的语句也称为外部查询。子查询的 SELECT SELECT 查询总是使用圆括号括起来。查询总是使用圆括号括起来。子查询一般分为两种:返回单值和返回值列表。子查询一般分为两种:返回单值和返回值列表。例如,检索所属版块为例如,检索所属版块为“WebWeb开发开发”所有主题和所在版块编号,如图所示。在版块信息所有主题和所在版块编号,如图所示。在版块信息表中根据版块名称表中根
18、据版块名称“WebWeb开发开发”查询其版块编号为查询其版块编号为1 1,将子查询结果用于检索发帖信息表中所,将子查询结果用于检索发帖信息表中所在版块编号为在版块编号为1 1的所有帖子用户编号和主题。的所有帖子用户编号和主题。子查询发帖表子查询过滤结果集5.1 5.1 背景知识背景知识5.1.5 5.1.5 5.1.5 5.1.5 子查询子查询子查询子查询 目录目录5.2.1 5.2.1 5.2.1 5.2.1 使用聚合函数汇总数据使用聚合函数汇总数据使用聚合函数汇总数据使用聚合函数汇总数据 【任任务务描述描述】1.1.统计发统计发帖表帖表TopicTopic中所有帖子点中所有帖子点击击数数T
19、ClickCountTClickCount的最大的最大值值、最小、最小值值、总总和、平均和、平均值值。2.2.查询发查询发帖表帖表TopicTopic帖子的数量以及帖子的数量以及发发帖人的数量。帖人的数量。【技能要点技能要点】熟熟练练使用聚合函数使用聚合函数对对数据数据进进行行汇总汇总正确使用正确使用DISTINCTDISTINCT关关键键字不重复字不重复统计统计5.2 5.2 典型工作任务典型工作任务目录目录1 1 使用聚合函数进行数据汇总使用聚合函数进行数据汇总(1 1)在)在SQL Server Management StudioSQL Server Management Studio工
20、具栏中选择工具栏中选择“新建查询新建查询”,选择当前可用数据库为,选择当前可用数据库为BBSBBS。也可以在也可以在BBSBBS数据库右击数据库右击“新建查询新建查询”。(2 2)统计发帖表)统计发帖表TopicTopic中所有帖子点击数中所有帖子点击数TClickCountTClickCount的最大值、最小值、总和、平均值。在的最大值、最小值、总和、平均值。在SQL SQL Server Management StudioServer Management Studio查询窗口中输入以下查询窗口中输入以下T-SQLT-SQL语句:语句:SELECT MAX(TClickCount)AS S
21、ELECT MAX(TClickCount)AS 最大值最大值,MIN(TClickCount)AS,MIN(TClickCount)AS 最小值最小值,SUM(TClickCount)AS SUM(TClickCount)AS 总和总和,AVG(TClickCount)AS,AVG(TClickCount)AS 平均值平均值FROM TopicFROM Topic(3 3)选择要执行的)选择要执行的T-SQLT-SQL语句,点击语句,点击“执行执行”,结果集如图所示。,结果集如图所示。5.2.1 5.2.1 5.2.1 5.2.1 使用聚合函数汇总数据使用聚合函数汇总数据使用聚合函数汇总数据
22、使用聚合函数汇总数据5.2 5.2 典型工作任务典型工作任务目录目录聚合函数提示聚合函数提示 在使用聚合函数汇总数据时,注意一下几点:在使用聚合函数汇总数据时,注意一下几点:AVG()函数只能用特定数值列的列名作为参数,返回该列平均值。多个列必须用多个AVG()函数SUM()函数用于返回特定数值列的和,也可以用计算列表达式的和MAX()函数和MIN()函数一般用来返回最大或最小数值和日期值AVG()、SUM()、MAX()、MIN()函数忽略NULL值的数据行5.2.1 5.2.1 5.2.1 5.2.1 使用聚合函数汇总数据使用聚合函数汇总数据使用聚合函数汇总数据使用聚合函数汇总数据5.2
23、5.2 典型工作任务典型工作任务目录目录2 2使用使用DISTINCTDISTINCT关键字关键字(1 1)查询发帖表)查询发帖表TopicTopic帖子的数量以及发帖人的数量。在帖子的数量以及发帖人的数量。在SQL Server Management StudioSQL Server Management Studio查询窗口中输入以下查询窗口中输入以下T-SQLT-SQL语句:语句:SELECT COUNT(*)AS SELECT COUNT(*)AS 帖子数量帖子数量,COUNT(DISTINCT TUserID)AS,COUNT(DISTINCT TUserID)AS 发帖人数量发帖人
24、数量 FROM FROM TopicTopic(3 3)选择要执行的)选择要执行的T-SQLT-SQL语句,点击语句,点击“执行执行”,结果集如图所示。,结果集如图所示。使用使用DISTINCTDISTINCT注意注意 DISTINCT不能用于不能用于COUNT(*),需要指定列名,需要指定列名在数据行存在多个在数据行存在多个NULL,使用,使用DISTINCT统计时,结果计为一个统计时,结果计为一个5.2.1 5.2.1 5.2.1 5.2.1 使用聚合函数汇总数据使用聚合函数汇总数据使用聚合函数汇总数据使用聚合函数汇总数据5.2 5.2 典型工作任务典型工作任务目录目录5.2.2 5.2.
25、2 5.2.2 5.2.2 使用使用使用使用GROUP BYGROUP BYGROUP BYGROUP BY分组检索分组检索分组检索分组检索【任务描述任务描述】1.1.统计发帖表统计发帖表TopicTopic中每个版块的回帖数量的情况。中每个版块的回帖数量的情况。2.2.检索回帖表检索回帖表ReplyReply中每个帖子的回帖数量大于等于中每个帖子的回帖数量大于等于2 2的帖子信息。的帖子信息。3.3.检索回帖表检索回帖表ReplyReply中每个版块和每个回复主题的回帖信息。中每个版块和每个回复主题的回帖信息。【技能要点技能要点】熟练使用熟练使用GROUP BYGROUP BY分组进行检索分
26、组进行检索正确使用正确使用HAVINGHAVING关键字过滤分组数据关键字过滤分组数据遵循遵循SELECTSELECT子句的顺序子句的顺序5.2 5.2 典型工作任务典型工作任务目录目录1 1 简单简单分分组组(1 1)统统计计发发帖帖表表TopicTopic中中每每个个版版块块的的帖帖子子数数量量的的情情况况。在在SQL SQL Server Server Management Management StudioStudio查查询询窗口中窗口中输输入以下入以下T-SQLT-SQL语语句:句:SELECTSELECT TSectionID TSectionID ASAS 版版块编块编号号,CO
27、UNTCOUNT(TopicNumberTopicNumber)ASAS 帖子数量帖子数量FROMFROM Topic Topic GROUPGROUP BYBY TSectionID TSectionID(2 2)选择选择要要执执行的行的T-SQLT-SQL语语句,点句,点击击“执执行行”,结结果集如果集如图图所示。所示。分分组组查查询询要要先先确确定定分分组组的的列列,统统计计函函数数对对每每一一行行数数据据进进行行分分组组后后,再再统统计计数数值值。在在结结果果集集中中可可以以看看到到根根据据版版块块编编号号TSectionIDTSectionID统统计计每每个个版版块块的的发发帖帖情情
28、况况。因因此此,在在GROUP GROUP BYBY子子句句后后面面为为分分组组的列名的列名TSectionIDTSectionID5.2.2 5.2.2 5.2.2 5.2.2 使用使用使用使用GROUP BYGROUP BYGROUP BYGROUP BY分组检索分组检索分组检索分组检索5.2 5.2 典型工作任务典型工作任务目录目录2 2 过滤分组过滤分组(1 1)在回帖表)在回帖表ReplyReply中每个帖子的回帖数量大于等于中每个帖子的回帖数量大于等于2 2的帖子信息。在的帖子信息。在SQL Server SQL Server Management StudioManagement
29、 Studio查询窗口中输入以下查询窗口中输入以下T-SQLT-SQL语句:语句:SELECT RTopicID AS SELECT RTopicID AS 帖子编号帖子编号,COUNT(RClickCount)AS,COUNT(RClickCount)AS 帖子数量帖子数量FROM Reply FROM Reply GROUP BY RTopicIDGROUP BY RTopicIDHAVING COUNT(RClickCount)=2HAVING COUNT(RClickCount)=2(2 2)选择要执行的)选择要执行的T-SQLT-SQL语句,点击语句,点击【执行执行】,结果集如图所示
30、。,结果集如图所示。5.2 5.2 典型工作任务典型工作任务5.2.2 5.2.2 5.2.2 5.2.2 使用使用使用使用GROUP BYGROUP BYGROUP BYGROUP BY分组检索分组检索分组检索分组检索目录目录回帖表中按照回复的主贴编号回帖表中按照回复的主贴编号RTopicIDRTopicID分组,要检索每个分组帖子的数量大于等于分组,要检索每个分组帖子的数量大于等于2 2的帖的帖子信息,在过滤数据时没有使用子信息,在过滤数据时没有使用WHEREWHERE子句,因为子句,因为WHEREWHERE过滤数据行,而不是分组。过滤数据行,而不是分组。SQLSQL提提供供HAVINGH
31、AVING子句过滤分组数据。在子句过滤分组数据。在WHEREWHERE子句中所有可用的通配符、运算符、表达式,在子句中所有可用的通配符、运算符、表达式,在HAVINGHAVING子句中都可以使用。子句中都可以使用。SELECTSELECT语句中子句的顺序:语句中子句的顺序:SELECT *|SELECT *|列名列名1,1,列名列名n|n|计算表达式计算表达式FROM FROM 表名表名WHERE WHERE 行过滤条件行过滤条件 GROUP BYGROUP BY列名列名1,1,列名列名nnHAVING HAVING 分组过滤条件分组过滤条件 ORDER BYORDER BY排序表达式排序表达
32、式 ASC|DESCASC|DESC5.2.2 5.2.2 5.2.2 5.2.2 使用使用使用使用GROUP BYGROUP BYGROUP BYGROUP BY分组检索分组检索分组检索分组检索5.2 5.2 典型工作任务典型工作任务目录目录5.2.2 5.2.2 5.2.2 5.2.2 使用使用使用使用GROUP BYGROUP BYGROUP BYGROUP BY分组检索分组检索分组检索分组检索3 3 多个分组多个分组(1 1)检检索回帖表索回帖表ReplyReply中每个版中每个版块块和每个回复主和每个回复主题题的回帖信息。在的回帖信息。在SQL Server SQL Server M
33、anagement StudioManagement Studio查询查询窗口中窗口中输输入以下入以下T-SQLT-SQL语语句:句:SELECTSELECT RSectionID RSectionID ASAS 所属版所属版块编块编号号,RTopicID RTopicID ASAS 回复帖子回复帖子编编号号,COUNTCOUNT(RClickCountRClickCount)ASAS 帖子数量帖子数量FROMFROM Reply Reply GROUPGROUP BYBY RSectionID RSectionID,RTopicIDRTopicID(2 2)选择选择要要执执行的行的T-SQL
34、T-SQL语语句,点句,点击击“执执行行”,结结果集如果集如图图所示。所示。5.2 5.2 典型工作任务典型工作任务目录目录按照多个列按照多个列进进行分行分组时组时,先根据,先根据GROUP BYGROUP BY子句中第一个列子句中第一个列RSectionIDRSectionID进进行分行分组组,如果所,如果所属版属版块编块编号号RSectionIDRSectionID相同,但回复帖子相同,但回复帖子编编号号RTopicIDRTopicID不同,再按第二个列不同,再按第二个列RTopicIDRTopicID进进行分行分组组。提示:提示:GROUP BYGROUP BY使用使用规则规则 GROU
35、P BY子句每一列都是检索列或计算表达式,不能使用聚合函数。GROUP BY子句中列不能使用别名。在SELECT子句检索列中,除了聚合计算列,每一列都在GROUP BY子句中出现。如果分组列中有NULL值,则将作为一个分组返回。5.2 5.2 典型工作任务典型工作任务5.2.2 5.2.2 5.2.2 5.2.2 使用使用使用使用GROUP BYGROUP BYGROUP BYGROUP BY分组检索分组检索分组检索分组检索目录目录5.2.35.2.35.2.35.2.3 使用联接查询使用联接查询使用联接查询使用联接查询 【任任务务描述描述】1.1.在在发发帖帖表表TopicTopic和和版版
36、块块信信息息表表SectionSection中中,查查询询帖帖子子主主题题TTopicTTopic及及所所属属版版块块的的名名称称SNameSName信息。信息。2.2.在用在用户户信息表信息表UsersUsers和和发贴发贴表表TopicTopic中,中,查询查询所有注册用所有注册用户户的的发发帖情况。帖情况。3.3.在回帖表在回帖表ReplyReply和和发贴发贴表表TopicTopic中,中,查询查询所有所有发发帖的回帖的信息。帖的回帖的信息。4.4.发发帖表帖表TopicTopic中帖子主中帖子主题题与版与版块块信息表信息表SectionSection中版中版块块名称首字符相同的信息。
37、名称首字符相同的信息。【技能要点技能要点】正确正确选择选择不同的不同的联联接接类类型型正确使用两个表以上的正确使用两个表以上的联联接接联联接接查询查询中使用表的中使用表的别别名名5.2 5.2 典型工作任务典型工作任务目录目录1 1 内部内部联联接接(1 1)在在发发帖帖表表TopicTopic和和版版块块信信息息表表SectionSection中中,查查询询帖帖子子主主题题TTopicTTopic及及所所属属版版块块的的名名称称SNameSName信息。在信息。在SQL Server Management StudioSQL Server Management Studio查询查询窗口中窗口
38、中输输入以下入以下T-SQLT-SQL语语句:句:SELECTSELECT TTopic TTopic ASAS 主主题题,SName SName ASAS 版版块块名称名称FROMFROM Section INNER JOIN Topic Section INNER JOIN TopicONON Section Section.SectionID SectionID=Topic Topic.TSectionIDTSectionID(2 2)选择选择要要执执行的行的T-SQLT-SQL语语句,点句,点击击“执执行行”。内部内部联联接等价于下列接等价于下列语语句:句:SELECTSELECT T
39、Topic TTopic ASAS 主主题题,SName SName ASAS 版版块块名称名称FROMFROM Section Section,TopicTopicWHEREWHERE Section Section.SectionID SectionID=Topic Topic.TSectionIDTSectionID5.2 5.2 典型工作任务典型工作任务5.2.35.2.35.2.35.2.3 使用联接查询使用联接查询使用联接查询使用联接查询 目录目录查询帖子主题查询帖子主题TTopicTTopic及所属版块的名称及所属版块的名称SNameSName信息分别存储在发帖表信息分别存储在发
40、帖表TopicTopic和版块信息表和版块信息表SectionSection中中,并且根据版块编号等值测试产生结果集,因此两个表的关系由,并且根据版块编号等值测试产生结果集,因此两个表的关系由FROMFROM子句中子句中INNER JOININNER JOIN指定,联指定,联接条件由特定接条件由特定ONON子句给出。内部联接相当于子句给出。内部联接相当于WHEREWHERE子句两个表的等值查询。子句两个表的等值查询。也可以完成三个表联接查询,在发帖表也可以完成三个表联接查询,在发帖表TopicTopic、回帖表、回帖表ReplyReply和版块信息表和版块信息表SectionSection中,
41、查询帖子主中,查询帖子主题题TTopicTTopic、回复主题、回复主题RTopicRTopic及所属版块的名称及所属版块的名称SNameSName信息。信息。T-SQLT-SQL语句如下:语句如下:5.2 5.2 典型工作任务典型工作任务5.2.35.2.35.2.35.2.3 使用联接查询使用联接查询使用联接查询使用联接查询 目录目录SELECTSELECT TTopic TTopic ASAS 主主题题,RTopic RTopic ASAS 回复的主回复的主题题,SName SName ASAS 版版块块名称名称FROMFROM Topic INNER JOIN Reply Topic
42、INNER JOIN ReplyONON Topic Topic.TopicID TopicID=Reply Reply.RTopicIDRTopicIDINNER JOIN Section INNER JOIN Section ON ON Topic Topic.TSectionID TSectionID=Section Section.SectionIDSectionID内部内部联联接(接(INNER JOININNER JOIN)语语法格式法格式:FROM FROM 表表1 1 INNERINNER JOIN JOIN 表表2 2 ON ON 联联接条件接条件INNERINNER JOI
43、N JOIN 表表n n ON ON 联联接条件接条件5.2 5.2 典型工作任务典型工作任务5.2.35.2.35.2.35.2.3 使用联接查询使用联接查询使用联接查询使用联接查询 目录目录2 2 外部联接外部联接左外左外联联接(接(LEFT OUTER JOINLEFT OUTER JOIN)(1 1)在在用用户户信信息息表表UsersUsers和和发发贴贴表表TopicTopic中中,查查询询所所有有注注册册用用户户的的发发帖帖情情况况。在在SQL SQL Server Server Management StudioManagement Studio查询查询窗口中窗口中输输入以下入以
44、下T-SQLT-SQL语语句:句:SELECTSELECT UserName UserName ASAS 用用户户名称名称,TTopic TTopic ASAS 主主题题FROMFROM Users LEFT OUTER JOIN Topic Users LEFT OUTER JOIN TopicONON Users Users.UserID UserID=Topic Topic.TUserIDTUserID(2 2)选择要执行的)选择要执行的T-SQLT-SQL语句,点击语句,点击“执行执行”。5.2 5.2 典型工作任务典型工作任务5.2.35.2.35.2.35.2.3 使用联接查询使用
45、联接查询使用联接查询使用联接查询 目录目录右外联接(右外联接(RIGHT OUTER JOINRIGHT OUTER JOIN)(1 1)在回帖表)在回帖表ReplyReply和发贴表和发贴表TopicTopic中,查询所有发帖的回帖的信息。在中,查询所有发帖的回帖的信息。在SQL Server SQL Server Management StudioManagement Studio查询窗口中输入以下查询窗口中输入以下T-SQLT-SQL语句:语句:SELECT RTopic AS SELECT RTopic AS 回复的主题回复的主题,TTopic AS,TTopic AS 发帖主题发帖主
46、题FROM Reply RIGHT OUTER JOIN TopicFROM Reply RIGHT OUTER JOIN TopicON Topic.TopicID=Reply.RTopicIDON Topic.TopicID=Reply.RTopicID(2 2)选择要执行的)选择要执行的T-SQLT-SQL语句,点击语句,点击“执行执行”,结果集如图所示。,结果集如图所示。5.2 5.2 典型工作任务典型工作任务5.2.35.2.35.2.35.2.3 使用联接查询使用联接查询使用联接查询使用联接查询 目录目录全外联接(全外联接(FULL OUTER JOINFULL OUTER JOI
47、N)(1 1)发帖表)发帖表TopicTopic中帖子主题与版块信息表中帖子主题与版块信息表SectionSection中版块名称首字符相同的信息。在中版块名称首字符相同的信息。在SQL SQL Server Management StudioServer Management Studio查询窗口中输入以下查询窗口中输入以下T-SQLT-SQL语句:语句:SELECTSELECT TTopic TTopic ASAS 主主题题,SName SName ASAS 版版块块名称名称FROMFROM Topic FULL OUTER JOIN Section Topic FULL OUTER JO
48、IN SectionONON LEFT(Topic.TTopic,1)=LEFT(Topic.TTopic,1)=LEFT(Section.SName,1)LEFT(Section.SName,1)(2 2)选择要执行的)选择要执行的T-SQLT-SQL语句,点击语句,点击“执行执行”,结果集如图所示。,结果集如图所示。5.2 5.2 典型工作任务典型工作任务5.2.35.2.35.2.35.2.3 使用联接查询使用联接查询使用联接查询使用联接查询 目录目录联接查询可以采用表的别名,用于限定在两个或多个表中重复的列名,或多次使用相同的表,缩联接查询可以采用表的别名,用于限定在两个或多个表中重复
49、的列名,或多次使用相同的表,缩短短SQLSQL语句书写长度。上例中可以使用表的别名,代码如下:语句书写长度。上例中可以使用表的别名,代码如下:SELECT TTopic AS SELECT TTopic AS 主题主题,SName AS,SName AS 版块名称版块名称FROM Topic AS a FULL OUTER JOIN Section AS bFROM Topic AS a FULL OUTER JOIN Section AS bON LEFT(a.TTopic,1)=LEFT(b.SName,1)ON LEFT(a.TTopic,1)=LEFT(b.SName,1)5.2 5.
50、2 典型工作任务典型工作任务5.2.35.2.35.2.35.2.3 使用联接查询使用联接查询使用联接查询使用联接查询 目录目录外部外部联联接接语语法格式法格式:左外左外联联接接:FROM FROM 表表1 1 LEFTLEFTOUTER JOINOUTER JOIN 表表2 2 ON ON 联联接条件接条件右外右外联联接接:FROM FROM 表表1 1 RIGHTRIGHTOUTER JOINOUTER JOIN 表表2 2 ON ON 联联接条件接条件全外全外联联接接:FROM FROM 表表1 1 FULLFULLOUTER JOINOUTER JOIN 表表2 2 ON ON 联联接