




已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章数据检索,8.1SELECT语句8.2使用SELECT语句进行简单查询8.3使用T-SQL语句进行高级查询8.4使用企业管理器进行查询8.5综合练习,返回目录,2,8.1SELECT语句,8.1.1SELECT语句的基本语法SELECTALL|DISTINCTcolumn_listINTOnew_table_nameFROMtable_listWHEREsearch_conditionGROUPBYgroup_by_listHAVINGsearch_conditionORDERBYorder_listASC|DESC8.1.2SELECT语句中各子句的说明SELECT:此关键字用于从数据库中检索数据。ALL|DISTINCT:ALL指定在结果集中可以包含重复行,ALL是默认设置;关键字DISTINCT指定SELECT语句的检索结果不包含重复的行。,3,column_list:描述进入结果集的列,它是由逗号分隔的表达式的列表。每个列表中表达式通常是对从中获取数据的源表或视图的列的引用,但也可能是其它表达式,例如常量或Transact-SQL函数。如果select_list使用*,表明指定返回源表中的所有列。INTOnew_table_name:指定查询到的结果集存放到一个新表中。new_table_name为指定新表的名称。FROMtable_list:用于指定产生检索结果集的源表的列表。这些源表包括:SQLServer的本地服务器中的基表、本地SQLServer中的视图、链接表。SQLServer将一个视图引用内部解析为针对组成视图的一个或多个基表的引用,链接表是从SQLServer进行访问的OLEDB数据源中的表,这种访问方式称为分布式查询。有关视图的概念将在第九章中介绍。,4,WHEREsearch_condition:用于指定检索的条件,它定义了源表中的行数据进入结果集所要满足的条件,只有满足条件的行才能出现在结果集中。GROUPBYgroup_by_list:GROUPBY子句根据group_by_list列中的值将结果集分成组。HAVINGsearch_condition:HAVING子句是应用于结果集的附加筛选。从逻辑上讲,HAVING子句从中间结果集对行进行筛选,这些中间结果集是用SELECT语句中的FROM、WHERE或GROUPBY子句创建的。HAVING子句通常与GROUPBY子句一起使用,尽管HAVING子句前面不必有GROUPBY子句。ORDERBYorder_listASC|DESC:ORDERBY子句定义结果集中的行排列的顺序。order_list指定依据哪些列来进行排序。ASC和DESC关键字用于指定结果集是按升序还是按降序排序,DESC降序排序,ASC升序排序。ORDERBY是一个重要的子句,要想获得有序的查询结果,必须使用ORDERBY子句,因为关系理论规定表中的数据行是没有次序的。,5,在使用SELECT语句时应注意如下几点:必须按照正确的顺序指定SELECT语句中的子句。对数据库对象的每个引用必须具有唯一性。在系统中,可能有多个数据库对象带有相同的名称。例如,User1和User2可能都创建了一个名为Table_0的表。在引用表Table_0时,为了区分引用的是User1的Table_0表,还是引用的是User2的Table_0,就必须对引用名称有所限定,如:User1.Table_0,User2.Table_0。在执行SELECT语句时,对象所驻留的数据库不一定总是当前数据库。若要确保总是使用正确的对象,则不论当前数据库是如何设置的,均应使用数据库和所有者来限定对象名称,如:JWGL.dbo.student。在FROM子句中所指定的表或视图可能有相同的列名,外键很可能和相关主键同名。加上对象名称来限定列名可解决重复列名称的问题,如:department.department_no、teacher.department_no。,本章首页,6,8.2.1最基本的SQL查询语句8.2.2改变列标题的显示8.2.3使用WHERE子句的查询8.2.4TOP和DISTINCT关键字8.2.5使用ORDERBY子句对结果进行排序8.2.6计算列的使用8.2.7基于多个检索条件的查询,8.2使用SELECT语句进行简单查询,本章首页,7,8.2.1最基本的SQL查询语句,SQL语言中最主要、最核心的部分是它的查询功能。查询语言用来对已经存在于数据库中的数据按照特定的组合、条件表达式或次序进行检索。8.2.1最基本的SQL查询语句格式:SELECT*|column_name,.nFROMtable_name功能:从指定表中查询所有信息或指定列的信息。【例8-1】从student表中分别检索出学生的所有信息及学号、姓名信息。USEjwglGOSELECT*FROMstudentSELECTstudent_id,student_nameFROMstudent注意:在SELECT后的列名的顺序决定了显示结果中的列序在查找多列内容时,用,将各字段分开,本节首页,8,在缺省情况下,执行上面的SQL语句后,查询结果中显示的列标题是列名。可以在SELECT语句中用列标题=列名或列标题AS列名来改变列标题的显示。【例8-2】从student表中分别检索出学生的学号、姓名信息并分别加上“学生”、“学号”的标题信息。USEjwglGOSELECT学号=student_id,姓名=student_nameFROMstudentSELECTstudent_idAS学号,student_nameAS姓名FROMstudent,8.2.2改变列标题的显示,本节首页,9,大部分查询都不是针对表中所有行的查询,而是从整个表中选出符合条件的信息,要实现这样的查询就要用到WHERE子句。1.WHERE子句的语法形式WHERE子句的语法形式如下:SELECTselctc_listFROMtable_listWHEREselect_condition其中SQLServer支持的搜索条件如下:比较:=、=、范围:BETWEEN(在某个范围内)、NOTBETWEEN(不在某个范围内),8.2.3使用WHERE子句的查询,10,列表:IN(在某个列表中)、NOTIN(不在某个列表中)字符串匹配:LIKE(和指定字符串匹配)、NOTLIKE(和指定字符串不匹配)空值判断:ISNULL(为空)、ISNOTNULL(不为空)组合条件:AND(与)、OR(或)取反:NOT要注意的是,应该避免使用否定条件,查询优化器不能识别否定条件。2.基于比较条件的WHERE子句使用基于比较条件的WHERE子句对表中数据进行查询,系统在执行这种条件查询时,逐行地对表中的数据进行比较,检查它们是否满足条件。,11,如果满足条件,则取出该行,如果不满足条件则不取该行。使用WHERE子句时,若该列为字符型,需要使用单引号将字符串括起来,而且应该注意单引号内的字符串要区分大小写形式。【例8-3】从student_course表中检索成绩小于60分的学生信息。USEjwglGOSELECT*FROMstudent_courseWHEREgrade=80ANDgrade、=、。search_condition:表中行数据进入结果集所应满足的条件。2.进行连接查询的要点:一般而言,基于主键和外键指定查询条件,连接条件可使用“主键=外键”。如果一个表有复合关键字,在连接表时,必须引用整个关键字。应尽可能限制连接语句中表的数目,连接的表越多,查询处理的时间越长。对于连接表的两个列应有相同或类似的数据类型。不要使用空值作为连接条件,因为空值计算不会和其它任何值相等。,27,【例8-13】从student及student_course两个表中检索学生的学号、姓名、学习课程号及课程成绩。USEjwglGOselectstudent.student_id,student.student_name,student_course.course_id,student_course.gradefromstudent,student_courseWHEREstudent.student_id=student_course.student_id,28,【例8-14】从student、course及student_course三个表中检索学生的学号、姓名、学习课程号、学习课程名及课程成绩。USEjwglGOSELECTstudent.student_id,student.student_name,student_course.course_id,course.course_name,student_course.gradefromstudent,student_course,courseWHEREstudent.student_id=student_course.student_idANDcourse.course_id=student_course.course_id,本节首页,29,8.3.2使用UNION子句,UNION子句的作用是把两个或多个SELECT语句查询的结果组合成一个结果集。这里查询的多个表不要求有关联。UNION子句的语法形式如下:Select_statementUNIONALLSelect_statementn使用UNION时,请注意以下4点:UNION中从源表选择的所有列表必须具有相同列数、相似数据类型和相同的列序。列名来自第一个SELECT语句。如果希望整个结果集以特定的顺序出现,则UNION中应使用ORDERBY子句来指定对结果集的排序顺序。在合并结果时,将从结果集中删除重复行。若使用ALL,结果集中包含所有的行。,30,【例8-15】用UNION子句将student表中学生的学号、姓名及teacher表中教师号、教师姓名组合在一个结果集中。USEjwglGOSELECTstudent_id,student_nameFROMstudentUNIONSELECTteacher_id,teacher_nameFROMteacher,本节首页,31,8.3.3使用GROUP子句和GROUPBY子句,如果要在数据检索时对表中数据按照一定条件进行分组汇总或求平均值,就要在SELECT语句中与GROUPBY子句一起使用集合函数。使用GROUPBY子句进行数据检索可得到数据分类的汇总统计、平均值或其它统计信息。1.GROUPBY子句的语法形式GROUPBY子句的语法形式如下:SELECTcolumn_name_listFROMtable_nameWHEREsearch_conditionGROUPBYALLaggregate_expressionnHAVINGsearch_condition,32,其中:aggregate_expression:分组表达式search_condition:对分组汇总后数据进入结果集的筛选条件在使用GROUPBY子句时,注意以下几点:SQLServer为每个定义的组产生一个列值,每个组只返回一行,不返回详细信息。如果包括WHERE子句,SQLServer只分组汇总满足WHERE条件的行。在包含GROUPBY子句的查询语句中,SELECT子句后的所有字段列表,除集合函数外,都应包含在GROUPBY子句中,否则将出错。GROUPBY子句的列表中最多只能有8060个字节。不要在含有空值的列上使用GROUPBY子句,因为空值将作为一个组来处理。如果GROUPBY子句使用ALL关键字,WHERE子句将不起作用。HAVING子句排除不满足条件的组。,33,2.不带HAVING的GROUPBY子句的用法使用GROUPBY子句进行分组查询,SQLServer把查询到的数据划分成多个组,并且为每个组返回一个结果。GROUPBY子句是按列或表达式分组汇总,为每组产生一个值,一般和集合函数一起使用。【例8-16】用GROUPBY句汇总出student_course表中学生的学号及总成绩。USEjwglGOSELECT学号=student_id,总成绩=sum(grade)FROMstudent_courseGROUPBYstudent_id,34,3.带HAVING的GROUPBY子句的用法对数据分组汇总时,也可以用HAVING子句对分组汇总后进入结果集的各组进行限制。HAVING子句的作用同WHERE子句相似,都是给出查询条件。所不同的是,WHERE子句是检查每条记录是否满足条件,而HAVING子句是检查分组汇总之后的各组汇总数据是否满足条件。HAVING子句是针对GROUPBY子句的,没有GROUPBY子句时使用HAVING子句是没有意义的。【例8-17】用GROUPBY句汇总出student_course表中总分大于450分的学生的学号及总成绩。USEjwglGOSELECT学号=student_id,总成绩=sum(grade)FROMstudent_courseGROUPBYstudent_idHAVINGsum(grade)450,本节首页,35,8.3.4使用COMPUTE和COMPUTEBY子句,使用GROUP子句对查询出来的数据做分类求和或求平均值,只能显示统计的结果,看不到具体的数据。使用COMPUTE和COMPUTEBY就既能浏览数据又看到统计的结果。COMPUTEBY子句的语法形式如下:COMPUTErow_aggregate(column_name)nBYcolumn_name_list【例8-18】用COMPUTE子句汇总出student_course表中每个学生的学号及总成绩。USEjwglGOSELECT学号=student_id,成绩=gradeFROMstudent_courseORDERBYstudent_idCOMPUTESUM(grade),36,COMPUTE类似于总计。如在COMPUTE后加上BY关键字,则查询的结果为带具体内容的分类统计。【例8-19】用COMPUTEBY子句按学号汇总出student_course表中每个学生的的学号及总成绩。USEjwglGOSELECT学号=student_id,成绩=gradeFROMstudent_courseORDERBYstudent_idCOMPUTESUM(grade)BYstudent_id,37,值得注意的是,在使用COMPUTE和COMPUTEBY时,有如下限制:DISTINCT不允许同集合函数一起用,不能包含text、ntext、image数据类型。COMPUTE子句中的列必须在SELECT后面的选择列表中。SELECTINTO不与COMPUTE子句一起使用。若使用了COMPUTEBY,则必须使用ORDERBY。COMPUTEBY后出现的列必须与ORDERBY后出现的列相同,或者是它的子集。它必须具有相同的从左到右顺序并且以相同的表达式开头,不能跳过任何表达式。,本节首页,38,8.3.5嵌套查询,如果先通过一个查询查出一个结果集,再在这个结果集中进行查询的话就是嵌套查询。嵌套查询是用一条SELECT语句作为另一条SELECT语句的一部分。外层的SELECT语句叫外部查询,内层的SELECT语句叫内部查询(或子查询)。嵌套查询的执行流程是,首先执行内部查询,它查询出来的数据并不被显示出来,而是传递给外层SELECT语句,作为该SELECT语句的查询条件使用。子查询可以多层嵌套。1.使用IN或NOTIN关键字单值子查询是指子查询只返回一行数据。多值子查询是指子查询返回的不是一行而是一组行数据。前者可以用“=”、IN或NOTIN和其外部查询相联系,后者则必须使用IN或NOTIN和其外部查询相联系。IN表示属于的关系,即是否在所选数据集合之中。NOTIN则表示不属于集合或不是集合的成员。,39,【例8-20】查询出“g99402”班所有男生的学号、课程号及相应的成绩。USEjwglGOSELECTstudent_course.student_id,student_course.course_id,student_course.gradeFROMstudent_courseWHEREstudent_idIN(SELECTstudent_idFROMstudentWHEREclass_id=g99402ANDsex=1),40,2.使用EXSISTS或NOTEXSISTS关键字EXISTS关键字用来确定数据是否在查询列表中存在。EXISTS表示一个子查询至少返回一行时条件成立。和使用IN关键字不同的是,IN连接的是表中的列,而EXISTS连接的是表和表,通常不需要特别指出列名,可以直接使用*。由于EXISTS连接的是表,所以,子查询中必须加入表与表之间的连接条件。【例8-21】使用EXSISTS关键字查询出“g99403”班学生的学号、课程号及相应的成绩。USEjwglGOSELECTstudent_course.student_id,student_course.course_id,student_course.gradeFROMstudent_courseWHEREEXISTS(SELECT*FROMstudentWHEREstudent_course.student_id=student.student_idANDstudent.class_id=g99403),41,3.使用嵌套子查询的几点说明:首先对子查询(内部查询)求值。外部查询依赖于子查询的求值结果。子查询必须被括在圆括号内。以比较操作符引导的子查询的选择列表只能包括一个表达式或列名。否则SQLServer会报错。,本节首页,42,8.3.6在查询的基础上创建新表,SELECTINTO的作用是,在查询的基础上创建新表。若建临时表,必须在表前设置#(局部临时表)或#(全局临时表)。新表的行和列是来自查询结果,临时表是创建在tempdb数据库上。【例8-22】创建#temp_grade的临时表,该临时表有两个列:student_id,grade,要求学生的成绩grade大于95分。然后,再从临时表#temp_grade查询数据。USEjwglGOSELECTstudent_id,gradeinto#temp_gradeFROMstudent_courseWHEREgrade=95USEtempdbGOSELECT*FROM#temp_grade,43,也可以用SELECT语句创建一个永久表。永久表是创建在基表所在的数据库里。【例8-23】创建grade_table的永久表,该临时表有两个列:student_id,grade.要求学生的成绩grade大于95分。USEjwglGOSE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教学仪器教育设备管理制度
- 无菌车间人工灌装设备管理制度
- 金融科技风险控制-第3篇-洞察阐释
- 森林火情监测设备管理制度
- 汽车贴膜车间设备管理制度
- 消防防护区及相关设备管理制度
- 针灸针的药效学研究-洞察阐释
- 珠宝公司办公室日常管理制度
- 新型血肿溶解药物研究-洞察阐释
- 矿泉水公司电气设备管理制度
- 2024年山东省济南市市中区中考二模地理试卷
- 2024-2029年中国外卖包装行业市场现状分析及竞争格局与投资发展研究报告
- (高清版)DZT 0270-2014 地下水监测井建设规范
- 2024中国中车总部招聘笔试参考题库附带答案详解
- 电网防高坠安全教育
- 压铸模具热处理
- 20221011锂电池行业数字化转型MES整体解决方案
- TDT 1070.1-2022 矿山生态修复技术规范 第1部分:通则
- 高校学科建设与发展规划
- 2024届广东省广州市部分区及学校生物七下期末达标检测试题含解析
- 2024年大学试题(教育学)-教育学原理历年考试高频考点试题附带答案
评论
0/150
提交评论