使用transact-sql语言

上传人:精****档 文档编号:57206745 上传时间:2018-10-20 格式:PPT 页数:38 大小:717KB
返回 下载 相关 举报
使用transact-sql语言_第1页
第1页 / 共38页
使用transact-sql语言_第2页
第2页 / 共38页
使用transact-sql语言_第3页
第3页 / 共38页
使用transact-sql语言_第4页
第4页 / 共38页
使用transact-sql语言_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《使用transact-sql语言》由会员分享,可在线阅读,更多相关《使用transact-sql语言(38页珍藏版)》请在金锄头文库上搜索。

1、第2章 使用Transact-SQL语言,查询信息-单表,切换数据库:USE 数据库名 SELECT语句:用于查询数据。 SELECT 选择列表 FROM 表(视图)的列表 WHERE 查询的条件 【1】从Student表中查询学号为00000001的学生的姓名(StuName)和选课密码(Pwd)【2】要求查询系部编号为01的班级信息,要求显示班级编号和班级名称,查询信息(单表),1、查询所有列的信息(使用*) 【3】查询课程的所有信息 【4】查询课程的课程类别 2、消除显示结果重复值(使用DISTINCT) 【5】查询课程的课程类别,要求对值相同的那些行只保留一行 3、显示前部分行的数据(

2、使用TOP n PERCENT) 【6】从学生表中查询所有信息,要求只显示查询结果的前6行。,查询信息(单表),4、修改查询结果中的列标题 【7】查询学生表中的学号、班级编号和姓名信息,并修改列标题为汉字标题方法: (1)将要显示的列标题用单引号括起来后接等号(), 后接要查询的列名 (2)将要显示的列标题用单引号括起来后,写在列名后面,两者之间使用空格隔开 (3)将要显示的列标题用单引号括起来后,写在列名后面,两者之间使用AS关键字【8-9】使用其他两种方法,查询信息(单表),5、在查询结果中显示字符串 【10】查询课程表的信息,要求给出查询结果为: 课程名称 课程编号 SQL Server

3、实用技术 课程编号为: 001 课程编号为: 课程编号为: ,查询信息(单表),6、使用WHERE限制查询的条件 【11】查询课程编号为001的课程名称。 【12】查询 “Linux操作系统”课程的任课教师 【13】在课程表中查询课程类别为“信息技术”而且学分为2的课程信息。 【14】在课程表中查询报名人数在20到30人之间的课程信息。,7、表达式、函数作为SELECT语句的列 【15】查询课程信息、报名人数与限选人数之比 【16】查询课程表中最小报名人数、最大报名人数以及平均报名人数。 【17】查询学生总数、课程总门数。,SQL提供了许多库函数,增强了基本检索能力。(p86),思考:能否将上

4、面的查询结果按报名人数和限选人数之比的升序排序?,查询信息(单表),8、重新排序查询结果(ORDER BY子句)升序:ASC(默认) 降序:DESC 也可以在ORDER BY子句中指定多个列 18:查询课程信息、报名人数与限选人数之比,要求查询结果按照报名人数升序排序。 【19】查询课程信息、报名人数与限选人数之比,先按报名人数升序排序,报名人数相同时,再按报名人数和限选人数之比降序排序查询结果 【20】查询课程表的教师名、课程号、课程名,要求查询结果首先按教师名降序排列,教师名相同时,则按课程号的升序排列 21 查询课程类别为“信息技术”的课程的任课教师、课程名,要求先按教师名升序排列,教师

5、名相同时,按课程名的降序排列,并将显示的列名改为中文。,查询信息(单表),9、使用IN(NOT IN)关键字 利用“IN”操作可以查询属性值属于指定集合的元组。 【22-23】查询课程编号为001004013的课程名称。方法一:使用逻辑运算符OR 方法二:使用IN关键字(比使用逻辑运算符更为简单)【24】查询课程编号不为001004013的课程信息。,查询信息(单表),10、模糊查询(使用LIKE(NOT LIKE) 上例均属于完全匹配查询,当不知道完全精确的値时,用户还可以使用LIKE或NOT LIKE进行部分匹配查询(也称模糊查询)。 LIKE定义的一般格式为:LIKE 通配符: % 匹配

6、包括0个或多个字符的字符串 _ 匹配任何一个字符 匹配任何在范围内的单个字符,例如:m-p 匹配任何不在范围内的单个字符,例如:m-p、mnop 通配符和字符串要括在单引号中,如果要查找通配符本身,需 将它们用方括号括起来 例:m-p,mnop或m-p,1-9,D%,_宝%, ckarseon , mc% , 5%,【练习】解释下面的通配符表示的意义 %D% 、 _a 、 、%D 25查询课程名以字母D开始的课程信息 【26】查询姓名第二个字为宝的学生信息 【27】查询以“制作”两字结尾的课程名(使用LIKE) 【28】查询姓李或者姓刘,并且姓名的第二个字为“丽”的学生信息,要求显示学生学号和

7、姓名 【29】查询不姓“刘”的学生信息(使用两种方法),查询信息(单表),11、使用IS NULL关键字用于查询列中没有赋值的数据行 【30】查询课程表中教师未定的课程名称和教师名 注意:这里的空值条件为IS NULL,不能写成teacher=NULL。 12、使用BETWEENAND(NOT BETWEENAND)关键字 用于查询在某一特定范围内的信息,查询信息(单表),【31】查询报名人数少于25并且多于15人的课程信息。 【32】查询报名人数大于等于30并且小于等于40的课程信息,要求显示课程名称和报名人数(使用BETWEENAND)注意WHERE WillNum BETWEEN 30

8、AND 40包括30和40这两个值也可以在WHERE字句中使用前面讲过的逻辑运算符查询某一范围内的信息 【34】查询报名人数比限制选课人数多一倍以及一倍以上的课程信息,要求显示课程名称、报名人数和限制选课人数之比,并按该比例的降续排列(使用NOT BETWEENAND),查询信息(单表),14、使用COMPUTE子句 用来计算总计或进行分组小计 【35】查询课程表中的课程编号、课程名称、课程类别、报名人数,并计算平均报名人数说明 总计值或小计值作为附加新行出现在查询结果中。该子句用在WHERE子句之后从查询结果可以看到: 查询结果中有两个结果集 (1)包含选择的列的所有明细行 (2)包含COM

9、PUTE子句中所指定的聚合函数的合计聚合函数:AVG()、MAX()、MIN()、SUM()扩展 (36)只查询课程类别为“信息技术”的课程信息 (37)查询课程信息,并计算平均报名人数、最大报名人数、最小报名人数。,查询信息-单表,15、使用COMPUTEBY子句 【38】按类查询课程表中的课程编号、课程名称、课程类别、报名人数,并计算每类课程的平均报名人数注意必须先使用ORDER BY排序要分组的列,问题,问题COMPUTE子句是在一个明细行的基础上增加一个总计或小计(有BY时),但如果只想统计每类课程的平均报名人数,该如何处理?,查询信息-单表,16、使用GROUP BY子句 【39】按

10、课程类别统计每类课程的平均报名人数与上面例子的区别:只有一个结果集 说明 (1)该子句用于将查询结果按照GROUP BY后指定的列进行分组,该子句写在WHERE子句后面 (2)GROUP BY子句经常用于SELECT子句中包含有聚合函数的情况。此时,SELECT子句中选项列表中出现的列,只能是GROUP BY子句中的列或者包含在聚合函数中。,查询信息-单表,17、使用HAVING子句 【40】上面的例子中,如果只统计“信息技术”类课程的平均报名人数说明HAVING经常用在GROUP BY子句之后,用于限定结果集中的分组, 也可以使用WHERE子句。可以看到,HAVING子句是对结果进行过滤,而

11、WHERE是对原始记录进行过滤。所以having没有where有效,但是having子句中可以使用聚合函数,而where子句不可以。注意HAVING子句中的列只能是GROUP BY子句中或者聚合函数中的列【41】查询平均报名人数大于30人的课程类和每类平均报名人数【42】在课程表中,按所开设课程的系部编号分别统计总共报名人数 43:系部编号为01的系所开设的课程总共有多少学生报名,如何编程实现?,查询信息-单表,18、使用子查询在一个查询中包含另一个查询 【44】查询报名人数大于平均报名人数的课程编号、课程名称和报名人数 STEP 1:如何求平均报名人数 STEP 2:完成题目要求,查询信息-

12、多表,“计算机应用工程系” 有哪些班级,应该查询哪些表? 如果在多个表中进行查询,结果会怎 样? USE Xk GO SELECT * FROM Department, Class GO 结果集中,有54行(318),5列(23)。,查询信息(单表),13、使用UNION子句用于将两个或多个查询结果合并成一个结果【45】从班级表中查询班级名,从系部表中查询系部名,并将这两个查询结果合并起来使用时注意: (1)要合并的查询结果的列个数要相同 (2)要合并的查询结果按顺序对应列的数据类型性同或者兼容扩展 (1)修改列标题 (2)按新的列标题排序,查询信息(单表),13、使用UNION子句用于将两个

13、或多个查询结果合并成一个结果【46】从班级表中查询班级名,从系部表中查询系部名,并将这两个查询结果合并起来使用时注意: (1)要合并的查询结果的列个数要相同 (2)要合并的查询结果按顺序对应列的数据类型性同或者兼容扩展 (1)修改列标题 (2)按新的列标题排序 【47】查询学生总数、课程总门数。,取自第一个select语句的列,查询信息-多表,【48】查询“01电子商务”班学生选修课程的情况,要求显示班级名称、学号、姓名、课程名称和上课时间.分析 班级名称、学号、姓名、课程名称、上课时间 这些信息是分别在班级表、学生表、学生选课表和课程表中的,因此需要在多个表中进行查询。同时,必须在WHERE

14、子句中给出连接条件。注意在引用的多表中,如果列名在多个表中同名,为了避免列名不明确,在SELECT子句中必须在列名前加上表的前缀,即“表名.列名”。 【49】查询“林斌”同学的选修课信息(课程编号、课程名称、上课时间),系部编号 系部名称,班级编号 系部编号 班级名称,学号 班级编号 学生姓名 选课密码,课程编号| 课程名称|课程类别| 学分 | 教师 | 系部编号|上课时间|限选人数| 报名人数| 被选中,学号 课程编号 志愿号 选课状态 随机数,查询信息-多表,【50】查询学生选课信息,要求显示姓名、课程名称、志愿号,按姓名和志愿号排序。 【51】查询学生报名“计算机应用工程系”开设的选修

15、课程情况,显示信息包括学生姓名、课程名称和授课教师。,查询信息-多表,【52】查询每个系所开课程的门数,系名称、开课门数 【53】显示所有系的班级名称,要求计算各系班级数量,显示要求如下:,查询信息-多表,19、非相等连接(比较连接) 连接条件不是等号,而是比较运算符 【问题】查询各班可以选择的不是本系开设的选修课程的信息(教材的例子),查询信息-多表,20、自连接一个表和自身进行的连接 【问题】查询课程类相同而系部编号不同的课程信息(意味着同一类的课程有多个系部开设),要求显示课程编号、课程名称、课程类别和系部编号(教材上的例子)21、使用别名 【练习】查询学分大于等于2.5的课程信息,显示

16、课程名称、学分、开设该课程的系部名称、报名人数,要求使用别名,查询信息-多表,上面介绍的都是内连接。 以下是外连接:主要解决信息丢失的问题 【问题】查询开设的所有选修课的信息和所有学生选修课程的情况,要求显示学生学号、课程编号、课程名称 自然连接会丢失信息:Course表的019课程、StuCou表的020课程 左外连接 右外连接、全连接 交叉连接,使用EXISTS关键字,如果要解决这样的问题: 【问题】查询已经报名选修了课程的学生的学号和姓名 分析采用上面所学的方法能否解决? 使用EXISTS关键字 测试跟随的子查询的行是否存在要点 一旦找到,立即停止 找到则返回TRUE,否则返回FALSE,而不是返回一些行,

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

当前位置:首页 > 办公文档 > 其它办公文档

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