数据库数据查询应用实践资料大全

上传人:宝**** 文档编号:243723295 上传时间:2024-09-29 格式:PPT 页数:65 大小:502KB
返回 下载 相关 举报
数据库数据查询应用实践资料大全_第1页
第1页 / 共65页
数据库数据查询应用实践资料大全_第2页
第2页 / 共65页
数据库数据查询应用实践资料大全_第3页
第3页 / 共65页
点击查看更多>>
资源描述
*,Fill in,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,第五章 数据库数据查询应用实践(,1,),1,内 容,Select,语句,上机实验,2,在,SQL Server,中,对数据库的查询使用,SELECT,语句,。,SELECT,语句功能非常强大,使用灵活,可以对图书管理数据库进行各类查询。,图书管理数据库查询,3,在进行一些简单的查询操作时,经常需要从单个表中提取数据。,【,情景,1】,从图书管理数据库,MBOOK,中查询出所有读者的信息。,在“,SQL Server Management Studio,”中单击“新建查询”按钮新建一个查询窗口,在窗口中输入如下语句:,USE MBOOK,GO,SELECT *,FROM TReader,从单个表中查询数据,4,执行完以上语句后,“,SQL Server Management Studio,”的结果窗口中将显示,TReader,表中的所有读者信息,如图,5.1,所示。,图,5.1,查询所有读者的信息,从单个表中查询数据,5,说明:在以上,SQL,语句中,通过,SELECT,关键字,选择列,,“,*,”表示查询一个表或视图中的所有列。,FROM,子句,用于指定要查询的对象,这里是从表,TReader,中查询。,【,情景,2】,查询姓名为“王林”的读者的借书证号、专业和借书量。,新建一个查询窗口,输入并执行以下语句:,SELECT,借书证号,专业,借书量,FROM TReader,WHERE,姓名,=,王林,执行结果如下所示:,说明:在以上语句中,,SELECT,关键字后列出了要查询的列,使用,WHERE,子句,指定要查询的条件。,从单个表中查询数据,6,【,情景,3】,计算“,SQL Server,实用教程(第,3,版)”借出多少本。,SELECT,复本量,-,库存量,FROM TBook,WHERE,书名,= SQL Server,实用教程(第,3,版),执行结果如下所示:,从单个表中查询数据,7,【,情景,4】,模糊查询书名中有“,SQL Sever,”字样的图书的书名、作译者和出版社。查询结果中将这三列的标题更改为,BookName,、,Author,和,Press,。,SELECT,书名,AS BookName,作译者,AS Author,出版社,AS Press,FROM TBook,WHERE,书名,LIKE %SQL Server%,执行结果如下所示:,从单个表中查询数据,8,【,情景,5】,查询电子工业出版社出版的作者为郑阿奇的图书信息。,SELECT *,FROM TBook,WHERE,出版社,=,电子工业出版社,AND,作译者,=,郑阿奇,执行结果如下所示:,从单个表中查询数据,9,【,情景,6】,查询,TReader,表中第,6,到,10,行的读者记录。,SELECT TOP 5 *,FROM TReader,WHERE,借书证号,NOT IN (,SELECT TOP 5,借书证号,FROM TReader,),执行结果如下所示:,从单个表中查询数据,10,【,情景,1】,查找读者“,081101,”对“,SQL Server,实用教程(第,3,版)”的借书记录。,SELECT TLend.,借书证号, TLend.ISBN,图书,ID,借书时间,应还时间,FROM TLend, TBook,WHERE TLend.ISBN= TBook.ISBN,AND TLend.,借书证号,=081101,AND TBook.,书名,=SQL Server,实用教程(第,3,版),说明:要查找,081101,的借书记录,首先需要根据书名从,TBook,表中查找图书的,ISBN,,再根据,ISBN,和借书证号在,TLend,表中查找该借书记录。所以以上语句在,FROM,子句中指定了两个表,TLend,和,TBook,,由于在两个表中都有,ISBN,字段,所以在指定时,需要在字段名之前加上表名以示区别。,从多个表中查询数据,11,通过子查询也可以实现以上功能:,SELECT *,FROM TLend,WHERE,借书证号,=081101,AND ISBN IN,(SELECT ISBN,FROM TBook,WHERE,书名,=SQL Server,实用教程(第,3,版),),从多个表中查询数据,12,【,情景,2】,查找出还书时借书已经超过,5,天的读者姓名。,SELECT DISTINCT,姓名,FROM TReader JOIN HLend,ON TReader.,借书证号,=HLend.,借书证号,WHERE (HLend.,还书时间,-HLend.,借书时间,)5,执行结果如下所示:,说明:读者的姓名只在,TReader,表中存储,所以只能从,TReader,表中查找姓名。但是还书记录只有在还书记录表,HLend,中查询,所以以上语句中使用了,JOIN,关键字,连接了,TReader,表和,HLend,表,,ON,子句用于指定连接的条件,即两个表的借书证号要相等。在,WHERE,子句中指定了要查询还书时间和借书时间差大于,5,的记录。,从多个表中查询数据,13,SELECT DISTINCT,姓名,FROM TReader , HLend,where TReader.,借书证号,=HLend.,借书证号,and (HLend.,还书时间,-HLend.,借书时间,)5,14,在对图书管理数据库的数据进行检索时,经常需要对结果进行汇总或计算,例如,求图书的总库存量、统计读者的总数等。,【,情景,1】,查询图书管理数据库中读者的总数。,USE MBOOK,GO,SELECT COUNT(*) AS,读者总数,FROM TReader,执行结果如下所示:,数据汇总,15,【,情景,2】,统计图书管理数据库中男女生的人数。,SELECT,性别, COUNT(,性别,) AS,人数,FROM TReader,GROUP BY,性别,说明:以上语句中使用,GROUP BY,子句,对性别进行分组,将性别读者分为,0,和,1,两组,再使用,COUNT,函数统计每组的人数。,数据汇总,16,【,情景,3】,从借阅表,TLend,中查找借书大于等于,2,本且借书时间早于,2009,年,9,月,23,日的读者的借书证号。,SELECT,借书证号,FROM TLend,WHERE,借书时间,=2,说明:以上语句中使用,GROUP BY,子句对,TLend,表中“借书时间,2009-09-23,”的记录根据借书证号进行分组,再使用,HAVING,子句,筛选出有相同借书证号的记录数大于,2,的记录。,数据汇总,17,有时需要将查询出的记录按照指定的顺序进行排序。,【,情景,1】,将计算机专业的读者信息按照出生时间升序排列。,SELECT *,FROM TReader,WHERE,专业,=,计算机,ORDER BY,出生时间,ASC,说明:在以上语句中,使用,ORDER BY,子句,将所得记录按照出生时间排列,关键字,ASC,表示升序,。,排序,18,【,情景,2】,将图书管理数据库中的图书信息按照出版年月降序排列。,SELECT ISBN,书名,作译者,出版社,出版年月,价格,FROM TBook,ORDER BY,出版年月,DESC,排序,19,通过,T-SQL,的,SELECT,语句可以从表或视图中迅速方便地检索数据,可以实现对表的选择、投影及连接操作,其功能十分强大。语法格式如下:,SELECT ALL | DISTINCT , TOP expression PERCENT WITH TIES , /*,指定要选择的列及其限定*,/, INTO /*INTO,子句,指定结果存入新表*,/, FROM /*FROM,子句,指定表或视图*,/, WHERE /*WHERE,子句,指定查询条件*,/, GROUP BY /*GROUP BY,子句,指定分组表达式*,/, HAVING /*HAVING,子句,指定分组统计条件*,/, ORDER BY ASC | DESC /*ORDER,子句,指定排序表达式和顺序*,/,说明:,所有被使用的子句必须按语法说明中显示的顺序严格地排序。例如,,一个,HAVING,子句必须位于,GROUP BY,子句之后,并位于,ORDER BY,子句之前,。,SELECT,语句返回一个表的结果集,通常该结果集被称为表值表达式。,Select,语句,20,通过,SELECT,语句中,SELECT,关键字后面的“,”项组成结果表的列。语法格式:, :=,* /*,选择当前表或视图的所有列*,/,| .* /*,选择指定的表或视图的所有列*,/,| , . /*,选择指定的列*,/,| , AS /*AS,子句,定义列别名*,/,| = /*,选择指定列并更改列标题*,/, ,.n ,选择列,21,1,选择所有列,使用“,*,”表示选择一个表或视图中的所有列。,【,强化练习,】,查询学生管理数据库,PXSCJ,中,XSB,表的所有的学生数据。,USE PXSCJ,GO,SELECT *,FROM XSB,2,选择一个表中指定的列,使用,SELECT,语句选择一个表中的某些列,各列名之间要以逗号分隔。,【,强化练习,】,查询,PXSCJ,数据库的,XSB,表中所有学生的学号、姓名和总学分。,SELECT XM, ZY, ZXF,FROM XSB,3,定义列别名,当希望查询结果中的某些列或所有列显示时使用自己选择的列标题时,可以在列名之后,使用,AS,子句定义一个列别名来更改查询结果的列标题名,。,选择列,22,【,强化练习,】,查询,XSB,表中计算机系同学的,XH,(学号)、,XM,(姓名)和,ZXF,(总学分),结果中各列的标题分别指定为学号、姓名和总学分。,SELECT XH AS,学号, XM AS,姓名, ZXF AS,总学分,FROM XSB,WHERE ZY= ,计算机,更改查询结果中的列标题也可以使用“,=,”的形式。例如:,SELECT,学号,=XH,姓名,=XM,总学分,=ZXF,FROM XSB,WHERE ZY= ,计算机,该语句的执行结果与上例的结果完全相同。,当自定义的列标题中含有空格时,必须使用引号将标题括起来,。例如:,SELECT Student number = XH, XM AS Student name, mark =ZXF,FROM XSB,WHERE ZY= ,计算机,说明:不允许在,WHERE,子句中使用列别名。这是因为,执行,WHERE,代码时,可能尚未确定列值。,选择列,23,4,替换查询结果中的数据,在对表进行查询时,有时对所查询的某些列希望得到的是一种概念而不是具体的数据。,要替换查询结果中的数据,则要使用查询中的,CASE,表达式,格式为,CASE,WHEN,条件,1 THEN,表达式,1,WHEN,条件,2 THEN,表达式,2,ELSE,表达式,END,选择列,24,【,强化练习,】,查询,XSB,表中计算机系各同学的,XH,(学号)、,XM,(姓名)和,ZXF,(总学分),对其总学分按以下规则进行替换:若总学分为空值,替换为“尚未选课”;若总学分小于,50,,替换为“不及格”;若总学分在,50,与,52,之间,替换为“合格”;若总学分大于,52,,替换为“优秀”。列标题更改为“等级”。,SELECT XH AS,学号, XM AS,姓名,等级,=,CASE,WHEN ZXF IS NULL THEN ,尚未选课,WHEN ZXF =50 and ZXF=52 THEN ,合格,ELSE ,优秀,END,FROM XSB,WHERE ZY= ,计算机,GO,选择列,25,执行结果如下所示:,选择列,26,5,计算列值,使用,SELECT,对列进行查询时,在结果中可以输出对列值计算后的值,即,SELECT,子句可使用表达式作为结果。,【,强化练习,】,按,120,分计算成绩显示学号为,081101,的学生的成绩情况。,SELECT XH AS,学号, KCH AS,课程号,成绩,120=CJ*1.20,FROM CJB,WHERE XH= 081101,执行结果如下所示:,选择列,27,6,消除结果集中的重复行,在只选择表中某些列时,可能会出现重复行。例如,对,PXSCJ,数据库的,XSB,表只选择,ZY,(专业)和,ZXF,(总学分),则出现多行重复的情况。可以使用,DISTINCT,关键字消除结果集中的重复行,其格式是,SELECT DISTINCT | ALL ,关键字,DISTINCT,的含义是对结果集中的重复行只选择一个,保证行的唯一性。,【,强化练习,】,对,PXSCJ,数据库的,XSB,表只选择专业和总学分,消除结果集中的重复行。,SELECT DISTINCT ZY, ZXF,FROM XSB,执行结果如下所示:,选择列,28,7,限制结果集返回行数,如果,SELECT,语句返回的结果集的行数非常多,可以使用,TOP,选项限制其返回的行数。,TOP,选项的基本格式为, TOP expression PERCENT WITH TIES ,指示只能从查询结果集返回指定的第一组行或指定的百分比数目的行。,expression,可以是指定数目或百分比数目的行。若带,PERCENT,关键字,则表示返回结果集的前,expression%,行。,TOP,子句可以用于,SELECT,、,INSERT,、,UPDATE,和,DELETE,语句中。,【,强化练习,】,对,PXSCJ,数据库的,XSB,表选择,XM,(姓名)、,ZY,(专业)和,ZXF,(总学分),返回结果集的前,6,行。,SELECT TOP 6 XM, ZY, ZXF,FROM XSB,该语句执行结果如下所示:,选择列,29,8,聚合函数,SELECT,子句中的表达式中还可以包含所谓的聚合函数。,聚合函数常常用于对一组值进行计算,然后返回单个值,。聚合函数通常与,GROUP BY,子句一起使用。如果一个,SELECT,语句中有一个,GROUP BY,子句,则这个聚合函数对所有列起作用;如果没有,则,SELECT,语句只产生一行作为结果。,SQL Server,常用的聚合函数如表,5.10,中所示。,函 数 名,说 明,AVG,求组中值的平均值,BINARY_CHECKSUM,返回对表中的行或表达式列表计算的二进制校验值,可用于检测表中行的更改,CHECKSUM,返回在表的行上或在表达式列表上计算的校验值,用于生成哈希索引,CHECKSUM_AGG,返回组中值的校验值,COUNT,求组中项数,返回,int,类型整数,COUNT_BIG,求组中项数,返回,bigint,类型整数,GROUPING,产生一个附加的列,MAX,求最大值,MIN,求最小值,SUM,返回表达式中所有值的和,STDEV,返回给定表达式中所有值的统计标准偏差,STDEVP,返回给定表达式中所有值的填充统计标准偏差,VAR,返回给定表达式中所有值的统计方差,VARP,返回给定表达式中所有值的填充统计方差,表,5.10,聚合函数表,选择列,30,下面对常用的几个聚合函数加以介绍。,(,1,),SUM,和,AVG,。,SUM,和,AVG,分别用于求表达式中所有值项的总和与平均值,语法格式为,SUM /AVG ( ALL | DISTINCT expression ),其中,expression,是常量、列、函数或表达式,其数据类型只能是:,int,、,smallint,、,tinyint,、,bigint,、,decimal,、,numeric,、,float,、,real,、,money,和,smallmoney,。,ALL,表示对所有值进行运算,,DISTINCT,表示去除重复值,默认为,ALL,。,SUM / AVG,忽略,NULL,值。,(,2,),MAX,和,MIN,。,MAX,和,MIN,分别用于求表达式中所有值项的最大值与最小值,语法格式为,MAX / MIN ( ALL | DISTINCT expression ),其中,expression,可以是数字、字符和时间日期类型。,ALL,、,DISTINCT,的含义及默认值与,SUM/AVG,函数相同。,MAX/MIN,忽略,NULL,值。,(,3,),COUNT,。,COUNT,用于统计组中满足条件的行数或总行数,格式为,COUNT ( ALL | DISTINCT expression | * ),其中,expression,可以是除,text,、,image,或,ntext,之外的任何类型。,COUNT,忽略,NULL,值。,选择列,31,【,强化练习,】,(,1,)求选修,101,课程的学生的平均成绩。,SELECT AVG(CJ) AS ,课程,101,平均成绩,FROM CJB,WHERE KCH = 101,执行结果如下所示:,选择列,32,(,2,)求选修,101,课程的学生的最高分和最低分。,SELECT MAX(CJ) AS ,课程,101,的最高分, , MIN(CJ) AS ,课程,101,的最低分,FROM CJB,WHERE KCH = 101,执行结果如下所示:,选择列,33,(,3,)统计备注不为空的学生数。,SELECT COUNT(BZ) AS ,备注不为空的学生数,FROM XSB;,注意:这里,COUNT(BZ),计算时备注为,NULL,的行被忽略,所以结果是,7,而不是,22,。,(,4,)统计总学分在,50,分以上的人数。,SELECT COUNT(ZXF) AS ,总学分,50,分以上的人数,FROM XSB,WHERE ZXF50;,执行结果如下:,选择列,34,FROM,子句指定了,SELECT,语句查询的对象的构成形式。语法格式如下:,FROM ,的构成如下:, :=, AS /*,查询表或视图,可指定别名*,/,| AS ( ,.n ) /*,行集函数*,/,| AS /*,指定表值函数*,/,| AS ( ,.n ) /*,结果集*,/,| /*,连接表*,/,From,子句,35,1.,表名,或视图名,FROM,子句后可以指定一个或多个表名或视图名作为查询对象。可以使用,AS,选项为表指定别名,,AS,关键字也可以省略,直接给出别名即可。别名主要用在相关子查询及连接查询中。如果,FROM,子句指定了表别名,这条,SELECT,语句中的其他子句都必须使用表别名来代替原始的表名。,2.,行集函数,行集函数通常返回一个表或视图。可以使用别名来替代返回的表,还可以使用列别名替代结果集内的列名。,主要的行集函数有:,CONTAINSTABLE,、,FREETEXTTABLE,、,OPENDATASOURCE,、,OPENQUERY,、,OPENROWSET,和,OPENXML,。,3.,表值函数,表值函数就是返回一个表的用户自定义函数。,4.,结果集,FROM,子句中还可以指定一个使用,SELECT,语句返回的中间结果集,但必须使用,AS,关键字为产生的中间表定义一个别名。,From,子句,36,【,强化练习,】,(,1,)查找表,KCB,中的课程,101,的,KKXQ,(开课学期)。,USE PXSCJ,GO,SELECT KKXQ,FROM KCB,WHERE KCH= 101,(,2,)从,XSB,表中查找总学分大于,50,的男同学的姓名和学号。,SELECT XM, XH, ZXF,FROM ( SELECT XM, XH, XB, ZXF,FROM XSB,WHERE ZXF50,) AS STUDENT,WHERE XB=1,执行结果如下所示:,From,子句,37,在,SQL Server,中,通过在,SELECT,语句的,WHERE,子句中指定选择的条件来选择行。,WHERE,子句必须紧跟在,FROM,子句之后,其基本格式为,WHERE ,的构成如下所示:,:=, NOT , AND | OR NOT , ,n ,判定运算的结果为,TRUE,或,FALSE,。,NOT,表示对判定的结果取反。,AND,用于组合两个条件,两个条件都为,TRUE,时值才为,TRUE,。,OR,也用于组合两个条件,两个条件有一个条件为,TRUE,时值就为,TRUE,。,Where,子句,38,的一般构成如下所示:,:=, = | | = | | != | ! /*,比较运算*,/,| NOT LIKE pattern ESCAPE escape_character ,/*,字符串模式匹配*,/,| NOT BETWEEN AND /*,指定范围*,/,| IS NOT NULL /*,是否空值判断*,/,| NOT IN ( | ,n ) /*IN,子句*,/,| = | | = | | != | ! ALL | SOME | ANY ( ),/*,比较子查询*,/,| EXIST ( ) /*EXIST,子查询*,/,Where,子句,39,1,比较运算,比较运算符用于比较两个表达式值,共有,9,个,分别是:,=,(等于)、,(小于)、,(大于)、,=,(大于等于)、,(不等于)、,!=,(不等于)、,!,(不大于)。比较运算的格式为, = | | = | | != | ! ,当两个表达式值均不为空值(,NULL,)时,比较运算返回逻辑值,TRUE,(真)或,FALSE,(假)。而当两个表达式值中有一个为空值或都为空值时,比较运算将返回,UNKNOWN,。,【,强化练习,】,查询,PXSCJ,数据库,XSB,表中学号为,081101,同学的情况。,USE PXSCJ,GO,SELECT XM, XH, ZXF,FROM XSB,WHERE XH=081101,执行结果如下所示:,Where,子句,40,从查询条件的构成可以看出,可以将多个判定运算的结果通过逻辑运算符(,NOT,、,AND,和,OR,)再组成更为复杂的查询条件。例如,查询,XSB,表中通信工程专业总学分大于等于,42,的同学的情况:,SELECT *,FROM XSB,WHERE ZY= ,通信工程, AND ZXF = 42,Where,子句,41,2,模式匹配,LIKE,谓词用于指出一个字符串是否与指定的字符串相匹配,,返回逻辑值,TRUE,或,FALSE,。,LIKE,谓词表达式的格式为, NOT LIKE pattern ESCAPE ,说明:,匹配表达式一般为字符串表达式,在查询语句中可以是列名。,pattern,为在匹配表达式中的搜索模式串。在搜索模式串中可以使用通配符,表,5.11,列出了,LIKE,谓词可以使用的通配符及其说明。,通 配 符,说 明,%,代表,0,个或多个字符,_,(下画线),代表单个字符, ,指定范围(如,a-f,、,0-9,)或集合(如,abcdef,)中的任何单个字符,指定不属于范围(如,a-f,、,0-9,)或集合(如,abcdef,)的任何单个字符,表,5.11,通配符列表,Where,子句,42,转义字符应为有效的,SQL Server,字符,没有默认值,且必须为单个字符。当模式串中含有与通配符相同的字符时,此时应通过该字符前的转义字符指明其为模式串中的一个匹配字符。使用,ESCAPE,关键字可指定转义符。,NOT LIKE,:使用,NOT LIKE,与,LIKE,的作用相反。,使用带“,%,”通配符的,LIKE,时,若使用,LIKE,进行字符串比较,模式字符串中的所有字符都有意义,包括起始或尾随空格。,Where,子句,43,【,强化练习,】,(,1,)查询,XSB,表中姓“王”且单名的学生情况。,USE PXSCJ,GO,SELECT *,FROM XSB,WHERE XM LIKE ,王,_ ,执行结果如下所示:,Where,子句,44,(,2,)查询,XSB,表中学号中倒数第,3,个数字为,1,且倒数第,1,个数在,1,到,5,之间的学生学号、姓名及专业。,SELECT XH, XM, ZY,FROM XSB,WHERE XH LIKE %1_12345,执行结果如下所示:,Where,子句,45,3,范围比较,用于范围比较的关键字有两个:,BETWEEN,和,IN,。当要查询的条件是某个值的范围时,可以使用,BETWEEN,关键字。,BETWEEN,关键字指出查询范围,格式为:, NOT BETWEEN AND ,当不使用,NOT,时,若,的值在,与,(包括这两个值)之间,则返回,TRUE,,否则返回,FALSE,;使用,NOT,时,返回值刚好相反。,使用,IN,关键字可以指定一个值表,值表中列出所有可能的值,当与值表中的任一个匹配时,即返回,TRUE,,否则返回,FALSE,。使用,IN,关键字指定值表的格式为:, IN ( ,n),【,强化练习,】,(,1,)查询,XSB,表中不在,1989,年出生的学生情况。,SELECT XH, XM, ZY, CSSJ,FROM XSB,WHERE CSSJ NOT BETWEEN 1989-1-1 and 1989-12-31,(,2,)查询,XSB,表中专业为“计算机”或“通信工程”或“无线电”的学生情况。,SELECT *,FROM XSB,WHERE,专业,IN (,计算机, ,通信工程, ,无线电,),Where,子句,46,4,空值比较,当需要判定一个表达式的值是否为空值时,使用,IS NULL,关键字,格式为, IS NOT NULL,当不使用,NOT,时,若表达式的值为空值,返回,TRUE,,否则返回,FALSE,;当使用,NOT,时,结果刚好相反。,Where,子句,47,5,子查询,在查询条件中,可以使用另一个查询的结果作为条件的一部分,例如判定列值是否与某个查询的结果集中的值相等,作为查询条件一部分的查询称为子查询。,T-SQL,允许,SELECT,多层嵌套使用,用来表示复杂的查询。子查询除了可以用在,SELECT,语句中,还可以用在,INSERT,、,UPDATE,及,DELETE,语句中。子查询通常与,IN,、,EXIST,谓词及比较运算符结合使用。,(,1,),IN,子查询。,IN,子查询用于进行一个给定值是否在子查询结果集中的判断,格式为, NOT IN ( ),当表达式与子查询的结果表中的某个值相等时,,IN,谓词返回,TRUE,,否则返回,FALSE,;若使用了,NOT,,则返回的值刚好相反。,【,强化练习,】,查找选修了课程号为,206,的课程的学生的情况。,SELECT *,FROM XSB,WHERE XH IN,( SELECT XH,FROM CJB,WHERE KCH= 206),Where,子句,48,执行结果如下所示:,在执行包含子查询的,SELECT,语句时,系统先执行子查询,产生一个结果表,再执行查询。本例中,先执行上面括号里面的子查询:,SELECT XH FROM CJB WHERE KCH= 206,得到一个只含有,XH,列的表,,CJB,表中的每个,KCH,值为,206,的行在结果表中都有一行。再执行外查询,若,XSB,表中某行的,XH,列值等于子查询结果表中的任一个值,则该行就被选择。,Where,子句,49,(,2,)比较子查询。这种子查询可以认为是,IN,子查询的扩展,它使表达式的值与子查询的结果进行比较运算,格式为, | = | != | | ! ALL | SOME | ANY (),ALL,、,SOME,和,ANY,说明对比较运算的限制。,ALL,指定表达式要与子查询结果集中的每个值都进行比较,当表达式与每个值都满足比较的关系时,才返回,TRUE,,否则返回,FALSE,;,SOME,或,ANY,表示表达式只要与子查询结果集中的某个值满足比较的关系时,就返回,TRUE,,否则返回,FALSE,。,Where,子句,50,【,强化练习,】,(,1,)查找选修了离散数学的学生学号。,SELECT XH,FROM CJB,WHERE KCH=,(,SELECT KCH,FROM KCB,WHERE KCM=,离散数学,),(,2,)查找比所有计算机系的学生年龄都大的学生。,SELECT *,FROM XSB,WHERE CSSJALL,(,SELECT CSSJ,FROM XSB,WHERE ZY= ,计算机,),Where,子句,51,执行结果如下所示:,Where,子句,52,(,3,),EXISTS,子查询。,EXISTS,谓词用于测试子查询的结果是否为空表,若子查询的结果集不为空,则,EXISTS,返回,TRUE,,否则返回,FALSE,。,EXISTS,还可与,NOT,结合使用,即,NOT EXISTS,,其返回值与,EXISTS,刚好相反。其格式为, NOT EXISTS (),【,强化练习,】,查找选修,206,号课程的学生姓名。,SELECT XM,FROM XSB,WHERE EXISTS,(,SELECT *,FROM CJB,WHERE XH= XSB.XH AND KCH= 206,),Where,子句,53,GROUP BY,子句主要用于根据字段对行分组。例如,在学生成绩管理数据库,PXSCJ,中根据学生所学的专业对,XSB,表中的所有行分组,结果是每个专业的学生成为一组。,在,SQL Server,中,GROUP BY,子句的语法格式如下:, GROUP BY ALL ,n,说明:,中通常包含字段名。指定,ALL,将显示所有组。使用,GROUP BY,子句后,,SELECT,语句的,SELECT,关键字后只能包含在,GROUP BY,中指出的列或在聚合函数中指定的列。,【,强化练习,】,(,1,)将,PXSCJ,数据库中各专业输出。,USE PXSCJ,GO,SELECT ZY,FROM XSB,GROUP BY ZY,执行结果如下所示:,Group by,子句,54,(,2,)求被选修的各门课程的平均成绩和选修该课程的人数。,SELECT KCH AS,课程号, AVG(CJ) AS ,平均成绩, , COUNT(XH) AS ,选修人数,FROM CJB,GROUP BY KCH,执行结果如下所示:,Group by,子句,55,(,3,)求每个专业的男生、女生人数。,SELECT ZY, XB , COUNT(*) AS ,人数,FROM XSB,GROUP BY ZY, XB,执行结果如下所示:,Group by,子句,56,使用,GROUP BY,子句和聚合函数对数据进行分组后,还可以使用,HAVING,子句对分组数据进行进一步的筛选。,例如查找,PXSCJ,数据库中平均成绩在,85,分以上的学生,就是在,CJB,表上按学号分组后筛选出符合平均成绩大于等于,85,的学生。,HAVING,子句的格式为, HAVING ,HAVING,子句中的条件与,WHERE,子句的查询条件类似,不过,HAVING,子句中可以使用聚合函数,而,WHERE,子句中不可以。,在,SELECT,语句中,当,WHERE,、,GROUP BY,与,HAVING,子句都被使用时,要注意它们的作用和执行顺序。,WHERE,子句用于筛选由,FROM,子句指定的数据对象,,GROUP BY,用于对,WHERE,子句的结果进行分组,,HAVING,子句则是对使用了,GROUP BY,以后的分组数据进行过滤。,Having,子句,57,【,强化练习,】,(,1,)查找平均成绩在,85,分以上的学生的学号和平均成绩。,USE PXSCJ,GO,SELECT XH, AVG(CJ) AS ,平均成绩,FROM CJB,GROUP BY XH,HAVING AVG(CJ) =85,执行结果如下所示:,Having,子句,58,(,2,)查找通信工程专业平均成绩在,85,分以上的学生的学号和平均成绩。,SELECT XH, AVG(CJ) AS ,平均成绩,FROM CJB,WHERE XH IN,(,SELECT XH,FROM XSB,WHERE ZY= ,通信工程,),GROUP BY XH,HAVING AVG(CJ) =85,执行结果如下所示:,Having,子句,59,图书管理数据库视图,为了更方便地进行查询,,SQL Server,中引入了,视图的概念,。本节需要创建“读者借阅图书”视图,名称为,RBL,。通过“借书证号”将读者表(,TReader,)和借阅表(,TLend,)联系起来,通过“,ISBN,”将借阅表(,TLend,)和图书信息表(,TBook,)联系起来,视图,RBL,包含借书证号、姓名、借书量、图书,ID,、,ISBN,、书名、出版社、价格、借书时间等列。,60,(,1,)启动“,SQL Server Management Studio,”,在“对象资源管理器中”展开数据库 “,MBOOK,”,选择其中的“视图”项,用鼠标右键单击,在弹出的快捷菜单上选择“新建视图,(N),”菜单项。,(,2,)在随后出现的“添加表”窗口中,添加所需要关联的基本表、视图、函数、同义词。这里只使用表选项卡,选择表“,TReader,”,如图,5.2,所示,单击“添加”按钮。之后再依次添加“,TLend,”和“,TBook,”表,添加完表后单击“关闭”按钮关闭该窗口。,图,5.2,“添加表”窗口,界面方式创建图书管理数据库视图,61,(,3,)基表添加完后,在视图窗口的关系图窗口显示了基表的全部列信息。选择,TReader,表的“姓名”、“借书量”字段,,TLend,表的“借书证号”、“,ISBN,”、“图书,ID,”、“借书时间”字段,,TBook,表的“书名”、“出版社”、“价格”字段。,另外,可以在子窗口中的“列”一栏指定与视图关联的列,在“列名”一栏为相关联的列在视图中定义一个新列名,在“排序类型”一栏指定列的排序方式,,在“筛选器”一栏指定创建视图的规则,(例如,可以在“出版社”字段的“筛选器”栏中填写“电子工业出版社”筛选出电子工业出版社出版的图书)。这一步选择的字段、规则等的情况所对应的,SELECT,语句将会自动显示在窗口底部。,界面方式创建图书管理数据库视图,62,本操作中视图,RBL,不需要另外指定列名,所以“列名”一栏不填,“排序类型”和“筛选器”栏也不必填写,如图,5.3,所示。,图,5.3,创建图书管理数据库视图,RBL,界面方式创建图书管理数据库视图,63,(,4,)上一步完成后,单击面板上的保存按钮,出现保存视图对话框,在其中输入视图名,RBL,,并单击“确定”按钮,便完成了视图的创建。,视图,RBL,创建成功后可以查看其结构,查看的方法是:在“对象资源管理器中”展开数据库,MBOOK,下的“视图”节点,用鼠标右键单击视图“,dbo.RBL,”,选择“设计”菜单项,可以查看并可修改视图结构,选择“编辑前,200,行”菜单项,将可查看视图数据内容。,界面方式创建图书管理数据库视图,64,小结,Select,语句,视图的创建,65,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业管理 > 商业计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!