第04章sqlserver与数据查询.ppt

  1. 1、本文档共82页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第04章SQLServer与数据查询 查询结果排序 使用ORDER BY 字句以及DESC或ASC命令关键字。 例 查询选修了C03号课程的学生的学号(SNo)和成绩(Grade),并按成绩降序排列。 SELECT SNo,Grade FROM Reoprts WHERE CNo=C03 ORDER BY Grade DESC 对于空值,若按升序排,含空值的元组最先显示。若按降序排,空值的元组最后显示。 使用集函数 在SELECT语句中使用COUNT()、AVG等集函数 例 计算选修C01号课程的学生平均成绩。 SELECT AVG(Grade) FROM SC WHERE CNo=C01 注意,成绩为空值的学生不参与计算。 查询结果分组 在SELECT语句中使用GROUP BY字句将查询结果表按照某一列或多列的值分组,使其列值相等的为一组。还可以用HAVING短语指定结果组满足的条件。 例 查询选修了3门或3门以上课程的学生学号(SNo)。 SELECT SNo FROM SC GROUP BY SNo HAVING COUNT(*)=3 GROUP BY子句先按SNo进行分组,再用集函数COUNT对每一组计数。HAVING指定选择组的条件,只有满足条件(COUNT(*)=3,表示选课数超过3门)的组才被选出来。 4.4 复杂查询 4.4.1 连接查询 4.4.2 嵌套查询 4.4.3 集合查询 4.4.1 连接查询 ? 不同表之间的连接查询 ? 自身连接查询 ? 外连接查询 不同表之间的连接查询 一般是在WHERE字句中WHERE子句中将两(多)个表的属性列名,作为连接条件实现,其格式通常为: [表名1.]列名1 比较运算符 [表名2.]列名2 或者 [表名1.]列名1 BETWEEN [表名2.]列名2 AND [表名2.]列名3 说明: 当连接运算符为“=”时,称为等值连接,其它为非等值连接。连接条件中列名对应属性的类型必须是可比的,但列名不必是相同的。 不同表之间的连接查询 例 查询每个学生的学号(SNo)、姓名(SName)、选修的课程名(CName)及成绩(Grade)。本查询涉及三个表的连接操作,完成该查询的SQL语句如下: SELECT Student.SNo,SName,CName,Grade FROM Student,SC,Course WHERE Student.SNo= SC.SNo AND SC.CNo=Course.CNo DBMS执行连接操作的过程是:首先在表1中找到第1个元组,然后对表2从头开始扫描逐一查找满足连接条件的元组,找到后就将表1中的第1个元组与该元组拼接起来,形成结果表中的一个元组。表2全部查找完后,再找表1中第2个元组,然后再对表2从头开始扫描,重复上述操作,直到表1中的全部元组都处理完毕为止。 自身连接查询 自身连接:将同一个表与自己进行连接的查询,其基本方法是在SELECT语句的FROM子句中将同一个表取两个不同的别名。比如: 例:查询一门课程的先导课的先导课 SELECT A.cno, A.cname, B.pre_Cno FROM Courses A, Courses B WHERE A.pre_Cno = B.cno; 外连接 选定连接操作中涉及的某个表A为基准,即使另一个表B中没有与之匹配的记录,其结果表中也要求包括表A的所有元组。若表B中没有与之匹配的记录,结果表中涉及表B的属性列全部取空值。 外连接 例 把书上例3.37中的等值连接改为左连接。 SELECT Student.SNo,SName,SSex,SAge,SDept,CNo,Grade FROM Student,SC WHERE Student.SNo= SC.SNo(*) 4.4.2 嵌套查询 嵌套查询:将一个查询块(SELECT-FROM-WHERE)嵌套在另一个查询块的WHERE子句或HAVING短语条件中的查询。 2、常用的嵌套查询 ⑴ 带谓词IN的嵌套查询 ⑵ 带有比较运算符的嵌套查询 ⑶ 带谓词ANY或ALL的嵌套查询 ⑷ 带谓词EXISTS的嵌套查询 4.4.2 嵌套查询 1. 带谓词IN的嵌套查询 例 查询选修了编号为“C02”的课程的学生姓名(SName)和所在系(SDept)。 SELECT SName,SDept FROM Student WHERE SNo IN ( SELECT SNo FROM SC WHERE CN

文档评论(0)

rabbitco + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档