《数据库管理》SQL_SERVER第04章

上传人:飞*** 文档编号:5576634 上传时间:2017-08-07 格式:PPT 页数:51 大小:710.50KB
返回 下载 相关 举报
《数据库管理》SQL_SERVER第04章_第1页
第1页 / 共51页
《数据库管理》SQL_SERVER第04章_第2页
第2页 / 共51页
《数据库管理》SQL_SERVER第04章_第3页
第3页 / 共51页
《数据库管理》SQL_SERVER第04章_第4页
第4页 / 共51页
《数据库管理》SQL_SERVER第04章_第5页
第5页 / 共51页
点击查看更多>>
资源描述

《《数据库管理》SQL_SERVER第04章》由会员分享,可在线阅读,更多相关《《数据库管理》SQL_SERVER第04章(51页珍藏版)》请在金锄头文库上搜索。

1、4.2.2 选择行,【例4.21】查找选修了全部课程的同学的姓名。SELECT 姓名 FROM XS WHERE NOT EXISTS (SELECT * FROM KC WHERE NOT EXISTS ( SELECT * FROM XS_KC WHERE 学号=XS.学号 AND 课程号=KC.课程号 ) )本例即查找没有一门功课不选修的学生。,4.2.2 选择行,SELECT的查询对象由FROM子句指定,其格式为: FROM ,n 其中table_source指出了要查询的表或视图。:=table_name AS table_alias WITH ( , ) /*查询表,可以指定别名*

2、/| view_name AS table_alias /*查询视图*/| rowset_function AS table_alias /*行集函数*/| OPENXML /*XML文档*/| derived_table AS table_alias ( column_alias ,n ) /*子查询*/| /*连接表*/,1. table_nametable_name指定SELECT语句要查询的表,从前面的例子中已经了解了其作用。,4.2.2 选择行,【例4.22】查找选修了学号为001102同学所选修的全部课程的同学的学号。分析:本例即要查找这样的学号y,对所有的课程号x,若001102

3、号同学选修了该课,那么y也选修了该课。SELECT DISTINCT 学号 FROM XS_KC AS CJ1 WHERE NOT EXISTS ( SELECT * FROM XS_KC AS CJ2 WHERE CJ2.学号 = 001102 AND NOT EXISTS ( SELECT * FROM XS_KC AS CJ3 WHERE CJ3.学号= CJ1.学号AND CJ3.课程号 = CJ2.课程号 ) ),2. view_nameview_name为视图名,也可以为其指定别名。,4.2.2 选择行,3. rowset_function rowset_function是一个行集

4、函数,行集函数通常返回一个表或视图。主要的行集函数有CONTAINSTABLE、FREETEXTTABLE、OPENDATASOURCE、OPENQUERY、OPENROWSET和OPENXML。(1) CONTAINSTABLE函数,(2) FREETEXTTABLE函数FREETEXTTABLE函数与FREETEXT谓词相对应,它的使用与CONTAINSTABLE函数类似,格式为:FREETEXTTABLE ( table , column | * , freetext_string , top_n_by_rank )该函数使用与FREETEXT谓词相同的搜索条件。(3) OPENDATA

5、SOURCE函数该函数使用户连接到服务器。格式为:OPENDATASOURCE ( provider_name , init_string ),4.2.2 选择行,(4) OPENQUERY函数 该函数在给定的链接服务器(一个 OLE DB 数据源)上执行指定的直接传递查询,返回查询的结果集。格式为:OPENQUERY ( linked_server , query ),(5) OPENROWSET函数 该函数与OPENQUERY函数功能相同,语法格式不同。(6) OPENXML函数OPENXML 通过XML文档提供行集视图。4. derived_tablederived_table是由SEL

6、ECT查询语句的执行而返回的表,必须使用为其指定一个别名,也可以为列指定别名。,5. joined_tablejoined_table为连接表,将在下一小节介绍。,4.2.4 连接,1. 连接谓词可以在SELECT语句的WHERE子句中使用比较运算符给出连接条件对表进行连接,将这种表示形式称为连接谓词表示形式。【例4.24】查找XSCJ数据库每个学生的情况以及选修的课程情况。SELECT XS.* , XS_KC.* FROM XS , XS_KC WHERE XS.学号 = XS_KC.学号,【例4.25】自然连接查询SELECT XS.* , XS_KC.课程号, XS_KC.成绩 FRO

7、M XS , XS_KC WHERE XS.学号= XS_KC.学号,4.2.4 连接,【例4.27】查找选修了“计算机基础”课程且成绩在80分以上的学生学号、姓名、课程名及成绩。SELECT XS.学号, 姓名, 课程名, 成绩 FROM XS , KC , XS_KC WHERE XS.学号 = XS_KC.学号 AND KC.课程号 = XS_KC.课程号 AND 课程名 = 计算机基础 AND 成绩 = 80,【例4.26】查找选修了206课程且成绩在80分以上的学生姓名及成绩。SELECT 姓名 , 成绩 FROM XS , XS_KC WHERE XS.学号 = XS_KC.学号

8、AND 课程号 = 206 AND 成绩 = 80,2. 以JOIN关键字指定的连接FROM子句的joined_table表示将多个表连接起来。:= ON | CROSS JOIN | ,4.2.4 连接,【例4.28】查找XSCJ数据库每个学生的情况以及选修的课程情况。SELECT * FROM XS INNER JOIN XS_KC ON XS.学号 = XS_KC.学号,【例4.29】用FROM的JOIN关键字表达下列查询:查找选修了206课程且成绩在80分以上的学生姓名及成绩。SELECT 姓名 , 成绩 FROM XS JOIN XS_KC ON XS.学号 = XS_KC.学号 W

9、HERE 课程号 = 206 AND成绩=80,【例4.30】用FROM的JOIN关键字表达下列查询:查找选修了“计算机基础”课程且成绩在80分以上的学生学号、姓名、课程名及成绩。SELECT XS.学号 , 姓名 , 课程名 , 成绩 FROM XS JOIN XS_KC JOIN KC ON XS_KC.课程号 = KC.课程号 ON XS.学号 = XS_KC.学号 WHERE 课程名 = 计算机基础 AND 成绩=80,4.2.4 连接,【例4.31】查找不同课程成绩相同的学生的学号、课程号和成绩。SELECT a.学号,a.课程号,b.课程号,a.成绩 FROM XS_KC a JO

10、IN XS_KC b ON a.成绩=b.成绩 AND a.学号=b.学号 AND a.课程号!=b.课程号,(2) 外连接外连接包括三种: 左外连接(LEFT OUTER JOIN):结果表中除了包括满足连接条件的行外,还包括左表的所有行; 右外连接(RIGHT OUTER JOIN):结果表中除了包括满足连接条件的行外,还包括右表的所有行; 完全外连接(FULL OUTER JOIN):结果表中除了包括满足连接条件的行外,还包括两个表的所有行。,【例4.32】查找所有学生情况,及他们选修的课程号,若学生未选修任何课,也要包括其情况。SELECT XS.* , 课程号 FROM XS LEF

11、T OUTER JOIN XS_KC ON XS.学号 = XS_KC.学号,4.2.4 连接,【例4.33】查找被选修了的课程的选修情况和所有开设的课程名。SELECT XS_KC.* , 课程名 FROM XS_KC RIGHT JOIN KC ON XS_KC.课程号= KC.课程号,(3) 交叉连接交叉连接实际上是将两个表进行笛卡尔积运算,结果表是由第一个表的每行与第二个表的每一行拼接后形成的表,因此结果表的行数等于两个表行数之积。【例4.34】列出学生所有可能的选课情况。SELECT 学号,姓名,课程号,课程名 FROM XS CROSS JOIN KC,4.2.5 数据汇总,1.

12、聚合函数SQL Server 2000所提供的聚合函数列于表4.10中。,4.2.5 数据汇总,(1)SUM和AVGSUM和AVG分别用于求表达式中所有值项的总和与平均值,语法格式为:SUM / AVG ( ALL | DISTINCT expression ),【例4.35】求选修101课程的学生的平均成绩。SELECT AVG(成绩) AS 课程101平均成绩 FROM XS_KC WHERE 课程号 = 101,(2)MAX和MINMAX和MIN分别用于求表达式中所有值项的最大值与最小值,语法格式为:MAX / MIN ( ALL | DISTINCT expression ),【例4.

13、36】求选修101课程的学生的最高分和最低分。SELECT MAX(成绩) AS 课程101的最高分 , MIN(成绩) AS 课程101的最低分 FROM XS_KC WHERE 课程号 = 101,4.2.5 数据汇总,(3)COUNTCOUNT用于统计组中满足条件的行数或总行数,格式为:COUNT ( ALL | DISTINCT expression | * ),【例4.37】求学生的总人数。SELECT COUNT(*) AS 学生总数 FROM XSCOUNT(*) 不需要任何参数。【例4.38】求选修了课程的学生总人数。SELECT COUNT(DISTINCT 学号) FROM

14、 XS_KC,【例4.39】统计离散数学课程成绩在85分以上的人数。SELECT COUNT(成绩) AS 离散数学85分以上的人数 FROM XS_KC WHERE 成绩 = 85 AND 课程号 IN ( SELECT 课程号 FROM KC WHERE 课程名 = 离散数学),4.2.5 数据汇总,(4)GROUPINGGROUPING函数为输出的结果表产生一个附加列,该列的值为1或0,格式为:GROUPING( column_name ),2. GROUP BY子句GROUP BY子句用于对表或视图中的数据按字段分组,格式为: GROUP BY ALL group_by_expression ,n WITH CUBE | ROLLUP ,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号