SQLServer8应用教程电子教案ch8.ppt
文本预览下载声明
* 第*页 【例8-31】在COMPUTE子句中使用聚合函数 * 第*页 本章内容 8.1 概述 8.2 插入数据 8.3 更新数据 8.4 删除数据 8.5 检索数据概述 8.6 使用SELECT子句检索数据 8.7 排序 8.8 使用WHERE子句选择数据 8.9 聚合技术 8.10 分组技术 8.11 连接技术 8.12 子查询技术 8.13 集合运算技术 8.14 公用表表达式 8.15 PIVOT和UNPIVOT 8.16 加密表中数据 8.17 上机练习 8.18 习题 * 第*页 8.10 分组技术 聚合函数只能产生一个单一的汇总数据,使用GROUP BY子句,则可以生成分组的汇总数据。GROUP BY子句把数据组织起来分成组。 一般情况下可以根据表中的某一列进行分组,通过使用聚合函数对每一个组可以产生聚合值。如果希望过滤某些分组,可以使用HAVING子句排。 分组技术是指使用GROUP BY子句完成分组操作的技术。如果在GROUP BY子句中没有使用CUBE或ROLLUP关键字,那么表示这种分组技术是普通分组技术。 * 第*页 普通分组技术 GROUP BY子句、HAVING子句和聚合函数一起完成对每一个组生成一行和一个汇总值。在使用GROUP BY子句和HAVING子句的过程中,要求考虑下列一些条件: 在SELECT子句中的非合计列必须出现在GROUP BY子句中。这是因为这些非合计列必须作为组出现,否则不能满足一组只能有一行汇总值的条件。 在HAVING子句中的列只返回一个值。 因为HAVING子句是作为GROUP BY子句的条件出现的,所以HAVING子句必须与GROUP BY子句同时出现,并且必须在GROUP BY子句之后出现。 GROUP BY子句可以包括表达式。 GROUP BY ALL显示出所有的组,甚至那些不满足WHERE子句条件的组也显示出来。如果GROUP BY ALL和HAVING子句同时出现,那么HAVING条件将覆盖ALL。 * 第*页 【例8-32】使用GROUP BY子句进行分组 * 第*页 使用ROLLUP或CUBE关键字 在GROUP BY子句中,可以使用ROLLUP或CUBE关键字获得附加的分组数据,这些附加的分组数据是通过各组之间的组合得到的。实际上,使用CUBE关键字可以生成多维数据。 下面,通过一个示例讲述这两个关键字的特点。 * 第*页 【例8-33】使用ROLLUP或CUBE关键字 * 第*页 本章内容 8.1 概述 8.2 插入数据 8.3 更新数据 8.4 删除数据 8.5 检索数据概述 8.6 使用SELECT子句检索数据 8.7 排序 8.8 使用WHERE子句选择数据 8.9 聚合技术 8.10 分组技术 8.11 连接技术 8.12 子查询技术 8.13 集合运算技术 8.14 公用表表达式 8.15 PIVOT和UNPIVOT 8.16 加密表中数据 8.17 上机练习 8.18 习题 * 第*页 8.11 连接技术 前面介绍的检索操作都是从一个表中检索数据。在实际应用中,经常需要同时从两个表或两个以上表中检索数据,并且每一个表中的数据往往作为一个单独的列出现在结果集中。 实现从两个或两个以上表中检索数据且结果集中出现的列来自于两个或两个以上表中的检索操作被称为连接技术,或者说连接技术是指对两个表或两个以上表中数据执行乘积运算的技术。 在Microsoft SQL Server 2008系统中,这种连接操作又可以细分为交叉连接、内连接、外连接等。下面分别研究这些连接技术。 * 第*页 交叉连接 交叉连接也被称为笛卡尔乘积,返回两个表的乘积。在检索结果集中,包含了所连接的两个表中所有行的全部组合。 例如,如果对A表和B表执行交叉连接,A表中有5行数据,B表中有12行数据,那么结果集中可以有60行数据。 交叉连接使用CROSS JOIN关键字来创建。实际上,交叉连接的使用是比较少的,但是交叉连接是理解外连接和内连接的基础。 * 第*页 【例8-34】交叉连接检索 * 第*页 内连接 内连接把两个表中的数据连接生成第三个表,在这个第三个表中仅包含那些满足连接条件的数据行。 在内连接中,使用INNER JOIN连接运算符,并且使用ON关键字指定连接条件。 内连接是一种常用的连接方式,如果在JOIN关键字前面没有明确指定连接类型,那么默认的连接类型是内连接。 * 第*页 【例8-35】内连接检索 * 第*页 外连接 在外连接中,不仅包括那些满足条件的数据,而且某些表不满足条件的数据也会显示在结果集中。也就是说,外连接只限制其中一个表的数据行,而不限制另外一个表中的数据。这种连接
显示全部