《SQL server数据库》课件第4章 数据库的查询.ppt

上传人(卖家):momomo 文档编号:5818466 上传时间:2023-05-11 格式:PPT 页数:54 大小:316KB
下载 相关 举报
《SQL server数据库》课件第4章 数据库的查询.ppt_第1页
第1页 / 共54页
《SQL server数据库》课件第4章 数据库的查询.ppt_第2页
第2页 / 共54页
《SQL server数据库》课件第4章 数据库的查询.ppt_第3页
第3页 / 共54页
《SQL server数据库》课件第4章 数据库的查询.ppt_第4页
第4页 / 共54页
《SQL server数据库》课件第4章 数据库的查询.ppt_第5页
第5页 / 共54页
点击查看更多>>
资源描述

1、第第4章章 数据库的查询数据库的查询(SQL)4.1 任务描述:任务描述:本章完成项目的第本章完成项目的第4个任务:个任务:在大学生选课管理数据库在大学生选课管理数据库Student中,完成如下查询操作:中,完成如下查询操作:1查询有关学生的基本信息。查询有关学生的基本信息。2查询有关教师的基本信息。查询有关教师的基本信息。3统计被选课程的有关信息。统计被选课程的有关信息。4查询选课学生所选课程的有关信息。查询选课学生所选课程的有关信息。5查询当前任课教师的任课情况。查询当前任课教师的任课情况。语法格式:语法格式:SELECT ALL|DISTINCT select_listSELECT AL

2、L|DISTINCT select_list INTO new_table_name INTO new_table_name FROM table_list FROM table_list WHERE search_conditions WHERE search_conditions GROUP BY group_by_list GROUP BY group_by_list HAVING search_conditions HAVING search_conditions ORDER BY order_list ASC|DESC ORDER BY order_list ASC|DESC 4.2

3、 SELECTSELECT命令命令1.select_list:描述查询结果集中的各个列。它是一个用逗号分隔的表达式列表。它可以是星号(*)、表达式、列名表、变量等。“*”指源表中的所有列。2.ALL指在查询结果列表中包含所有检索到的行(包含重复行);DISTINCT指在查询结果列表中只保留不同的行(删除重复行),默认为ALL。3.INTO new_table_name:指定使用查询结果集来创建一个新表,即把查询结果集保存到一个新表中,new_table_name为新表名。4.FROM table_list:指定要查询的源表或者视图的列表,即从哪些表或视图中查询数据,table_list为源表或

4、视图的名称列表,名称之间用逗号相互隔开。5.WHERE search_conditions:指定待查询的记录所满足的范围和条件,即查询满足什么条件的记录,只有满足条件的记录才能进入查询结果集,search_conditions为查询条件表达式,缺省指表的所有记录。4.2 SELECTSELECT命令命令6.GROUP BY group_by_list:指定将查询结果集根据group_by_list列中的值进行分组,按照group_by_list列中的值将查询结果集进行分类。7.HAVING search_conditions:指定查询结果集的附加筛选条件,对由GROUP BY子句所分出的各个组

5、进行筛选,即满足什么条件的组,search_conditions为组的筛选条件表达式。8.HAVING子句必须与GROUP BY子句一起使用,它们和聚集函数一起可以实现对每个组生成一行和一个汇总值。9.ORDER BY order_list ASC|DESC:指定将查询结果集按照order_list列中的值进行排序。ASC为升序,DESC为降序,默认升序。功能:从给定的各个源数据表或视图中,查询满足指定条件的记录(的各个指定的字段表达式的值),并将查询记录结果集按指定的要求进行显示输出和其它相关的处理。4.2 SELECTSELECT命令命令4.3 单个数据表的查询单个数据表的查询 设教学数据

6、库Teaching中的学生成绩表sgrade的内容如下所示:表表4-1 sgrade(学生成绩表)(学生成绩表)4.3.1 单个数据表的简单查询单个数据表的简单查询【例例4-1】从表sgrade中查询所有学生的记录信息(即查看表sgrade的内容)。Use TeachingGoSelect *From sgrade Go【例例4-2】从表sgrade中查询前10个学生的记录。Use TeachingGoSelect top 10 *From sgradeGo【例例4-3】从表sgrade中查询计算机系的学生记录。Use TeachingGoSelect *From sgrade Where s

7、zx=计算机系Go【例例4-4】从表从表sgrade中,查询入学中,查询入学4年或年或4年以上的学生的学号、姓名年以上的学生的学号、姓名和入学时间。和入学时间。(学生自主练习,具体实现参考教材学生自主练习,具体实现参考教材P76)【例例4-5】从表从表sgrade中,查询中文、英文和数学都及格的学生的学号、中,查询中文、英文和数学都及格的学生的学号、姓名、中文、英文、数学和这姓名、中文、英文、数学和这3门课程的平均分,要求给每个待查的门课程的平均分,要求给每个待查的列或列表达式加上别名。列或列表达式加上别名。(学生自主练习,具体实现参考教材学生自主练习,具体实现参考教材P76)4.3.1 单个

8、数据表的简单查询单个数据表的简单查询 使用ORDER BY order_list ASC|DESC 子句实现。【例例4-6】从表sgrade中,按照中文、英语和数学三门课程的总成绩从高到低的顺序输出所有学生的学号、姓名、中文、英语、数学和这三门的总分。Use TeachingGoSelect xh 学号,xm 姓名,zw 中文,yw 英文,sx 数学,zw+yw+sx 总分From sgrade Order By zw+yw+sx DescGo【例例4-7】从表sgrade中,查询入学不到4年的学生的学号、姓名、入学时间、所在系和英语成绩,并将查询到的结果先按照学生的所在系升序排列,对于同一个

9、系的再按照学生的英语成绩从高到低排列。Use TeachingGoSelect xh 学号,xm 姓名,rxsj 入学时间,szx 所在系,yw 英语 From sgrade Where year(getdate()year(rxsj)=100 and Avg(yw)=80Go【例例4-18】从表从表sgrade中,统计每个年级的学生人数。中,统计每个年级的学生人数。Use TeachingGoSelect year(rxsj)年级,Count(*)学生人数 From sgrade Group By year(rxsj)Go4.3.4 查询结果的分类汇总查询结果的分类汇总【例例4-19】从表从

10、表sgrade中,统计各个系中的各个班级的学生人数和学生的英语中,统计各个系中的各个班级的学生人数和学生的英语平均成绩。平均成绩。Use TeachingGoSelect szx 系,bj 班级,Count(*)学生人数,Avg(yw)平均英语From sgrade Group By szx ,bjGo附注:查询命令中“Where 条件”与“Having 条件”的区别1.“Where 条件”是指源表或视图中待查的每条记录所满足的筛选条件,即从整个源表或视图中的所有记录中查询满足此条件的记录。2.“Having 条件”是指分组后的各个组所满足的筛选条件,即先将查到的记录集按照“GROUP BY

11、group_by_list”中group_by_list的不同值进行分组,每个组即为一行,然后再从分后的各个组中筛选满足此条件的组。4.3.4 查询结果的分类汇总查询结果的分类汇总 4.3.5 查询结果的保存查询结果的保存 使用使用INTO new_table_name 子句实现。子句实现。【例例4-20】在表sgrade中,把计算机系的学生的学号、姓名、性别、入学时间和班级这些数据信息复制到一新表computer中。Use TeachingGoSelect xh,xm,xb,rxsj,bj INTO computer From sgrade Where szx=计算机系Go【例例4-21】按

12、照中英文数学三门总成绩从高到低的顺序,把表sgrade中的中英文数学三门平均成绩在80分以上的学生的学号、姓名、中文、英语、数学和这三门课程的平均成绩,保存到一表sgrade_1中。(学生自主练习,具体实现参考教材P80)【例例4-22】从表从表sgrade中,把各个系的学生人数、班级个数、学生的平中,把各个系的学生人数、班级个数、学生的平均英语成绩,保存到一表均英语成绩,保存到一表sgrade_2中。中。Use TeachingGoSelect szx,Count(*)xsrs,Count(Distinct bj)bjgs,Avg(yw)pjyw INTO sgrade_2 From sgr

13、ade Group By szxGo4.3.5 查询结果的保存查询结果的保存 4.3.6 查询结果的合并查询结果的合并 在多个在多个Select命令之间使用集合操作符命令之间使用集合操作符UNION All 实现。实现。求多个查询结果集的并集,并于同一个窗口中输出,即在同一个窗口求多个查询结果集的并集,并于同一个窗口中输出,即在同一个窗口中同时输出多个中同时输出多个Select命令的查询结果集。命令的查询结果集。注意:注意:这些所有的这些所有的Select命令在其查询的目标项列表中,得具有相同的项数命令在其查询的目标项列表中,得具有相同的项数与相容数据类型的表达式。与相容数据类型的表达式。若保

14、存联合查询的结果集,若保存联合查询的结果集,INTO子句可包含在第一个查询命令中,子句可包含在第一个查询命令中,但不允许出现后面的查询命令中。但不允许出现后面的查询命令中。若对联合查询的结果集进行排序,必须在最后一个查询命令中带有若对联合查询的结果集进行排序,必须在最后一个查询命令中带有ORDER BY子句,该子句对整个子句,该子句对整个UNION操作结果集起作用,且排序操作结果集起作用,且排序依据的列只能为第一个查询命令中的列(表达式)。依据的列只能为第一个查询命令中的列(表达式)。【例例4-23】于同一个窗口中:按照入学时间的先后顺序,先输出表sgrade中计算机系的学生信息;同时再输出该

15、表中电气系的学生信息。Use TeachingGoSelect *From sgrade Where szx=计算机系UNIONSelect *From sgrade Where szx=电气系 Order By rxsjGo【例例4-24】从表sgrade中,查询所有学生的学号、姓名、中文、英语和数学成绩,并在最后对他们的人数和中文、英语、数学三门成绩进行总计。Use TeachingGoSelect xh 学号,xm 姓名,zw 中文,yw 英语,sx 数学 From sgrade UNIONSelect 总计,str(Count(*)+人,Sum(zw),Sum(yw),Sum(sx)F

16、rom sgradeGo4.3.6 查询结果的合并查询结果的合并【例例4-25】从表sgrade中,先把电气系所有学生的学号、姓名、性别和入学时间复制到一表e_system中;再把会计系所有学生的学号、姓名、性别和入学时间复制到一表a_system中;再把计算机系所有学生的学号、姓名、性别和入学时间复制到一表c_system中;最后在同一个窗口中,同时输出e_system、a_system和c_system这三个表的内容。(具体实现参考教材P82)4.3.6 查询结果的合并查询结果的合并 4.4 多个表的连接查询多个表的连接查询 连接查询是涉及到多个表的查询,即从多个表中查询数据,它是关系数据

17、库中最重要的查询,包括等值连接查询、非等值连接查询、自然连接查询、自身连接查询和外连接查询等。这里主要介绍等值连接查询。1连接查询:连接查询:从多个表中查询数据:(1)首先确定要查询的是哪几个表。(2)其次再确定这些表之间的联系(一般通过表的主键和外键实现),即找出这些表之间的连接条件,连接条件的一般格式为:表名1.列名=表名2.列名,其通常为“表名1.主键=表名2.外键”的形式。(3)最后使用“Where 连接条件and 其它条件”子句实现。2连接查询的执行过程:连接查询的执行过程:(1)先取表1中的第一个记录,将该记录依次与表2中的每个记录一一比较,凡是满足Where查询条件的两记录都放入

18、结果集中,不满足Where查询条件的则舍去。(2)再取表1中的下一个记录,将该记录依次与表2中的每个记录一一比较,凡是满足Where查询条件的两记录都放入结果集中,不满足Where查询条件的则舍去。(3)返回(2)继续执行,直到取完表1中的所有记录为止。注意:在多个表的连接查询中,各个表中的列引用为:表名.列名 设大学生选课管理数据库设大学生选课管理数据库Student中的各中的各个数据表内容如表个数据表内容如表4-2表表4-6所示:所示:4.4 多个表的连接查询多个表的连接查询 4.4 多个表的连接查询多个表的连接查询 在教师教课信息表在教师教课信息表tctab中:某教师号中:某教师号jsh

19、重复几次,说明该教师重复几次,说明该教师能讲授几门课程;若没有某教师号能讲授几门课程;若没有某教师号jsh,说明该教师没有能讲的课;,说明该教师没有能讲的课;某课程号某课程号kch重复几次,说明能讲授该课程的有几位教师;若没有某重复几次,说明能讲授该课程的有几位教师;若没有某课程课程kch,说明该课程无人能讲。,说明该课程无人能讲。在学生选课信息表在学生选课信息表sctab中:某学号中:某学号xh重复几次,说明该学生选重复几次,说明该学生选修了几门课程;若没有某学号修了几门课程;若没有某学号xh,说明该学生没有选课;某课程号,说明该学生没有选课;某课程号kch重复几次,说明选修该课程的有几个学

20、生;若没有某课程号重复几次,说明选修该课程的有几个学生;若没有某课程号kch,说明该课程无人选修;若没有某教师号说明该课程无人选修;若没有某教师号jsh,说明该教师当前没有任,说明该教师当前没有任课。课。4.4 多个表的连接查询多个表的连接查询【例例4-26】从大学生选课管理数据库Student中,查询所有选课学生所选修课程的信息情况。(即查询每个选课学生的学号、姓名、所属系和所选修的课程信息情况)Use StudentGoSelect stab.xh,stab.xm,stab.ssx,sctab.kch,sctab.jsh,sctab.cj From stab ,sctab Where st

21、ab.xh=sctab.xhGo【例例4-27】从大学生选课管理数据库Student中,查询所选修的课程成绩在80分以上的学生的学号、姓名、所选修课程号和成绩,并将查询结果保存到一表grade_1中。Use StudentGoSelect stab.xh,stab.xm,sctab.kch,sctab.cj INTO grade_1 From stab ,sctab Where stab.xh=sctab.xh and sctab.cj=80Go4.4 多个表的连接查询多个表的连接查询【例例4-28】从大学生选课管理数据库从大学生选课管理数据库Student中,按照选课成绩降序中,按照选课成绩

22、降序的方式输出每个选课学生的学号、姓名、所选课程名称和选课成的方式输出每个选课学生的学号、姓名、所选课程名称和选课成绩。绩。【例例4-29】从大学生选课管理数据库从大学生选课管理数据库Student中,查询每个选课学生中,查询每个选课学生的学号、姓名、所选课程名称及该课程所选的任课教师名和该选的学号、姓名、所选课程名称及该课程所选的任课教师名和该选课程的成绩。课程的成绩。(学生自主练习,具体实现参考教材P85)【例例4-30】从大学生选课管理数据库从大学生选课管理数据库Student中,统计选修了中,统计选修了“高等高等数学数学”这门课程的学生人数和他们的高等数学的平均成绩。这门课程的学生人数

23、和他们的高等数学的平均成绩。(学生自主练习,具体实现参考教材P85)【例例4-31】从大学生选课管理数据库从大学生选课管理数据库Student中,查询每个选课学生中,查询每个选课学生的学号、姓名、选修课程的门数和所选课程的平均成绩,并将查的学号、姓名、选修课程的门数和所选课程的平均成绩,并将查询结果按学生的选修课程门数从多到少排序。询结果按学生的选修课程门数从多到少排序。(学生自主练习,具体实现参考教材P85)4.4 多个表的连接查询多个表的连接查询 4.5 子查询子查询4.5.14.5.1子查询的有关概念子查询的有关概念1子查询的概念子查询的概念 在SQL语言中,把一个Selete From

24、 Where语句称为一个查询块,在一个查询块的Where条件或Having条件或字段表达式列表中嵌入另一个查询块,称为子查询(也称嵌套查询),其中被嵌套的查询块称为子查询,包含子查询的外部查询语句称为父查询。2使用子查询的要求使用子查询的要求 在查询嵌套中:(1)父查询(外部查询)是利用子查询来作为其查询条件的条件值,查询条件根据子查询的查询结果来确定外部查询的结果数据。(2)通过子查询,可用一系列简单查询来构造一个较为复杂的查询。(3)子查询中不能使用Order By子句,子查询中只能查询一个列项,子查询放在关系符的右边,且用“()”括起来。(4)子查询中一般求解方法是由内向外处理,即每个子

25、查询在其上一级查询处理之前求解,子查询的结果用于建立其父查询的查找条件。4.5.1子查询的有关概念子查询的有关概念3子查询的分类子查询的分类 子查询分为普通子查询和相关子查询,其区别:相关子查询的查询条件中引用了其父查询的字段,它把父查询的字段值作为查询的条件:(1)普通子查询的执行顺序:首先执行子查询,然后把子查询结果作为其父查询的查询条件,即:只执行一次子查询,父查询所涉及到的所有记录都与其查询结果进行比较以确定查询结果。(2)相关子查询的执行顺序:首先由父查询选取第一个记录(侯选记录)。子查询利用该侯选记录的相关字段值查询结果。父查询利用子查询返回结果判断该侯选记录是否满足其查询条件,若

26、满足,则将该侯选记录放入其结果集中,否则舍去。父查询再取下一个侯选记录,返回继续执行,直到取完父查询中的所有记录。4.5.2普通子查询的应用普通子查询的应用(1)ALL(查询块查询块)表示查询结果集中的所有值。表示查询结果集中的所有值。(2)ANY(查询块查询块)表示查询结果集中的某一个值。表示查询结果集中的某一个值。1单个数据表的普通子查询单个数据表的普通子查询【例例4-32】从上述数据库Teaching中的表sgrade中,查询英语成绩和“100001”号同学相同的所有学生的学号、姓名和英语成绩。Use TeachingGoSelect xh 学号,xm 姓名,yw 英语 From sgr

27、ade Where yw=(Select yw From sgrade Where xh=100001)Go【例例4-33】从上述数据库Teaching中的表sgrade中,统计英语成绩在所有学生的平均英语成绩之上的学生人数。Use TeachingGoSelect Count(*)From sgrade Where yw=(Select Avg(yw)From sgrade)Go【例例4-34】从上述数据库Teaching中的表sgrade中,查询系学生人数比计算机系的学生人数多的系和该系学生人数、学生的平均英语成绩。(学生自主练习,具体实现参考教材P85)【例例4-35】从上述数据库Tea

28、ching中的表sgrade中,查询中文、英语和数学三门总分最高的学生信息。Use TeachingGoSelect *From sgrade Where zw+yw+sx=ALL(Select zw+yw+sx From sgrade)Go也可写为如下代码:Use TeachingGoSelect *From sgrade Where zw+yw+sx=(Select Max(zw+yw+sx)From sgrade)Go4.5.2普通子查询的应用普通子查询的应用【例例4-36】在上述数据库Teaching中的表sgrade中,从电气系中查询英语成绩和计算机系的某个学生的英语成绩相同的学生信

29、息。Use TeachingGoSelect *From sgrade Where szx=电气系 AND yw=ANY(Select yw From sgrade Where szx=计算机系)Go附注:附注:也可写为如下代码:Use TeachingGoSelect *From sgrade Where szx=电气系 AND yw IN(Select yw From sgrade Where szx=计算机系)Go4.5.2普通子查询的应用普通子查询的应用2多个数据表的普通子查询多个数据表的普通子查询 主要是使用IN(查询块)和 NOT IN(查询块),(1)字段IN(查询块):表示只要

30、字段值在查询结果集中存在,则为真。(2)字段NOT IN(查询块):表示字段值在查询结果集中不存在,为真。【例例4-37】从大学生选课管理数据库Student中,查询所有选课的学生的信息。Use StudentGoSelect *From stab Where xh IN(Select Distinct xh From sctab)Go说明:“Distinct 字段”表示去掉重复的字段值。4.5.2普通子查询的应用普通子查询的应用【例例4-38】从大学生选课管理数据库Student中,统计各个系和各个系中没有选课的学生人数。Use StudentGoSelect ssx 系,Count(*)学

31、生人数 From stab Where xh NOT IN(Select Distinct xh From sctab)Group By ssxGo【例例4-39】从大学生选课管理数据库Student中,查询至少选修了3门课程的学生信息。Use StudentGoSelect *From stab Where xh IN(Select xh From sctab Group By xh Having Count(*)=3)Go4.5.2普通子查询的应用普通子查询的应用【例例4-40】从大学生选课管理数据库Student中,查询同时选修了C1和C3号课程的学生学号。(学生自主练习,具体实现参考教

32、材P85)【例例4-41】从大学生选课管理数据库Student中,查询同时选修了C1和C3号课程的学生信息。(学生自主练习,具体实现参考教材P85)4.5.2普通子查询的应用普通子查询的应用4.5.3相关子查询的应用相关子查询的应用 1带有带有Exists与与Not Exists的子查询的子查询(1)Exists(子查询):判断子查询的结果集是否存在(非空),若至少有一个记录则为真,否则为假。(2)Not Exists(子查询):判断子查询的结果集是否为空(不存在),若没有任何记录,则为真,否则为假。【例例4-42】从大学生选课管理数据库Student中,查询没有选修任何课程的学生信息。Use

33、 StudentGoSelect *From stabWhere Not Exists(Select *From sctab Where xh=stab.xh)Go【例例4-44】从大学生选课管理数据库Student中,查询至少选修了C1,C4和C6号这三门课程的学生信息。分析:首先将课程信息表ctab中的C1,C4,C6这三门课程的信息保存到一个临时表c146中。Use StudentGoSelect *INTO c146 From ctab Where kch IN(C1,C4,C6)Go/*再借助于临时表c146查询所需最终数据*/Select *From stabWhere Not E

34、xists(Select *From c146 Where Not Exists(Select *From sctab Where xh=stab.xh AND kch=c146.kch)GoDrop Table c146Go【例例4-43】从大学生选课管理数据库Student中,查询所有学生都选修了的课程的课程信息。(学生自主练习,具体实现参考教材P89)4.5.3相关子查询的应用相关子查询的应用 2子查询为其父查询的一个列项子查询为其父查询的一个列项【例例4-45】从大学生选课管理数据库Student中,统计所有学生人数、所有教师人数、所有课程门数、所有能够上课的教师人数、所有选课的学生人

35、数、所有选修的课程门数,当前所有任课的教师人数。Use StudentGoSelect (Select Count(*)From stab)学生人数,(Select Count(*)From ttab)教师人数,(Select Count(*)From ctab)课程门数,(Select Count(Distinct jsh)From tctab)能上课教师人数,Count(Distinct xh)选课的学生人数,Count(Distinct kch)选修的课程门数,Count(Distinct jsh)当前任课教师人数 From sctabGo4.5.3相关子查询的应用相关子查询的应用【例例

36、4-46】从大学生选课管理数据库Student中,查询每个选课学生的学号、姓名、所选课程的门数和所选课程的平均成绩。Use StudentGoSelect xh 学号,xm 姓名,(Select count(*)From sctab Where xh=stab.xh)选课门数,(Select Avg(cj)From sctab Where xh=stab.xh)平均成绩From stab Where xh IN(Select Distinct xh From sctab)Go注意:当对多个相关联的数据表进行查询数据时,若使用连接查询不易实现,则可选用子查询来实现。4.5.3相关子查询的应用相关

37、子查询的应用 4.6 在更新数据表内容命令中使用查询在更新数据表内容命令中使用查询4.6.1 4.6.1 向数据表中添加批量记录向数据表中添加批量记录语法格式:Insert into 表名表名(字段名列表字段名列表)Select 命令命令功能:把指定的Select 命令的查询结果集添加到指定表中注意:“(字段名列表)”中的各个字段与“Select 命令”中查询的各个列项,从个数、类型和顺序必须一一对应。【例例4-47】在上述数据库Teaching中的表sgrade中,先把计算机系的学生的学号、姓名、中文、英语、数学和这三门的总分复制到一表ce_system中;然后再把电气系学生的相应信息添加到

38、该表ce_system中。Use TeachingGoSelect xh,xm,zw,yw,sx,(zw+yw+sx)zf INTO ce_system From sgrade Where szx=计算机系 GoInsert Into ce_system Select xh,xm,zw,yw,sx,zw+yw+sx From sgrade Where szx=电气系Go4.6.1 向数据表中添加批量记录向数据表中添加批量记录4.6.2 DELETE命令中使用子查询命令中使用子查询【例例4-48】在上述数据库Teaching中的表sgrade中,从电气系中,把英语成绩低于全体同学的平均英语成绩的

39、学生记录删除。Use TeachingGoDelete From sgrade Where szx=电气系 AND ywANY(Select yw From sgradeWhere szx=计算机系)Go在在Delete命令中的命令中的“Where 条件条件”子句中使用子查询子句中使用子查询4.6.3 UPDATE命令中使用子查询命令中使用子查询 在UPDATE命令中的“Where 条件”子句或“SET 字段=表达式”子句中使用子查询。【例例4-50】在大学生选课管理数据库Student中,把所选修的课程成绩不及格并且是计算机系的学生的选修课成绩改为及格。Use StudentGoUpdate

40、 sctab Set cj=60 Where cj60 AND xh IN(Select xh From stab Where ssx=计算机系)Go【例例4-52】设仓库管理数据库Storagez中有两个数据表:一个是商品库存表(见表4-7),另一个是商品进货表(见表4-8)。【例例4-51】在上述数据库在上述数据库Teaching中的表中的表sgrade中,把数学不及格的中,把数学不及格的学生的数学成绩改为所有学生的平均数学成绩的学生的数学成绩改为所有学生的平均数学成绩的80%。(学生自主练习,具体实现参考教材P92)4.6.3 UPDATE命令中使用子查询命令中使用子查询Use Stor

41、agezGoUpdate 库存表 Set 单价=进货表.单价,库存量=库存量+进货表.进货量 From 进货表 Where 库存表.商品号=进货表.商品号GoInsert Into 库存表 Select *From 进货表 Where 商品号 NOT IN(Select 商品号 From 库存表)Go附注:附注:上半部分代码也可使用子查询实现:Use StoragezGoUpdate 库存表 Set 单价=(Select 单价 From 进货表 Where商品号=库存表.商品号),库存量=库存量+(Select 库存量 From 进货表Where商品号=库存表.商品号)Where 商品号 IN

42、(Select 商品号 From进货表)Go 请用进货表的内容来更新库存表的内容,即用进货表:请用进货表的内容来更新库存表的内容,即用进货表:对于库存表中已有的商品更新其价格和库存量,对于没有对于库存表中已有的商品更新其价格和库存量,对于没有(即新进)的商品将其添加到库存表中。(即新进)的商品将其添加到库存表中。4.6.3 UPDATE命令中使用子查询命令中使用子查询4.7 任务实现任务实现1从数据库从数据库Student中,查询有关学生的基本信息中,查询有关学生的基本信息(1)从数据库Student中,查询没有选课学生的信息。Use StudentGoSelect *From stab Wh

43、ere xh NOT In(Select Distinct xh From sctab)Go(2)从数据库Student中,查询选课学生的基本信息。即查询每个选课学生的学号、姓名、所选课程和该课程所选的任课教师及该课程成绩。Use StudentGoSelect stab.xh 学号,stab.xm 姓名,ctab.kcm 课程,ttab.xm 教师,sctab.cj 成绩From stab,ctab,ttab,sctabWhere stab.xh=sctab.xh AND ctab.kch=sctab.kch AND ttab.jsh=sctab.jshGo2从数据库从数据库Student中

44、,查询有关教师的基本信息中,查询有关教师的基本信息(1)从数据库Student中,统计各个系中职称在副教授以上(包括副教授)的教师人数和他们的平均年龄。(学生自主练习,具体实现参考教材P94)(2)从数据库Student中,统计各个系中的各种职称的教师人数和教师平均年龄。(学生自主练习,具体实现参考教材P94)4.7 任务实现任务实现(3)从数据库Student中,查询当前没有任课的教师的信息。Use StudentGoSelect *From ttab Where jsh NOT IN(Select Distinct jsh From sctab)Go(4)从数据库Student中,查询能任

45、课教师的基本信息。即查询每个能任课教师的编号、姓名、职称和能够担任的课程。Use StudentGoSelect ttab.jsh 教师号,ttab.xm姓名,ttab.zc 职称,ctab.kcm能任课程 From ttab ,ctab ,tctab Where ttab.jsh=tctab.jsh AND ctab.kch=tctab.kchGo4.7 任务实现任务实现(5)从数据库Student中,按照讲授的课程门数从多到少的顺序,查询当前每个任课教师的编号、正在讲授的课程门数和所教的学生人数。Use StudentGoSelect jsh 教师号,Count(Distinct kch)

46、讲课门数,Count(Distinct xh)学生人数From sctab Group By jshOrder By Count(Distinct kch)DescGo4.7 任务实现任务实现3从数据库从数据库Student中,统计被选课程的有关信息中,统计被选课程的有关信息(1)从数据库Student中,统计所有选课的学生人数、所有选修的课程门数、当前所有任课的教师人数。Use StudentGoSelect Count(Distinct xh)选课的学生人数,Count(Distinct kch)选修的课程门数,Count(Distinct jsh)任课的教师人数 Form sctabGo

47、(2)从数据库Student中,查询每门被选课程的课程号、课程名、选修该课程的学生人数和他们(选修这门课程)的平均成绩。Use StudentGoSelect ctab.kch 课程号,ctab.kcm 课程名,Count(*)选修人数 ,Avg(sctab.cj)课程平均成绩 From ctab ,sctab Where ctab.kch=sctab.kch Group By ctab.kch ,ctab.kcmGo4.7 任务实现任务实现4从数据库从数据库Student中,查询选课学生所选课程的有关信息中,查询选课学生所选课程的有关信息(1)从数据库Student中,查询每个选课学生的学号

48、、选修课程的门数及所选课程的平均成绩,并根据其平均成绩计算该学生的成绩等级(优秀、良好、中等、合格、不合格),并将查询结果按学生的选修课程门数从多到少排序。(学生自主练习,具体实现参考教材P95)(2)从数据库Student中,查询每个选课学生的学号、姓名和选修课程的门数、平均成绩、平均成绩的排名,同时把没有选课学生的相应信息加到其后面。(学生自主练习,具体实现参考教材P96)4.7 任务实现任务实现5从数据库从数据库Student中,查询当前任课教师的任课情况中,查询当前任课教师的任课情况(1)从数据库Student中,查询“0003”号教师的任课情况。即查询该教师正在讲授的课程门数、所教的

49、学生人数和正在讲授课程的总酬金。Use StudentGoSelect Count(Distinct kch)讲课门数,Count(Distinct xh)学生人数,(Select Sum(cj)From tctab Where jsh=0003 AND kch IN(Select Distinct kch From sctab Where jsh=0003)讲课酬金 From sctab Where jsh=0003Go4.7 任务实现任务实现(2)从数据库Student中,查询当前每个任课教师的任课情况。即查询当前每个任课教师的编号、姓名、职称和正在讲授的课程门数和所教的学生人数。方法方法

50、1:使用连接查询实现Use StudentGoSelect ttab.jsh 教师号 ,ttab.xm 姓名,ttab.zc 职称,Count(DISTINCT sctab.kch)讲课门数 ,Count(DISTINCT sctab.xh)学生人数 From ttab ,sctab Where ttab.jsh=sctab.jsh Group By ttab.jsh ,ttab.xm ,ttab.zcGo方法方法2:使用子查询实现(学生自主练习,具体实现参考教材P97)4.7 任务实现任务实现(3)从数据库Student中,查询当前每个任课教师的任课情况。要求只查询当前每个任课教师的编号、姓

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 大学
版权提示 | 免责声明

1,本文(《SQL server数据库》课件第4章 数据库的查询.ppt)为本站会员(momomo)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|