网站大量收购闲置独家精品文档,联系QQ:2885784924

SQLServer2005数据库技术及应用赵俊荣第11章节TSQL高级查询课件.ppt

SQLServer2005数据库技术及应用赵俊荣第11章节TSQL高级查询课件.ppt

  1. 1、本文档共40页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第11章 T-SQL高级查询 第11章 T-SQL高级查询 11.1多表查询 11.2连接 11.3使用统计函数 11.4使用GROUP BY子句进行分类汇总 11.5使用COMPUTE和COMPUTE BY子句 11.6使用嵌套的子查询 11.1 多表查询 1 多表查询和笛卡儿乘积 前面讨论的查询,大多还局限在一张表内。但在更多的情况下,需要对多张表中的数据同时进行查询。多表查询就是在FROM子句中出现多张表的情形。 下面的SQL语句实现同时对两张表进行的查询: USE JWGL GO SELECT name,grade FROM student,result 这个查询的目的是查询每个学生的成绩,查询结果如下: 陈红 85 陈红 75 陈红 65 陈红 45 11.1 多表查询 …… 李凡 60 李凡 75 李凡 99 (所影响的行数为234行) 这个查询一共返回了234个结果,显然,这是不正确的。问题出在对表连接条件的限制上。在上面的例子中,没有对表连接条件作任何限制,所以SQL Server在student表中每取出一条数据,就从result表中取出一条数据与前者组合成一条记录。在student中有9条记录,在result表中有26条记录,所以,一共返回了234条记录。 11.1 多表查询 这种情况在数据库理论中被称为笛卡儿乘积。 笛卡儿乘积返回的结果在大多数情况下是冗余、无用的,所以应该采取措施避免笛卡儿乘积的出现。 没有 WHERE 子句的连接将产生连接所涉及的表的笛卡尔积。 第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。 通过包含一条WHERE子句来给出查询连接条件,就可以有效避免出现笛卡儿乘积。 11.1 多表查询 【例11.1】还是利用上述同一个例子, 查询每个学生的成绩,为了实现查询目标,应该使用WHERE子句来给出查询连接条件,实现查询。 SELECT name,course_id,grade FROM student,result WHERE student.student_id= result.student_id 这时,返回了26条记录,查询结果是正确的。 一般说来,为了有效避免笛卡儿乘积的出现,对所定义的查询连接条件的数目是有规定的:如果有N个表出现在FROM的后面,那么,所定义的连接条件不得少于N-1个。 11.1 多表查询 2 使用表的别名 在SQL语言中,允许对表使用别名,所以,可以用更简便明了的方法来书写上面的查询语句。 如11.1的例子可以改写为: SELECT name,course_id,grade FROM student s,result r WHERE s.student_id=.student_id 也可以按照ANSI92标准使用AS关键字来使用别名,如上面的查询可以更改为: SELECT name,course_id,grade FROM student as s,result as r WHERE s.student_id=.student_id 使用表的别名时,首先应在SELECT查询语句的FROM子句中指定表的别名。 11.1 多表查询 3 使用联合运算UNION子句 如果有多个不同的查询结果数据集,但又希望将它们连接在一起,组成一组数据。 这组数据是这多个结果集的逻辑联合。在这种情况下,可以使用UNION子句。 它将两个或更多查询的结果组合为单个结果集,该结果集包含联合查询中的所有查询的全部行。 使用 UNION 组合两个查询的结果集的两个基本规则是:所有查询中的列数和列的顺序必须相同,并且数据类型必须兼容。 所谓兼容就是各列的数据类型不必精确地进行匹配,服务器会自动地实现不同长度字符串的转换,也可以在不同类型的数值之间实现相互转换。但是,服务器不会把数值转换为字符串,也不会把日期类型转换为数值类型。 11.1 多表查询 使用联合运算UNION子句 【例11.2】使用UNION语句联合对学生表(Student)和教师表(Teacher)的查询,列出学生和教师的姓名和出生日期。 SELECT name,birthday FROM student UNION SELECT name,birthday FROM teacher 联合查询的结果列标题为第一个查询的列标题,如果要排序,也必须使用第一个查询语句中的列名。 要对UNION操作的数据集结果进行排序,必须把ORDER BY子句写在最后的SELECT查询语句后面。 11.2 连接 SQL Server中的连接主要是为了实现多表查询。这是SQL Server作为一种关系数据库的一个体现。在关系数据库中,常把一个实体的所有信息存储到一个表中,当需要检索信息

文档评论(0)

开心农场 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档