数据库的简单查询.ppt

上传人:wj 文档编号:11259172 上传时间:2023-05-30 格式:PPT 页数:106 大小:659.50KB
下载 相关 举报
数据库的简单查询.ppt_第1页
第1页 / 共106页
数据库的简单查询.ppt_第2页
第2页 / 共106页
数据库的简单查询.ppt_第3页
第3页 / 共106页
数据库的简单查询.ppt_第4页
第4页 / 共106页
数据库的简单查询.ppt_第5页
第5页 / 共106页
数据库的简单查询.ppt_第6页
第6页 / 共106页
数据库的简单查询.ppt_第7页
第7页 / 共106页
数据库的简单查询.ppt_第8页
第8页 / 共106页
数据库的简单查询.ppt_第9页
第9页 / 共106页
数据库的简单查询.ppt_第10页
第10页 / 共106页
数据库的简单查询.ppt_第11页
第11页 / 共106页
数据库的简单查询.ppt_第12页
第12页 / 共106页
数据库的简单查询.ppt_第13页
第13页 / 共106页
数据库的简单查询.ppt_第14页
第14页 / 共106页
数据库的简单查询.ppt_第15页
第15页 / 共106页
数据库的简单查询.ppt_第16页
第16页 / 共106页
数据库的简单查询.ppt_第17页
第17页 / 共106页
数据库的简单查询.ppt_第18页
第18页 / 共106页
数据库的简单查询.ppt_第19页
第19页 / 共106页
数据库的简单查询.ppt_第20页
第20页 / 共106页
亲,该文档总共106页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数据库的简单查询.ppt

《数据库的简单查询.ppt》由会员分享,可在线阅读,更多相关《数据库的简单查询.ppt(106页珍藏版)》请在冰点文库上搜索。

数据库的简单查询.ppt

本章学习目标l掌握SELECT语句结构l熟练使用SELECT语句查询数据,查询(Query)又称为检索,是数据库最核心、最基本的操作之一。

查询操作用来从数据表或视图中迅捷地搜索并提取所需数据。

查询得到的数据称为查询结果数据集,简称查询数据集。

查询数据集只是一个虚拟表,按照表的形式组织并显示出来,通常不被存储,也不会被放在缓冲区中,每次查询都会重新从数据表中提取。

查询数据集中的数据可以进一步进行计算、统计、汇总及分析,最终按用户的需求组织输出。

SELECT语句的基本语法格式如下:

SELECTALL|DISTINCTTOP()PERCENTINTOFROM,.nWHEREGROUPBYHAVINGORDERBYASC|DESCCOMPUTE聚合函数(),.nBY,.n;,目标项列表的作用是指定查询结果数据集中包含的各个数据项表达式。

目标项列表表达展开范式如下:

*|$IDENTITY|$ROWGUID|(参数,.n)|AS|=,.n,无条件查询单一表是指查询操作仅限于对一个数据表进行,并且不使用条件查询子句筛选记录。

可以通过指定要检索的列名。

查询的结果数据列表是独立的数据显示,对源表中的数据没有任意影响。

中的列名顺序并不需要完全遵照源表中列的排列次序,用户可以根据需要自由调整列的显示顺序。

实现按照表原有的列的次序显示表的所有数据有以下两种方法:

在中按源表中各列名的排列顺序包含表的所有列名;使用星号(*)来简化的表达。

中可以包含常量、变量及用户定义的表达式。

系统执行查询时,将先计算这类非列名的数据项的值,然后在查询结果列表中显示其值。

对于中的字符串常量与日期时间常量,需要用一对英文单引号将常量值括起来。

目标项列表中可以包含函数及由运算符连接的各类表达式。

当查询语句带有函数或表达式时,通常使用列别名机制来改善显示效果。

可以在SELECT语句中为某些列定义一个更有意义的别名,使得在查询结果中以该列的别名做为列标题显示相应数据。

列别名是一串具有语义的字符,可以包含汉字。

为某个表达式项定义列别名的子句格式为:

AS列别名或让它直接出现在中,即简化为如下格式:

列别名,列别名通常作为字符串,可以将列别名放入一对中括号()或一对英文单引号()中,指明列别名为字符串类型。

也可以对列别名不用字符串标识符,让它直接出现在中。

通过使用赋值号(即等于号=)将列名或表达式赋予列别名的方法来实现。

使用赋值号为某个表达式定义列别名的语法格式为:

列别名=,用SELECT语句检索表中部分字段列值数据时,可能会造成在查询结果集中包含多条重复的记录行。

可通过选用ALL或DISTINCT选项关键字对这些重复行进行保留或消除的处理操作。

SELECT语句中使用ALL关键字,可显示检索到的所有行,无论这些行的数据相同与否。

ALL关键字是SELECT语句的默认选项。

SELECT语句中使用DISTINCT关键字,可从检索到的数据行去除重复的记录。

相同的记录在结果集中只保留第一条,从而保证记录的唯一性。

SELECT语句还可以使用TOP及PERCENT关键字,从查询结果集中选择由指定的前若干行或前百分比数目的行。

语法格式如下:

SELECTALL|DISTINCTTOP()PERCENT,可以通过SELECT语句的WHERE子句构造记录的筛选条件,选择出满足条件的部分记录,组成查询数据集,从而避免检索出数据表中所有的数据行,这就是条件查询。

WHERE子句一般放在FROM子句后面。

基本语法格式如下:

SELECTFROMWHERE,简单查询通过在查询条件表达式中使用比较运算符、范围运算符、集合运算符及空值运算符,构造出检索条件,完成查询数据集的生成。

比较运算符是搜索条件中最常使用的一类运算符,主要用于对两个表达式的比较运算。

语法格式为:

比较运算符,范围运算符BETWEENAND与NOTBETWEENAND用来限制查询数据的范围。

使用BETWEENAND运算符的条件表达式语法格式如下:

WHEREBETWEEN取值范围下限AND取值范围上限,集合运算符IN与NOTIN也可用来限制查询数据的范围。

使用集合运算符的条件表达式语法格式如下:

WHERENOTIN(值1,值2,值n),模糊查询是指在一些只针对字符型数据或日期时间型数据进行查询的应用中,无法给出精确的检索条件,只能提供一些并不完全确定的线索来搜索信息。

用LIKE或NOTLIKE关键字可以构造特殊的条件表达式,用于检索与特定字符串匹配的字符型或日期时间型数据。

模糊查询的条件表达式语法格式如下:

匹配表达式NOTLIKE,复合条件查询是指在WHERE子句中使用逻辑运算符将两个或两个以上的条件表达式组合起来,构成综合检索条件,完成更为复杂的查询任务。

复合条件中可以使用的逻辑运算符包括:

NOT:

NOT对一个条件表达式进行逻辑非运算;AND:

连接两个条件表达式,完成逻辑与运算;OR连接两个条件表达式,完成逻辑或运算。

9.1SELECT语句结构SELECT在SQL语言中,是使用频率最高的语句,它具有强大的查询功能。

SELECT是SQL语言的灵魂。

SELECT语句的作用是让数据库服务器根据客户端的要求搜寻出用户所需要的信息资料,并按用户规定的格式进行整理后返回给客户端。

SELECT语句除可以查看普通数据库中的表格和视图的信息外,还可以查看SQLServer的系统信息。

SELECT语句的语法格式如下:

SELECTselect_listINTOnew_table_nameFROMtable_sourceWHEREsearch_conditionGROUPBYgroup_by_expressionHAVINGsearch_conditionORDERBYorder_expressionASC|DESC,其中:

select_list指明要查询的选择列表。

INTOnew_table_name指定用查询的结果创建成一个新表。

new_table_name为新表名称。

FROMtable_source指定所查询的表或视图的名称。

WHEREsearch_condition指明查询所要满足的条件。

GROUPBYgroup_by_expression根据指定列中的值对结果集进行分组。

HAVINGsearch_condition对用FROM、WHERE或GROUPBY子句创建的中间结果集进行行的筛选。

它通常与GROUPBY子句一起使用。

ORDERBYorder_expressionASC|DESC对查询结果集中的行重新排序。

ASC和DESC关键字分别用于指定按升序或降序排序。

如果省略ASC或DESC,则系统默认为升序。

5.2使用SELECT语句查询数据5.2.1使用SELECT子句SELECT子句的语法为:

SELECTALL|DISTINCTTOPnPERCENTWITHTIES其中:

ALL关键字为默认设置,用于指定查询结果集的所有行,包括重复行。

DISTINCT用于删除结果集中重复的行。

TOPnPERCENT指定只返回查询结果集中的前n行。

如果加了PERCENT,则表示只返回查询结果集中的前n%行。

WITHTIES用于指定从基本结果集中返回附加的行,与Topn和Orderby一起使用。

select_list指明要查询的选择列表。

【例9-1】查询学生基本信息表中的所有信息。

在查询分析器中运行如下命令:

USEXSCJGOSELECT*FROM学生基本信息表GO,【例9-2】在学生基本信息表中查询学生的学号、姓名、性别和族别信息。

在查询分析器中运行如下命令:

USEXSCJGOSELECT学号,姓名,性别,族别FROM学生基本信息表GO,【例9-3】从学生基本信息表中查询学生由哪些民族构成。

从例2结果可知,学生的族别有多行重复,要快速查询学生的民族构成,实际上就是对相同值的族别只需要显示一行,可使用DISTINCT关键字实现。

在查询分析器中运行如下命令:

USEXSCJGOSELECTDISTINCT族别FROM学生基本信息表GO,【例9-4】显示课程信息表中前5行的信息。

在查询分析器中运行如下命令:

USEXSCJGOSELECTTOP5*FROM学生基本信息表GO,【例9-5】从学生基本信息表中只显示5%的信息。

在查询分析器中运行如下命令:

USEXSCJGOSELECTTOP5PERCENT*FROM学生基本信息表GO运行结果如图5-5所示。

学生基本信息表共有106行数据,6行约占106行的5%,所以使用TOP5PERCENT检索前5%的数据行,其结果是只显示6行信息。

例:

在publishers表中,查询除国家为中国的前3个国家出版商的pub_id,pub_name,country信息。

Selecttop3withtiespub_id,pub_name,countryFrompublishersWherecountryChinaOrderBycountry,9.2.2使用INTO子句使用INTO子句可以创建一个新表,并将查询结果直接插入到新表中。

但是用户必须:

1、在要创建新表的数据库中拥有CREATETABLE权限;2、INTO子句不能与COMPUTE子句一起使用。

【例9-6】从学生基本信息表中查询所有团员的信息资料,并形成新表为团员基本信息表。

在查询分析器中运行如下命令:

SELECT*INTO团员基本信息表FROM学生基本信息表WHERE政治面貌=团员GOSELECT*FROM团员基本信息表GO,9.2.3使用FROM子句FROM子句用于指定SELECT语句查询的源表、视图、派生表和联接表,中间用逗号隔开。

在FROM子句中最多可以使用16个表或视图。

【例9-7】从成绩表中查询学生成绩。

在查询分析器中运行如下命令:

USEXSCJGOSELECT*FROM成绩表GO。

【例9-8】从相关表中查询每一位学生的学号、姓名、课程名称、成绩。

在查询分析器中运行如下命令:

USEXSCJGOSELECT学生基本信息表.学号,姓名,课程名称,成绩FROM学生基本信息表,课程信息表,成绩表WHERE学生基本信息表.学号=成绩表.学号AND课程信息表.课程编号=成绩表.课程编号GO,9.2.4使用WHERE子句WHERE子句用于指明查询所要满足的条件。

通常情况下,必须定义一个或多个条件限制检索选择的数据行。

WHERE子句后跟逻辑表达式,结果集将返回表达式为真的数据行。

在WHERE子句中,可以包含比较运算符、逻辑运算符。

例如“1985年1月1日以后出生的女生”可表示为:

出生日期1985-01-01AND性别=女“成绩60分以上”可表示为:

成绩=60或者NOT(成绩60),【例9-9】在课程信息表中查找“Delphi程序设计”课程的任课老师。

在查询分析器中运行如下命令:

USEXSCJGOSELECT任课教师FROM课程信息表WHERE课程名称=Delphi程序设计GO,【例9-10】查询少数民族学生的基本情况。

在查询分析器中运行如下命令:

USEXSCJGOSELECT*FROM学生基本信息表WHERE族别汉族GO,【例9-11】检索1985年1月1日以后出生的女生基本信息。

在查询分析器中运行如下命令:

USEXSCJGOSELECT*FROM学生基本信息表WHERE出生日期1985-01-01AND性别=女GO,9.2.5使用GROUPBY子句本子句写在WHERE子句之后,用于对查询的结果集进行分组。

当使用GROUPBY子句进行分组时,SELECT子句的选项列表中可以包含聚合函数,但子句后的各列或包含在聚合函数中或包含在GROUPBY子句中,否则,SQLServer将返回如下错误信息:

“表名.列名在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在GROUPBY子句中。

”,【例9-12】查询每位同学的课程门数、总成绩、平均成绩。

查询每位学生的课程成绩情况,实际上就是按照“学号”列分类统计,可使用GROUPBY学号子句,统计课程门数、总成绩、平均成绩分别可以使用聚合函数COUNT(课程编号)、SUM(成绩)、AVG(成绩)。

在查询分析器中运行如下命令:

USEXSCJGOSELECT学号,COUNT(课程编号)AS课程门数,SUM(成绩)AS总成绩,AVG(成绩)AS平均成绩FROM成绩表GROUPBY学号GO,【例】用列别名更改字段列的标题省略AS(以英文词语作为各字段列的标题)SELECT学号xuehaoFROM成绩表,5.2.6HAVING子句HAVING用于限定组或聚合函数的查询条件,通常用在GROUPBY子句之后。

其作用与WHERE子句基本一样。

但WHERE子句是对原始记录进行过滤,HAVING子句对查询结果进行过滤,而且SELECT子句和HAVING子句中可以使用聚合函数,WHERE子句中不能使用聚合函数。

【例9-13】从学生基本信息表中统计各民族学生人数。

此例实际上是将要对学生按民族进行分类统计,可使用聚合函数COUNT(族别)实现功能。

在查询分析器中运行如下命令:

USEXSCJSELECT族别,COUNT(族别)AS学生人数FROM学生基本信息表GROUPBY族别GO,【例9-14】从学生基本信息表中统计汉族学生的人数。

此例就是在上例统计出各民族学生人数的基础上进一步限定查询汉族学生人数,可在GROUPBY子句之后跟HAVING族别=汉族子句实现此功能。

在查询分析器中运行如下命令:

USEXSCJGOSELECT族别,COUNT(族别)AS学生人数FROM学生基本信息表GROUPBY族别HAVING族别=汉族GO,此例也可使用WHERE子句完成功能。

USEXSCJGOSELECT族别,COUNT(族别)AS学生人数FROM学生基本信息表WHERE族别=汉族GROUPBY族别GO,【例9-15】显示平均成绩大于等于80分以上的学生情况。

此例的限定条件是AVG(成绩)=80,只能使用HAVING子句,如果使用WHERE子句限定条件,则系统会显示如图5-16所示的错误信息。

错误使用WHERE子句的SELECT语句如下:

USEXSCJGOSELECT学号,AVG(成绩)AS平均成绩FROM成绩表WHEREAVG(成绩)=80GROUPBY学号GO,使用HAVING子句的正确语句如下:

USEXSCJGOSELECT学号,AVG(成绩)AS平均成绩FROM成绩表GROUPBY学号HAVINGAVG(成绩)=80GO,9.2.7ORDERBY子句ORDERBY子句对查询结果集中的行进行重新排序,ASC和DESC关键字分别用于指定按升序或降序排序,系统默认为升序。

可以在ORDERBY子句中指定多个排序列,即嵌套排序,检索结果首先按第1列进行排序,对第1列值相同的那些数据行,再按照第2列排序依此类推。

要求ORDERBY子句要写在WHERE子句的后面,而且在ORDERBY子句中不能使用ntext、text和image列。

【例9-16】将学生平均成绩按升序排序。

在查询分析器中运行如下命令:

SELECT学号,AVG(成绩)AS平均成绩FROM成绩表GROUPBY学号ORDERBYAVG(成绩)GO,【例9-17】查询成绩表中的全部信息,要求查询结果首先按学号升序排序,学号相同时,按成绩降序排序。

在查询分析器中运行如下命令:

SELECT*FROM成绩表ORDERBY学号,成绩DESCGO,9.2.8使用COMPUTE子句COMPUTE子句用在WHERE子句之后,用来计算总计并进行分组小计,可使用聚合函数,总计值或小计值将作为附加新行出现在检索结果中。

使用COMPUTE子句时必须使用ORDERBY对COMPUTEBY中BY指定的列进行排序,否则将出现错误信息。

【例9-18】按学号显示学生成绩,并计算每人的平均成绩和总成绩。

此例要求按人对课程及成绩进行分组显示,并计算每人的平均成绩、总成绩。

则显示成绩应按学号分类,分组计算平均成绩、总成绩的语句为COMPUTEAVG(成绩),SUM(成绩)BY学号,使用COMPUTEBY子句首先要用ORDERBY子句对要分组的学号列排序,即ORDERBY学号。

在查询分析器中运行如下命令:

SELECT*FROM成绩表ORDERBY学号COMPUTEAVG(成绩),SUM(成绩)BY学号GO,9.3使用其它子句或关键字查询数据9.3.1联合查询联合查询是指将两个或两个以上的SELECT语句通过UNION运算符连接起来的查询。

联合查询可以将两个或更多查询的结果组合为单个结果集,该结果集包含联合查询中所有查询的全部行。

使用UNION组合多个查询的结果时,必须注意:

所有查询中的列数和列的顺序必须相同且数据类型必须兼容。

【例9-19】从系部表中检索系部名称,从班级表中检索班级名称。

在查询分析器中运行如下命令:

USEXSCJGOSELECT系部名称FROM系部表UNIONSELECT班级名称FROM班级表GOUNION结果集的列标题取自第一个SELECT语句。

9.3.2检索某一范围内的信息检索在某一范围内的信息,需要使用WHERE子句限定查询条件,这个条件通常是一个逻辑表达式。

在表达式中除了可以使用比较运算符=(等于)、(大于)、(不等于)等外,还可使用范围运算符BETWEEN、NOTBETWEEN、IN、LIKE、ISNULL等,逻辑运算符NOT(非)、OR(或)、AND(与)等来限定查询条件。

1使用BETWEEN关键字BETWEEN关键字总是与AND一起使用,用来检索在一个指定范围内的信息,NOTBETWEEN检索不在某一范围内的信息。

【例9-20】查询1985年出生的学生基本信息。

1985年出生的学生即出生日期在1985年1月1日至12月31日之间的学生。

在查询分析器中运行如下命令:

USEXSCJGOSELECT*FROM学生基本信息表WHERE出生日期BETWEEN1985-01-01AND1985-12-31GO,【例9-21】查询不及格学生成绩信息。

查询不及格学生成绩信息,也就是查询059之间的学生成绩,可用BETWEEN关键字表示为:

WHERE成绩BETWEEN0AND59。

在查询分析器中运行如下命令:

USEXSCJGOSELECT*FROM成绩表WHERE成绩BETWEEN0AND59GO,2使用IN关键字IN关键字允许用户选择与列表中的值相匹配的行,指定项必须用括号括起来,并用逗号隔开,表示“或”的关系。

NOTIN表示含义正好相反。

【例9-22】查询课程编号为002、003、007、014的课程编号、课程名称、任课教师和上课时间。

在查询分析器中运行如下命令:

USEXSCJGOSELECT课程编号,课程名称,任课教师,上课时间FROM课程信息表WHERE课程编号IN(002,003,007,014)GO,在查询分析器中运行以下命令,也可得到相同的查询结果,但这种写法显然比较繁琐。

SELECT课程编号,课程名称,任课教师,上课时间FROM课程信息表WHERE课程编号=002OR课程编号=003OR课程编号=007OR课程编号=014,3使用LIKE关键字LIKE关键字用于查询与指定的某些字符串表达式模糊匹配的数据行。

LIKE后的表达式被定义为字符串,必须用单引号()括起来,字符串中可以使用4种通配符。

它们是:

%:

可匹配任意类型和长度的字符串。

_(下划线):

可匹配任何单个字符。

指定范围或集合中的任何单个字符。

不属于指定范围或集合的任何单个字符。

例如:

LIKE刘%LIKE%技术%LIKE_秀%a-iLIKEmw-z%,【例9-23】检索所有姓刘的学生基本信息。

在查询分析器中运行如下命令:

USEXSCJGOSELECT*FROM学生基本信息表WHERE姓名LIKE刘%GO,【例9-24】检索包含“技术”两字的课程信息。

在查询分析器中运行如下命令:

USEXSCJGOSELECT*FROM课程信息表WHERE课程名称LIKE%技术%GO,【例9-25】检索少数民族学生的基本信息。

在查询分析器中运行如下命令:

USEXSCJGOSELECT*FROM学生基本信息表WHERE族别NOTLIKE汉族GO,【例9-26】查询第2个字为“丽”的学生信息。

在查询分析器中运行如下命令:

USEXSCJGOSELECT*FROM学生基本信息表WHERE姓名LIKE_丽%GO,4、使用ISNULL关键字ISNULL关键字可以检索数据列中没有赋值的行。

【例9-27】查询课程信息表中教师未定的课程信息。

在查询分析器中运行如下命令:

USEXSCJSELECT*FROM课程信息表WHERE任课教师ISNULLGO,9.3.3指定结果集的列的别名有时需要为查询结果集中的某些列增加可读性或者为没有名称的导出列指定名称,可使用AS子句。

【例9-28】统计成绩表中各门课程的学生人数、总成绩、平均成绩。

在查询分析器中运行如下命令:

USEXSCJGOSELECT课程编号,COUNT(学号)AS学生人数,SUM(成绩)AS总成绩,AVG(成绩)AS平均成绩FROM成绩表GROUPBY课程编号GO,9.3.4子查询子查询是在查询中包含另一个查询的查询。

它本身是一个SELECT查询,可以代替表达式出现在WHERE子句中。

它返回单个值且嵌套在SELECT、INSERT、UPDATE、DELETE语句或其它子查询中。

子查询的SELECT查询总是使用圆括号括起来,且不能包括COMPUTE子句,如果同时指定TOP子句,则可能只包括ORDERBY子句。

【例9-37】检索单科成绩高于全班平均分的学生成绩信息。

在查询分析器中运行如下命令:

USEXSCJGOSELECT*FROM成绩表WHERE成绩(SELECTAVG(成绩)FROM成绩表)GO,9.4连接查询由于连接涉及多个表及其之间的引用,所以列的引用均必须明确,对于重复的列名必须用表名限定。

对多个表或视图进行查询,需要在FROM子句或WHERE子句中定义连接条件。

在FROM子句中定义连接的语法形式为:

FROM表1连接类型JOIN表2ON表1.列=表2.列在WHERE子句中定义连接的语法形式为:

FROM表1,表2WHERE表1.列连接操作表2.列但由于在FROM子句中指定连接条件有助于区分连接条件与WHERE子句中指定的搜索条件,所以建议使用FROM子句的方法。

连接的类型有内连接、外连接、交叉连接3种。

9.4.1内联接内连接(INNERJOIN)是组合两个表的常用方法,它将两个表中的列进行比较,将两个表中满足连接条件的行组合起来,作为结果。

内连接有等值连接、自然连接和不等值连接3种。

1相等连接相等连接是将要连接的列值使用等值运算符(=)作相等比较后所作的连接,返回所有列(包括重复列)。

因为连接的列要显示两次,所以会产生冗余。

【例9-29】检索系部信息和班级信息。

在查询分析器中运行如下命令:

USEXSCJGOSELECT*FROM系部表,班级表WHERE系部表.系部编号=班级表.系部编号GO,使用ANSI连接语法的SELECT语句如下:

SELECT*FROM系部表INNERJOIN班级表ON系部表.系部编号=班级表.系部编号2自然连接自然连接是将要连接的列作相等比较的连接,但连接的列只显示一次,因而消除了等值连接产生的冗余。

【例9

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

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2