《数据库基础》项目二 数据库的查询_第1页
《数据库基础》项目二 数据库的查询_第2页
《数据库基础》项目二 数据库的查询_第3页
《数据库基础》项目二 数据库的查询_第4页
《数据库基础》项目二 数据库的查询_第5页
已阅读5页,还剩122页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据库基础1任务七、SQL基本查询2任务八、排序orderby与分组groupby项目二3任务九、聚合数据查询与分组统计数据4任务十、连接查询5任务十一、组合查询6任务十二、插入、更新知识储备任务七SQL查询在SQLServer2005中,master数据库是默认的当前数据库,所以在编写操作SQL语句时,先使用USE语句打开要使用的表所在的数据库,否则就会出现“对象名无效”提示。任务七、SQL查询知识储备一、单表查询任务七SQL查询1.通配符“*”的使用在SELECT语句中,可以使用通配符“*”来显示所有的字段。2.用AS重新指定返回字段的名字。3.多个字段拼接如果需要将多个字段拼接成一个字段,可以使用“+”连接,使用函数rtrim去掉字段右侧的空格。知识储备任务七SQL查询4.WHERE子句用关键字WHERE子句来说明查询条件,紧跟在FROM子句的后面。条件表达式中有如下条件运算符,关系运算符:=,<,>,<=,>=,<>,!=;逻辑运算符NOT,AND,OR;其他运算符:IN,NOTIN,BETWEEN,NOTBETWEEN,LIKE,NOTLIKE,ISNULL,ISNOTNULL,EXISTS,ANY,SOME。5.查询常用的通配符常用的通配符见表7-1。知识储备任务七SQL查询知识储备任务七SQL查询在sqlsever中nchar,nvarchar使用的是unicode字符集。而char,varchar使用的是ASCII字符集。规定:当unicode数据(nchar或nvarchar)与like一起使用时,尾随空格有意义。但对非unicode数据,尾随空格无意义。而ASCII中char字符串后面的空格没有意义,即char和varchar尾部空格无意义。数据库中“姓名”列的数据类型,若数据类型为nchar(8),所以要查询姓“王”且单名的学生例如“王石”情况,则查询语句应该为:SELECT*FROM学生信息表WHERE姓名LIKE王_——王下划线后面是6个空格,要与nchar的长度一致。任务描述任务二创建学生班级管理数据表SQL语句基本查询查询数据库information10da5da6中的数据表“考工成绩”的所有内容;查询考工应知成绩大于90分的学生名单,并显示出该名学生的应会成绩;查询姓王的学生的考工成绩;计算学生的总成绩=应知*50%+应会*50%。实训操作任务七SQL查询(1)连接数据库information10da5da6,在工具栏中单击按钮,在右边的查询窗口中,输入查询的语句,如图7-1所示。(2)在查询的窗口中输入“select*from考工成绩表”,单击按钮,可以看出考工成绩表的所有学生记录信息,如图7-2所示。(3)查询考工应知成绩大于90分的学生名单,在新建查询执窗口中输入“select序号,姓名,应知,应会from考工成绩表where应知>90”,执行查询,结果如图7-3所示。(4)查询姓王的学生的考工成绩。在新建查询执窗口中输入“select*from考工成绩表where姓名like王%”,执行查询,如图7-4所示。实训操作任务七SQL查询(5)计算学生的总成绩=应知*50%+应会*50%。在新建查询执窗口中输入“select姓名,准考证号,应知,应会,应知*0.5+应会*0.5as总成绩from考工成绩表”。执行查询,如图7-5所示。实训操作任务七SQL查询实训操作任务七SQL查询实训操作任务七SQL查询实训操作任务七SQL查询实训操作任务七SQL查询1任务七、SQL基本查询2任务八、排序orderby与分组groupby

项目二3任务九、聚合数据查询与分组统计数据4任务十、连接查询5任务十一、组合查询6任务十二、插入、更新知识储备一、排序ORDERBY任务八排序orderby与分组groupby在SQLServer2005中,为了方便查看查询结果,按某种规律排序,可使用ORDERBY子句来排序数据,还可以进行多字段排序。任务八、排序orderby与分组groupby知识储备任务八排序orderby与分组groupby【例1】从学生表student中按照成绩grade升序排序。SELECT*FROMstudentORDERBYgrade也就是按照成绩grade升序排序,默认排序方式是升序,功能等于在字段名后加上升序关键字ASC,ORDERBY后的字段名可以不出现在SELECT字段列表中,如果要降序排列,在字段名后加上DESC。例如:ORDERBYgradeDESC知识储备任务八排序orderby与分组groupby数据分组经常运用在统计汇总中,运用GROUPBY可以进行分组,如果要将满足条件的分组查询出来,还需要使用HAVING子句。需要注意的是,使用GROUPBY时,不要使用SELECT*语句,否则有“列表中的列无效,因为该列没有包含在聚合函数或GROUPBY子句中”错误提示。如果SELECT子句后是字段名列表,而这些字段名又不在聚合函数中,则应当在GROUPBY子句中列出所有这些字段名,这时分组就是这些字段的组合,而并非单个字段分组。二、分组GROUPBY知识储备任务八排序orderby与分组groupby【例2】从学生表student中按照性别sex分组,统计男女生人数。SELECTsex,COUNT(*)As人数FROMstudentGROUPBYsex对已经存在的表,运用INTO子句可以创建一张新表,此新表存储在数据库中,不会显示在屏幕上,因此,建立后可以用SELECT显示全部记录。若INTO后的表名前有“#”号,表示该新表为临时表,退出SQLServer后,不保存该新表。三、INTO字句和TOP字句知识储备任务八排序orderby与分组groupby【例3】从学生表student中按照系别,把信息工程系的学生记录单独生成一张新表“信息工程系学生表”。SELECT*INTO信息工程系学生表FROMstudentWHERE系别=‘信息工程系’SELECT*FROM信息工程系学生表TOP子句可以限定显示前n条记录。知识储备任务八排序orderby与分组groupby【例4】显示学生表student中前10条记录。SELECTTOP3*FROMstudent任务描述任务八排序orderby与分组groupby在数据库information09da2中,利用排序ORDERBY和分组GROUPBY进行SQL查询操作。按学生的姓名拼音排序,显示学生的序号、姓名、性别、户口所在地。分别统计男女在校住宿生人数和住宿生总数。统计户口在同一城市的学生人数,并按统计的人数从少到多排序。实训操作任务八排序orderby与分组groupby(1)排序orderby操作,在数据库information09da2,按学生的姓名拼音排序查询,显示学生的序号、姓名、邮编、性别、户口所在地。在新建查询执窗口中输入“select序号,姓名,邮编,性别,户口所在地from户口和住宿表orderby姓名”,如图8-1所示。(2)统计在校住宿生人数,在新建查询执窗口中输入“selectcount(是否住宿)as住宿生总数from户口和住宿表where是否住宿=是”,如图8-2所示。实训操作任务八排序orderby与分组groupby(3)统计住宿学生总数和不住宿学生总数,总学生数。在新建查询执窗口中输入:selectcount(casewhen是否住宿=是then1end)as住宿生总数,count(casewhen是否住宿=否then1end)as不住宿生总数,count(是否住宿)as学生总数from户口和住宿表执行结果如图8-3所示。实训操作任务八排序orderby与分组groupby(4)分别统计男生住宿情况和女学生住宿情况,统计学生总数。在新建查询执窗口中输入:selectcount(casewhen性别=男and是否住宿=是then1end)as男生住宿生总数,count(casewhen性别=男and是否住宿=否then1end)as男生不住宿生总数,count(casewhen性别=女and是否住宿=是then1end)as女生住宿生总数,count(casewhen性别=女and是否住宿=否then1end)as女生不住宿生总数,count(是否住宿)as学生总数from户口和住宿表。执行结果如图8-4所示。实训操作任务八排序orderby与分组groupby实训操作任务八排序orderby与分组groupby实训操作任务八排序orderby与分组groupby实训操作任务八排序orderby与分组groupby实训操作任务八排序orderby与分组groupby1任务七、SQL基本查询2任务八、排序orderby与分组groupby

项目二3任务九、聚合数据查询与分组统计数据4任务十、连接查询5任务十一、组合查询6任务十二、插入、更新知识储备任务九聚合数据查询与分组统计数据分别使用SQLServer2005数据库管理系统和SQL语句创建数据库和表。下面简单介绍SQLServer中一些常用的对象,如表、视图、索引、存储过程、触发器等。任务九、聚合数据查询与分组统计数据知识储备一、聚合数据查询任务九聚合数据查询与分组统计数据GROUPBY子句可以将查询结果按属性列或属性列组合在行的方向上进行分组,每组在属性列或属性列组合上具有相同的聚合值。常用的聚合函数如表9-1所示。知识储备任务九聚合数据查询与分组统计数据【例1】查询求学号为001学生的总分和平均分。程序清单如下:SELECTSUM(score)AS总分,AVG(score)AS平均分FROMSCWHEREsno=001【例2】查询求信息工程系学生的总数。SELECTCOUNT(sno)FROMSWHEREdept=信息工程系知识储备任务九聚合数据查询与分组统计数据【例3】查询求学校中共有多少个系。程序清单如下:SELECTCOUNT(DISTINCTdept)AS系部个数FROMS注意:加入关键字DISTINCT后表示消去重复行,可计算字段“dept”不同值的数目。COUNT函数对空值不计算,但对零进行计算。知识储备二、分组统计数据任务九聚合数据查询与分组统计数据在分组查询中,只要表达式中不包括聚合函数,就可以按该表达式分组GROUPBY子句还可以与WHERE子句配合使用,WHERE子句先于GROUPBY子句执行,将满足条件的记录保留下来,然后,再按照GROUPBY子句分成小组。若在分组后还要按照一定的条件进行筛选,则需要使用HAVING子句。知识储备任务九聚合数据查询与分组统计数据【例4】查询每位学生的学号及其选课的门数。程序清单如下:SELECTcno,COUNT(*)AS选课门数FROMSCGROUPBYcnoGROUPBY子句按cno的值分组,所有具有相同cno的元组为一组,对每一组使用函数COUNT进行计算,统计出各位学生选课的门数。知识储备任务九聚合数据查询与分组统计数据【例5】在分组查询中使用WHERE条件,查询计算机系的学生学号及平均成绩。程序清单如下:SELECTsno,AVG(score)ASaveragescoreFROMSCWHEREsno=(SELECTsnoFROMSWHEREdept=’计算机’)GROUPBYsnoORDERBYsno知识储备任务九聚合数据查询与分组统计数据【例6】在分组查询中使用HAVING条件,查询平均成绩大于85分的学生学号及平均成绩。程序清单如下:SELECTsno,AVG(score)ASaveragescoreFROMSCGROUPBYsnoHAVINGAVG(score)>85知识储备任务九聚合数据查询与分组统计数据【例7】查询选课在三门以上且各门课程均及格的学生的学号及其总成绩,查询结果按总成绩降序列出。SELECTsno,SUM(score)AStotalscoreFROMSCWHEREscore>=60GROUPBYsnoHAVINGCOUNT(*)>=3ORDERBYSUM(score)DESC知识储备三、反转查询结果任务九聚合数据查询与分组统计数据当查询的结果不是理想的行列显示时,可以使用反转查询转换。可以利用COUNT函数忽略NULL值的规则,借助于CASEEND表达式实现。【例8】查询每系学生的男生和女生人数得到结果如表9-2所示。知识储备任务九聚合数据查询与分组统计数据知识储备任务九聚合数据查询与分组统计数据要想得到如表9-3所示的表格。知识储备任务九聚合数据查询与分组统计数据查询语句如下:SELECTdept,COUNT(CASEWHENsex=’男’THEN1ELSENULLEND)AS男生人数,COUNT(CASEWHENsex=’女’THEN1ELSENULLEND)AS女生人数FROMstudentGROUPBYdept知识储备四、HAVING子句任务九聚合数据查询与分组统计数据在SQL中增加HAVING子句原因是,WHERE关键字无法与统计函数一起使用。如果只想要看到分组的统计结果,不需要全部的统计信息。【例9】查询信息工程系和机电工程系的学生数。SELECTdept,COUNT(*)AS人数FORMstudentGROUPBYdeptHAVINGdeptIN(‘信息工程’,’机电工程’)知识储备任务九聚合数据查询与分组统计数据【例10】订单表如表9-4所示,有商品编号Id、订单日期OderDate、订单价格OrderPrice和订单的顾客姓名。知识储备任务九聚合数据查询与分组统计数据若希望查找订单总金额少于2000的客户。则使用如下SQL语句:SELECTCustomer,SUM(OrderPrice)FROMOrdersGROUPBYCustomerHAVINGSUM(OrderPrice)<2000若希望查找客户“李其福”或“孔平俊”拥有超过2500的订单总金额。则在SQL语句中增加了WHERE子句:SELECTCustomer,SUM(OrderPrice)FROMOrdersWHERECustomer=李其福ORCustomer=孔平俊GROUPBYCustomerHAVINGSUM(OrderPrice)>2500知识储备任务九聚合数据查询与分组统计数据对于WHERE和HAVING,HAVING子句主要用于筛选组,而WHERE子句用于筛选记录;HAVING子句中可以运用聚合函数,而WHERE子句不能运用聚合函数;HAVING子句不能出现既不被GROUPBY子句包含的字段,又不被聚合函数包含的字段,而WHERE子句中可出现所需的任意字段。通过上例可以知道使用的顺序一般为先WHRER,再GROUPBY分组,最后是HAVING子句分组条件。任务描述任务九聚合数据查询与分组统计数据对学生成绩的聚合数据查询,利用数据库information10da5da6,根据数据表“信息10大5”,对表中的数据进行聚合数据查询;利用数据库information09da2中的数据表“户口和住宿表”,进行分组统计查询。实训操作任务九聚合数据查询与分组统计数据(1)聚合数据查询,利用数据库information10da5da6中的数据表“信息10大5”,表中有课程为“数据库”的学生成绩,查询该班学生中该门成绩大于班级平均成绩的学生的序号,姓名和该门课的成绩。在新建查询执窗口中输入:select序号,姓名,数据库from信息10大5where数据库>(selectavg(数据库)from信息10大5)。结果如图9-1所示。实训操作任务九聚合数据查询与分组统计数据实训操作任务九聚合数据查询与分组统计数据(2)利用数据表“信息10大5”,有三门课程:数据库,文档编辑,电子表格。查询三门课程的最高分的学生序号,姓名和该门课的成绩。在新建查询执窗口中输入:——查询数据库课程的最高分的学生姓名select序号,姓名,数据库from信息10大5where数据库=(selectmax(数据库)from信息10大5)实训操作任务九聚合数据查询与分组统计数据——查询文档编辑课程的最高分的学生姓名select序号,姓名,文档编辑from信息10大5where文档编辑=(selectmax(文档编辑)from信息10大5)——查询电子表格课程的最高分的学生姓名select序号,姓名,电子表格from信息10大5where电子表格=(selectmax(电子表格)from信息10大5)结果如图9-2所示。实训操作任务九聚合数据查询与分组统计数据实训操作任务九聚合数据查询与分组统计数据(3)分组统计数据,利用数据库information09da2中的数据表“户口和住宿表”,查询每个宿舍的学生数,要考虑到有部分学生不住宿,该字段值为null,住宿的学生有宿舍号和床箱号,例如:202#1表示202宿舍1号床铺1号箱子。利用substring(宿舍#床箱号,1,3)进行分组。在新建查询执窗口中输入:——查询宿舍的学生数selectsubstring(宿舍#床箱号,1,3)as宿舍号,count(宿舍#床箱号)as宿舍人数from户口和住宿表where宿舍#床箱号isnotnullgroupbysubstring(宿舍#床箱号,1,3)结果如图9-3所示。实训操作任务九聚合数据查询与分组统计数据实训操作任务九聚合数据查询与分组统计数据(4)having子句的用法,学校男生宿舍共有4张床铺,女生宿舍共有6张床铺。现查询男女生宿舍已经住满的宿舍号和人数。在新建查询执窗口中输入:——查询男女生宿舍学生已经住满的宿舍号和人数selectsubstring(宿舍#床箱号,1,3)as宿舍号,count(宿舍#床箱号)as宿舍人数from户口和住宿表where宿舍#床箱号isnotnullgroupbysubstring(宿舍#床箱号,1,3),性别having((count(宿舍#床箱号)>=4and性别=男)or(count(宿舍#床箱号)>=6and性别=女))结果如图9-4所示。实训操作任务九聚合数据查询与分组统计数据1任务七、SQL基本查询2任务八、排序orderby与分组groupby

项目二3任务九、聚合数据查询与分组统计数据4任务十、连接查询5任务十一、组合查询6任务十二、插入、更新知识储备任务十连接查询在SQLServer2005中,数据表之间的联系是通过表的字段值来体现的,这种字段称为连接字段。连接操作的目的就是通过加在连接字段的条件将多个表连接起来,以便从多个表中查询数据。当查询同时涉及两个以上的表时,称为连接查询。任务十、连接查询知识储备一、等值连接与非等值连接任务十连接查询连接条件的一般格式为:[<表名1>.]<列名1><比较运算符>[<表名2>.]<列名2>其中,比较运算符主要有:=、>、<、>=、<=、!=。当比较运算符为“=”时,称为等值连接,其他情况为非等值连接。【例1】现有学生表student和选课表sc,分别如表10-1和表10-2所示。知识储备任务十连接查询知识储备任务十连接查询查询每个学生及其选修课程的情况。SELECTstudent.*,sc.*FROMstudent,scWHEREstudent.sno=sc.sno查询结果如表10-3所示。自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,而等值连接并不去掉重复的属性列。知识储备任务十连接查询知识储备任务十连接查询【例2】对上例用自然连接完成查询。SELECTstudent.sno,sname,ssex,sage,sdept,cno,scoreFROMstudent,scWHEREstudent.sno=sc.sno查询结果如表10-4所示。知识储备任务十连接查询知识储备任务十连接查询【例3】查询张亮同学所选修的课程号为2的课程成绩。SELECTstudent.sno,sname,o,scoreFROMstudent,scWHERE(student.sno=sc.sno)AND(student.sname=张亮)AND(o=2)查询结果为表10-5所示。知识储备任务十连接查询知识储备任务十连接查询【例4】现有学生表student和选课表sc,如表101和102所示,课程表c如表10-6所示。知识储备任务十连接查询查询所有选课学生的学号、姓名、选课名称及成绩。SELECTstudent.sno,sname,cname,scoreFROMstudent,c,scWHEREstudent.sno=sc.snoANDo=o查询结果为表10-7所示。本例涉及三个表,WHERE子句中有两个连接条件。当有两个以上的表进行连接时,称为多表连接。知识储备任务十连接查询知识储备二、自身连接任务十连接查询当一个表与其自已进行连接操作时,称为表的自身连接。要查询的内容均在同一表中,可以将表分别取两个别名,一个是x,一个是y。将x,y中满足查询条件的行连接起来。这实际上是同一表的自身连接。【例5】现有教师工资表TeacherSalary如表10-8所示,查询所有比教师“李强”工资高的教师姓名、性别、工资和李四的工资。知识储备任务十连接查询知识储备任务十连接查询程序清单如下:SELECTAS姓名,x.salaryAS工资,y.salaryAS李强工资FROMTeacherSalaryasx,TeacherSalaryasyWHEREx.salary>y.salaryAND=李强知识储备任务十连接查询需要给表起别名以示区别,由于所有属性都是同名属性,因此必须使用别名前缀。查询结要如表10-9所示。知识储备三、外连接任务十连接查询普通连接操作只输出满足连接条件的元组;外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一起输出。可以分为左外连接和右外连接,左外连接的结果集包括LEFTOUTER子句或LEFTOUTERJOIN中指定的左表的所有行,而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。右外连接RIGHTJOIN或RIGHTOUTERJOIN将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。知识储备任务十连接查询【例6】在学生表10-1中增加两个学生,分别为“刘艳”和“刘希妍”,如表10-10所示。选课表sc如表10-2所示。知识储备任务十连接查询左外连接查询学生表student各选课表sc。SELECTstudent.sno,sname,ssex,sage,sdept,cno,scoreFROMstudentLEFTOUTERJIONscON(student.sno=sc.sno)执行结果如表10-11所示。知识储备任务十连接查询知识储备四、嵌套查询任务十连接查询一个SELECTFROMWHERE语句称为一个查询块,将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询为嵌套查询。1.带有IN的子查询子查询在上一级查询处理之前求解,子查询的结果用于建立父查询的查找条件。知识储备任务十连接查询【例7】运用表101和表102,查询选修课程号为2的学生名单。SELECTsnameFROMstudentWHEREsnoIN(SELECTsnoFROMscWHEREcno=2)知识储备任务十连接查询【例8】查询与“陈路”同系的学生名单若用分步完成:(1)确定“陈路”所在的系名:SELECTsdeptFROMstudentWHEREsname=陈路结果为“计算机”(2)查找所有在“计算机”学生名单:SELECTsno,sname,sdeptFROMstudentWHEREsdept=计算机结果如表10-12所示。知识储备任务十连接查询知识储备任务十连接查询把前面两步合并在一起的查询为:SELECTsno,sname,sdeptFROMstudentWHEREsdeptIN(SELECTsdeptFROMstudentWHEREsname=陈路)本例的IN可以用“=”代替。知识储备任务十连接查询2.带有比较运算符的子查询【例9】查询超出课程平均成绩的学生号和课程号。SELECTsno,cnoFROMSCxWHEREscore>=(SELECTavg(score)FROMSCyWHEREy.sno=x.sno)知识储备任务十连接查询

3.带有ANY、SOME或ALL的子查询【例10】查询其他系中比计算机系所有学生年龄都要小的学生姓名和年龄。SELECTsname,sageFROMstudentWHEREsage<ALL(SELECTsageFROMstudentWHEREsdept=计算机)ADsdept<>计算机知识储备任务十连接查询运用上述的表101,可以查询出两位“张月”和“刘希妍”的符合条件,她们的年龄都比计算机系所有学生的年龄都要小。用聚合函数改写为:SELECTsname,sageFROMstudentWHEREsage<ALL(SELECTMIN(sage)FROMstudentWHEREsdept=计算机)ANDsdept<>计算机知识储备任务十连接查询4.带EXISTS的子查询不需要返回具体的查询数据,而只关心是否有返回值,即返回True或False。【例11】运用表101和102,查询没有选修1号课程的学生姓名。SELECTsnameFROMstudentWHERENOTEXISTS(SELECT*FROMscWHEREsno=student.snoANDcno=1)任务描述任务十连接查询数据库ssts中有三个数据表“学生表”“课程表”“选课表”,三表连接查询。查询信息工程系所有学生的成绩,要求输出学号、姓名、课程名、成绩,并按成绩降序排序;查询所有成绩小于60分的学生,要求输出学号、姓名、课程名、成绩,并按学号和课程号升序、成绩降序排序;查询各课程均分,并按均分降序排序。实训操作任务十连接查询(1)连接数据库ssts,打开数据库的三张表“学生表”“课程表”“选课表”,了解各个表的字段名称,如图10-1所示。(2)根据“学生表”“课程表”“选课表”三张表,查询信息工程系所有学生的成绩,要求输出学号、姓名、课程名、成绩,并按成绩降序排序。在新建查询执窗口中输入:——查询信息工程系所有学生的成绩,要求输出学号、姓名、课程名、成绩,并按成绩降序排序select学生表,学号,姓名,课程名,成绩from学生表,课程表,选课表where系名=信息工程系and学生表.学号=选课表.学号and课程表.课程号=选课表.课程号orderby成绩desc。运行结果如图10-2所示。实训操作任务十连接查询实训操作任务十连接查询实训操作任务十连接查询(3)上面使用的是where语句,如果使用连接查询,则使用innerjoin…on…语句。根据“学生表”“课程表”“选课表”三张表,查询机电工程系所有学生的成绩,要求输出学号、姓名、课程名、成绩,并按成绩降序排序。在新建查询执窗口中输入:——查询机电工程系所有学生的成绩,要求输出学号、姓名、课程名、成绩,并学号升序排序select学生表.学号,姓名,课程名,成绩from(选课表innerjoin学生表on选课表.学号=学生表.学号)innerjoin课程表on选课表.课程号=课程表.课程号where系名=机电工程系orderby学号运行结果如图10-3所示。实训操作任务十连接查询实训操作任务十连接查询(4)根据“学生表”“课程表”“选课表”三张表,查询所有成绩小于60分的学生,要求输出学号、姓名、课程名、成绩,并按学号和课程号升序、成绩降序排序。在新建查询执窗口中输入:——查询所有成绩小于60分的学生,要求输出学号、姓名、课程名、成绩,并按学号和课程号升序、成绩降序排序select学生表.学号,姓名,课程名,成绩from(选课表innerjoin学生表on选课表.学号=学生表.学号)innerjoin课程表on选课表.课程号=课程表.课程号where成绩<60orderby学生表.学号,课程表.课程号asc,成绩desc运行结果如图10-4所示。实训操作任务十连接查询(5)查询学生所学习的各个课程均分,并按均分降序排序。在新建查询执窗口中输入:——查询各课程均分,并按均分降序排序。select课程表.课程号,课程表.课程名,avg(成绩)as平均成绩from课程表,选课表where课程表.课程号=选课表.课程号groupby课程表.课程号,课程表.课程名orderby平均成绩desc运行结果如图10-5所示。实训操作任务十连接查询实训操作任务十连接查询1任务七、SQL基本查询2任务八、排序orderby与分组groupby

项目二3任务九、聚合数据查询与分组统计数据4任务十、连接查询5任务十一、组合查询6任务十二、插入、更新知识储备任务十一组合查询在SQLServer2005中,将多个查询的结果放在一起,以一个查询结果的形式显示出来,则可以使用UNION关键字把多个SELECT连接起来。每个SELECT查询语句应当有相同数量的字段,若字段个数不等,可以使用NULL来代替;每个查询语句中相应的字段的类型必须相互兼容,若不兼容,可使用类型转换函数强制转换字段类型。UNION缺省在合并结果集后消除重复项,UNIONALL指定在合并结果集后保留重复项。UNION结果集中的列名总是等于UNION中第一个SELECT语句中的列名。任务十一、组合查询知识储备任务十一组合查询【例1】网络售书情况表InternetInfo如表11-1所示,实体店面售书表StoreInfo如表11-2所示,现在需要查询所有售书的订单日期。知识储备任务十一组合查询SELECTOrderDateFROMInternetInfoUNIONSELECTOrderDateFROMStoreInfo操作结果如表11-3所示。SELECTOrderDateFROMInternetInfoUNIONALLSELECTOrderDateFROMStoreInfo操作结果如表11-4所示。知识储备任务十一组合查询任务描述任务十一组合查询利用数据库ssts中数据表“信息0901班成绩”和“信息0902班成绩”进行组合查询。查询两个班级总分高于320分的学生的学号、姓名和成绩。查询两个班级成绩小于60分不及格的学生名单。实训操作任务十一组合查询(1)连接数据库ssts,利用数据表“信息0901班成绩”和“信息0902班成绩”,用union进行组合查询。查询两个班级总分高于320分的学生的学号、姓名和成绩。在新建查询执窗口中输入:select学号,姓名,总分from信息0901班成绩where总分>320unionselect学号,姓名,总分from信息0902班成绩where总分>320结果如图11-1所示。实训操作任务十一组合查询实训操作任务十一组合查询(2)查询两个班级“网络安全”课程成绩小于60分的学生名单。要求输出学号、姓名和课程的成绩。在新建查询执窗口中输入:select学号,姓名,网络安全from信息0901班成绩where网络安全<60unionselect学号,姓名,网络安全from信息0902班成绩where网络安全<60运行结果如图11-2所示。实训操作任务十一组合查询1任务七、SQL基本查询2任务八、排序orderby与分组groupby

项目二3任务九、聚合数据查询与分组统计数据4任务十、连接查询5任务十一、组合查询6任务十二、插入、更新知识储备任务十二插入、更新在SQLServer2005中,有时为了方便,需要将查询结果保存起来。在SELECT子句的后面,FROM子句的前面加上了一个INTO关键字,关键字的后面紧跟用于保存查询结果的新表的名字。SELECT*(或字段列表)INTO新表名FROM表名任务十二、插入、更新知识储备一、INSERT语句任务十二插入、更新INSERT语句用于向数据库表或者视图中加入一行数据。INSERT语句的语法形式如下:INSERT[INTO]table_or_view[(column_list)]VALUES(data_values)其中,table_or_view是指要插入新记录的表或视图,column_list是可选项,指定待添加数据的列,VALUES子句指定待添加数据的具体值。列名的排列顺序不一定要和表定义时的顺序一致。但当指定列名表时,VALUES子句值的排列顺序必须和列名表中的列名排列顺序一致,个数相等,数据类型一一对应。知识储备任务十二插入、更新在进行数据插入操作时须注意以下2点:(1)在VALUES子句中,必须用逗号将各个数据分开,字符型数据要用单引号括起来。(2)有时并不需要向表中插入完整的行,而需要将数据只插入到几个指定的字段内,则在表名后加上字段列表,且VALUES子句中值的排列顺序要和表中各属性列的排列顺序一致。知识储备任务十二插入、更新【例1】将姓名为夏总的相关信息插入到表中。INSERTINTOstudent(sno,sname,sex,birth,depart)VALUES(0025,夏总,男,1958-10-01,信息工程系)(3)将VALUES子句中的值按照INTO子句中指定列名的顺序插入到表中。(4)对于INTO子句中没有出现的列,则插入的新记录在这些列上将取空值。但在表定义时有NOTNULL约束的属性列不能取空值,例如学号不能为空。知识储备一、UPDATE语句任务十二插入、更新UPDATE语句用于修改数据库表或视图中特定记录或者字段的数据,其语法形式如下:UPDATEtable_or_viewSET<column>=<expression>[,<column>=<expression>>]…[WHERE<search_condition>]其中:table_or_view是指要修改的表或视图;SET子句给出要修改的列及其修改后的值,其中column为要修改的列名,expression为其修改后的值;WHERE子句指定待修改的记录应当满足的条件,WHERE子句省略时,则修改表中的所有记录。知识储备任务十二插入、更新【例2】带有WHERE条件的修改语句。UPDATEstudent.addressSETcity=SuzhouWHEREstudent.address=1【例3】

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论