SQL Server数据库教程第5章 数据查询.ppt
《SQL Server数据库教程第5章 数据查询.ppt》由会员分享,可在线阅读,更多相关《SQL Server数据库教程第5章 数据查询.ppt(70页珍藏版)》请在文库网上搜索。
1、第第5章章 数据数据查询查询5.1 投影查询投影查询5.2 选择查询选择查询5.3 分组查询和统计计算分组查询和统计计算5.4 排序查询排序查询5.5 连接查询连接查询5.6 子查询子查询5.7 SELECT查询的其他子句查询的其他子句5.8 综合训练综合训练1SQL Server 数据库教程(第3版)第第5章章 数据查询数据查询T-SQL语言中最重要的部分是它的查询功能,查询语言用来对已经存在于数据库中的数据按照特定的行、列、条件表达式或者一定次序进行检索。T-SQL对数据库的查询使用SELECT语句,SELECT语句具有灵活的使用方式和强大的功能。语法格式:语法格式:SELECTselec
2、t_list/*指定要选择的列*/FROMtable_source/*FROM子句,指定表或视图*/WHEREsearch_condition/*WHERE子句,指定查询条件*/GROUPBYgroup_by_expression/*GROUPBY子句,指定分组表达式*/HAVINGsearch_condition/*HAVING子句,指定分组统计条件*/ORDERBYorder_expressionASC|DESC/*ORDER子句,指定排序表达式和顺序*/2SQL Server 数据库教程(第3版)5.1 投影查询投影查询语法格式:语法格式:SELECTALL|DISTINCTTOPnPE
3、RCENTWITHTIESselect_list指出了结果的形式,其格式为:*/*选择当前表或视图的所有列*/|table_name|view_name|table_alias.*/*选择指定的表或视图的所有列*/|colume_name|expression|$IDENTITY|$ROWGUIDAScolumn_alias/*选择指定的列并更改列标题,为列指定别名,还可用于为表达式结果指定名称,*/|column_alias=expression,n3SQL Server 数据库教程(第3版)5.1 投影查询投影查询1投影指定的列投影指定的列使用SELECT语句可选择表中的一个列或多个列,如
4、果是多个列,各列名中间要用逗号分开。语法格式:语法格式:SELECTcolumn_name,column_nameFROMtable_nameWHEREsearch_condition其中,FROM子句用于指定表,WHERE在该表中检索符合search_condition条件的列。4SQL Server 数据库教程(第3版)5.1 投影查询投影查询【例5.1】查询student表中所有学生的学号、姓名和专业。USEstscSELECTstno,stname,specialistFROMstudent查询结果:查询结果:stnostnamespeciality-121001李贤友通信121002
5、周映雪通信121005刘刚通信122001郭德强计算机122002谢萱计算机122004孙婷计算机5SQL Server 数据库教程(第3版)5.1 投影查询投影查询2投影全部列投影全部列在SELECT子句指定列的位置上使用*号时,则为查询表中所有列。【例5.2】查询student表中所有列。USEstscSELECT*FROMstudent该语句与下面语句等价USEstscSELECTstno,stname,stsex,stbirthday,specialist,tcFROMstudent6SQL Server 数据库教程(第3版)5.1 投影查询投影查询7SQL Server 数据库教程(
6、第3版)查询结果:查询结果:stnostnamestsexstbirthdayspecialitytc-121001李贤友男1991-12-30通信52121002周映雪女1993-01-12通信49121005刘刚男1992-07-05通信50122001郭德强男1991-10-23计算机48122002谢萱女1992-09-11计算机52122004孙婷女1992-02-24计算机503修改查询结果的列标题修改查询结果的列标题为了改变查询结果中显示的列标题,可以在列名后使用AS子句。语法格式如下:AScolumn_alias其中column_alias是指定显示的列标题,AS可省略。5.1
7、 投影查询投影查询8【例5.3】查询student表中通信专业学生的stno、stname、tc,并将结果中各列的标题分别修改为学号,姓名,总学分。USEstscSELECTstnoAS学号,stnameAS姓名,tcAS总学分FROMstudent查询结果:查询结果:学号姓名总学分-121001李贤友52121002周映雪49121005刘刚50122001郭德强48122002谢萱52122004孙婷50SQL Server 数据库教程(第3版)5.1 投影查询投影查询4去掉重复行去掉重复行去掉结果集中的重复行可使用DISTINCT关键字,其语法格式是:SELECTDISTINCTcolu
8、mn_name,column_name【例5.4】查询student表中specialist列,消除结果中的重复行。USEstscSELECTDISTINCTspecialistFROMstudent查询结果:查询结果:speciality-计算机通信9SQL Server 数据库教程(第3版)5.2 选择查询选择查询语法格式语法格式:选择查询通过WHERE子句实现,WHERE子句给出查询条件,该子句必须紧跟FROM子句之后。WHERE其中search_condition为查询条件,语法格式为:NOT|()AND|ORNOT|(),n其中predicate为判定运算,语法格式为:express
9、ion=|=|!=|!expression/*比较运算*/|string_expressionNOTLIKEstring_expressionESCAPEescape_character/*字符串模式匹配*/|expressionNOTBETWEENexpressionANDexpression/*指定范围*/|expressionISNOTNULL/*是否空值判断*/10SQL Server 数据库教程(第3版)5.2 选择查询选择查询|CONTAINS(column|*,)/*包含式查询*/|FREETEXT(column|*,freetext_string)/*自由式查询*/|expre
10、ssionNOTIN(subquery|expression,n)/*IN子句*/|expression=|=|!=|!ALL|SOME|ANY(subquery)/*比较子查询*/|EXIST(subquery)/*EXIST子查询*/表5.1查询条件11SQL Server 数据库教程(第3版)5.4.2 选择查询选择查询1表达式比较表达式比较比较运算符用于比较两个表达式值,比较运算的语法格式如下:expression=|=|!=|!expression其中expression是除text、ntext和image之外类型的表达式。12SQL Server 数据库教程(第3版)5.2 选择查
11、询选择查询13【例5.5】查询student表中专业为计算机或性别为女的学生。USEstscSELECT*FROMstudentWHEREspecialist=计算机orstsex=女查询结果:查询结果:stnostnamestsexstbirthdayspecialitytc-121002周映雪女1993-01-12通信49122001郭德强男1991-10-23计算机48122002谢萱女1992-09-11计算机52122004孙婷女1992-02-24计算机502范围比较范围比较BETWEEN、NOTBETWEEN、IN是用于范围比较的三个关键字,用于查找字段值在(或不在)指定范围的行
12、。SQL Server 数据库教程(第3版)5.2 选择查询选择查询【例5.6】查询score表成绩为82、91、95的记录。USEstscSELECT*FROMscoreWHEREgradein(82,91,95)查询结果:查询结果:stnocnograde-12100120591121005801821220028019514SQL Server 数据库教程(第3版)5.2 选择查询选择查询3模式匹配模式匹配字符串模式匹配使用LIKE谓词,LIKE谓词表达式的语法格式如下:string_expressionNOTLIKEstring_expressionESCAPEescape_chara
13、cter其 含 义 是 查 找 指 定 列 值 与 匹 配 串 相 匹 配 的 行,匹 配 串(即string_expression)可以是一个完整的字符串,也可以含有通配符。通配符有以下两种:%:代表0或多个字符。_:代表一个字符。15SQL Server 数据库教程(第3版)5.2 选择查询选择查询【例5.7】查询student表中姓孙的学生情况。USEstscSELECT*FROMstudentWHEREstnameLIKE孙%查询结果:果:stnostnamestsexstbirthdayspecialitytc-122004孙婷女1992-02-24计算机5016SQL Server
14、 数据库教程(第3版)5.2 选择查询选择查询4空值使用空值使用空值是未知的值,判定一个表达式的值是否为空值时,使用ISNULL关键字,语法格式如下:expressionISNOTNULL【例5.8】查询已选课但未参加考试的学生情况。USEstscSELECT*FROMscoreWHEREgradeISnull查询结果:查询结果:stnocnograde-122001801NULL17SQL Server 数据库教程(第3版)5.3 分组查询和统计计算分组查询和统计计算1聚合函数聚合函数SQLServer所提供常用的聚合函数如表5.3所示。聚合函数一般参数语法格式如下:(ALL|DISTINC
15、Texpression)其中,ALL表示对所有值进行聚合函数运算,ALL为默认值,DISTINCT表示去除重复值,expression指定进行聚合函数运算的表达式。表5.3聚合函数18SQL Server 数据库教程(第3版)5.3 分组查询和统计计算分组查询和统计计算【例5.9】查询102课程的最高分、最低分、平均成绩。USEstscSELECTMAX(grade)AS最高分,MIN(grade)AS最低分,AVG(grade)AS平均成绩FROMscoreWHEREcno=102查询结果:查询结果:最高分最低分平均成绩-92728319SQL Server 数据库教程(第3版)5.3 分组
16、查询和统计计算分组查询和统计计算【例5.10】求学生的总人数。USEstscSELECTCOUNT(*)AS总人数FROMstudent查询结果查询结果:总人数-6【例5.11】查询计算机专业学生的总人数。USEstscSELECTCOUNT(*)AS总人数FROMstudentWHEREspecialist=计算机20SQL Server 数据库教程(第3版)5.3 分组查询和统计计算分组查询和统计计算查询结果:查询结果:总人数-32.GROUP BY子句子句GROUPBY子句用于将查询结果表按某一列或多列值进行分组,其语法格式为如下:GROUPBYALLgroup_by_expressio
17、n,nWITHCUBE|ROLLUP其中,group_by_expression为分组表达式,通常包含字段名,ALL显示所有分组,WITH指定CUBE或ROLLUP操作符,在查询结果中增加汇总记录。21SQL Server 数据库教程(第3版)5.3 分组查询和统计计算分组查询和统计计算【例5.12】查询各门课程的最高分、最低分、平均成绩。USEstscSELECTcnoAS课程号,MAX(grade)AS最高分,MIN(grade)AS最低分,AVG(grade)AS平均成绩FROMscoreWHERENOTgradeISnullGROUPBYcno查询结果:课程号最高分最低分平均成绩-10
18、292728320394818720591658080195738622SQL Server 数据库教程(第3版)5.3 分组查询和统计计算分组查询和统计计算【例5.13】求选修各门课程的平均成绩和选修人数。USEstscSELECTcnoAS课程号,AVG(grade)AS平均成绩,COUNT(*)AS选修人数FROMscoreGROUPBYcno查询结果:查询结果:课程号平均成绩选修人数-10283320387220580380186623SQL Server 数据库教程(第3版)5.3 分组查询和统计计算分组查询和统计计算3HAVING子句子句HAVING子句用于对分组按指定条件进一步进
19、行筛选,最后只输出满足指定条件的分组,HAVING子句的格式为:HAVING其中,search_condition为查询条件,可以使用聚合函数。当WHERE子句、GROUPBY子句、HAVING子句在一个SELECT语句中时,执行顺序如下:(1)执行WHERE子句,在表中选择行。(2)执行GROUPBY子句,对选取行进行分组。(3)执行聚合函数。(4)执行HAVING子句,筛选满足条件的分组。24SQL Server 数据库教程(第3版)5.3 分组查询和统计计算分组查询和统计计算【例5.14】查询选修课程2门以上且成绩在80分以上的学生的学号。USEstscSELECTstnoAS学号,CO
20、UNT(cno)AS选修课程数FROMscoreWHEREgrade=80GROUPBYstnoHAVINGCOUNT(*)=2查询结果:查询结果:学号选修课程数-121001312100531220022122004225SQL Server 数据库教程(第3版)5.3 分组查询和统计计算分组查询和统计计算【例5.15】查询至少有4名学生选修且以8开头的课程号和平均分数。USEstscSELECTcnoAS课程号,AVG(grade)AS平均分数FROMscoreWHEREcnoLIKE8%GROUPBYcnoHAVINGCOUNT(*)4查询结果:查询结果:课程号平均分数-8018626S
21、QL Server 数据库教程(第3版)5.4 排序查询排序查询SELECT语句的ORDERBY子句用于对查询结果按升序(默认或ASC)或降序(DESC)排列行,ORDERBY子句的格式如下:ORDERBYorder_by_expressionASC|DESC,n其中,order_by_expression是排序表达式。【例5.16】将计算机专业的学生按出生时间先后排序。USEstscROMstudentSELECT*WHEREspecialist=计算机ORDERBYstbirthday查询结果:查询结果:stnostnamestsexstbirthdayspecialitytc-12200
22、1郭德强男1991-10-23计算机48122004孙婷女1992-02-24计算机50122002谢萱女1992-09-11计算机5227SQL Server 数据库教程(第3版)5.4 排序查询排序查询【例5.17】将通信专业学生按“数字电路”课程成绩降序排序。USEstscSELECTa.stname,ame,c.gradeFROMstudenta,courseb,scorecWHEREa.stno=c.stnoANDo=oANDame=数字电路ANDa.specialist=通信ORDERBYc.gradeDESC查询结果:查询结果:stnamecnamegrade-李贤友数字电路92
23、刘刚数字电路87周映雪数字电路7228SQL Server 数据库教程(第3版)5.5 连接查询连接查询5.5.1 连接谓词连接谓词在SELECT语句的WHERE子句中使用比较运算符给出连接条件对表进行连接,将这种表示形式称为连接谓词表示形式。其一般语法格式为:比较运算符有:、=、!=、!连接谓词还有以下形式:BETWEENAND由于连接多个表存在公共列,为了区分是哪个表中的列,引入表名前缀指定连接列。例如,student.stno表示student表的stno列,score.stno表示score表的stno列经常用到的连接如下:等值连接:表之间通过比较运算符“=”连接起来,称为等值连接。非
24、等值连接:表之间使用非等号进行连接,则称为非等值连接。自然连接:如果在目标列中去除相同的字段名,称为自然连接。自连接:将同一个表进行连接,称为自连接。29SQL Server 数据库教程(第3版)5.5 连接查询连接查询【例5.18】查询学生的情况和选修课程的情况。USEstscSELECTstudent.*,score.*FROMstudent,scoreWHEREstudent.stno=score.stno查询结果:查询结果:30SQL Server 数据库教程(第3版)stnostnamestsexstbirthdayspecialitytcstnocnograde-121001李贤友
25、男1991-12-30通信5212100110292121001李贤友男1991-12-30通信5212100120591121001李贤友男1991-12-30通信5212100180194121002周映雪女1993-01-12通信4912100210272121002周映雪女1993-01-12通信4912100220565121002周映雪女1993-01-12通信4912100280173121005刘刚男1992-07-05通信5012100510287121005刘刚男1992-07-05通信5012100520585121005刘刚男1992-07-05通信5012100580
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL Server数据库教程第5章 数据查询 Server 数据库 教程 数据 查询