版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章数据的查询数据查询是数据库编程中最基础的一部分,也是最核心的一部分,它是从数据库中检索符合条件的数据记录的选择过程。基于T-SQL语言的SQLServer数据查询,其最基本的语句是SELECT语句。SELECT语句的语法结构基本SELECT查询基于条件的查询对查询结果排序输出查询结果的新建表存储聚合函数在查询中的使用查询结果汇总多表连接查询嵌套查询小结7.1SELECT语句的语法结构SELECT语句功能相当强大,语法也比较复杂,为了对SELECT各语句进行详细讲解说明,首先列出SELECT语句的各个子句。SELECT语句的语法格式如下:SELECTFieldNameList
[ALL|DISTINCT][TOPn[PERCENT]][INTONewTableName]FROMTableNameList
[WHERECondition][ORDERBYOrder_FieldName[ASC|DESC]][GROUPBYGroup_FieldName][HAVINGHavingCondition]7.2基本SELECT查询通常我们只是使用最基本的SECLECT查询语句,因此熟知SELECT语句的基本语法显得十分重要,最基本的SELECT语句格式为:SELECTFieldNameList
[ALL|DISTINCT]FROMTableNameList
7.2.1查询表中所有的列如果一个数据表中有很多列,但是需要读取数据表中所有列的值,因此如何将数据表简便的显示出来成为一个问题,SQL为我们提供了“*”符号,用来代替所有的字段。7.2.2查询表中指定列的信息从例7.1中可以看出,使用“*”可以很方便地得出表中所有信息,但是更多时候用户查询时需要的并不是所有列的信息,因此这种效率低下的使用“*”来查询所以列的方法并不是很好的方法。常用的比较有效的方法是在查询时逐一指定所需要查询的列名。7.2.3在查询列表中使用列表达式在SELECT语句中可以使用算术运算符对文字型数据列进行加、减、乘、除以及取余(%)运算,从而构造列表达式来取得经过计算处理过的查询结果。7.2.4重新命名结果列名有些时候,为了突出数据处理后所代表的意义,数据查询的结果经常要指定列名,这样更利于程序的可读性和课理解性。并且,在数据库应用中常出现以下问题:列的名称为英文名称,查询结果不易查看,我们想为其起个中文别名。多表查询时出现相同的列名,如果同时对多个表进行查询,结果表中出现相同的列名,容易引起混淆或者不能引用这些列,只能为这些列起个别名。当SELECT子句的选择列为表达式时,当SELECT子句的选择列为表达式时,在查询结果中无法显示,只能为该表达式起个别名。SQL语言提供了两种方法解决这些问题。1.使用AS关键字2.使用“=”7.2.4重新命名结果列名7.2.5说明列的定义很多时候,使用SELECT语句查询的结果很难阅读,因为显示出来的数据是一些不连贯的信息。为了增加查询结果的可读性,可以在SELECT语句中增加一些说明列,增加的说明文字用单引号引起来。7.2.6取得查询结果的部分行集在SQL语句中,我们使用TOP子句限制返回到结果集中的行数,其语法如下:TOPn[precent]n指定返回的行数。如果没有指定precent,n就是返回的行数,如果指定了percent,n就是返回的结果集行的百分比。7.2.6取得查询结果的部分行集7.3基于条件的查询在实际查询中,我们可能要求查询部分数据记录,即根据给定的查询条件,查询出符合要求的记录。条件查询其实是在二维表的横向来进行筛选。这个筛选是WHERE自己中指定查询条件来完成。其具体语法格式如下:SELECTFieldNameList
[ALL|DISTINCT][TOPn[PERCENT]]FROMTableNameList
[WHERECondition]根据Condition的不同来实现不同的查询。7.3.1使用关系表达式表示查询条件在WHERE的条件中,可以将关系运算符和列名构成关系表达式,从而实现条件查询。主要的关系运算符有:>(大于)、<(小于)、>=(大于等于)、<=(小于等于)、=(等于)、<>(不等于)。7.3.2使用逻辑表达式表示查询条件前面,我们所用到的是对单一条件的查询,对记录的筛选鼻尖简单。WHERE子句中可以使用逻辑运算符将若干查询条件连接起来,从而更精确的筛选记录行,可用以下逻辑运算符。(1)AND,用AND连接两个关系表达式,只有两个关系表达式都成立时结果才为真,只要两个关系(2)OR,用OR连接两个关系表达式,只要两个关系表达式有一个成立时结果就为真。如果连个关系表达式都不成立时,其结果为假。7.3.2使用逻辑表达式表示查询条件7.3.3使用LIKE关键字进行模糊查询一些时候,我们要查询的条件是不确定的。例如,对于要查询的人名,我们不能准确的获得其信息,我们只知道姓,或者只知道名,在这种情况下,我们就需要知道的信息进行模糊查询。在SQL中,给出LIKE运算法来进行字符串的模糊匹配。即查找指定的属性列值与匹配串相匹配匹配字符串可使用通配符。语法格式:[NOT]LIKE‘<匹配符>’通配符及其含义:%:代表任意多个字符。_:代表单个任意字符。[]:指定某个字符的取值范围。[^]:指定某个字符排除的取值范围。7.3.3使用LIKE关键字进行模糊查询7.3.4使用BETWEEN…AND关键字表示查询条件我们在平时进行SQL操作时除了运用比较运算符进行查询,也可以使用BETWEEN关键字指定某个范围内查询。其语法格式如下:[NOT]BETWEEN数值一AND数值二7.3.5IN关键字表示查询条件IN关键字可以查询符合列表中任何一个值的记录。它可以取出不连续的,离散的一些列值。如要查询年龄为23岁,25岁,26岁的学生信息时,虽然用逻辑运算符和比较运算符可以完成,但是这样过于繁琐,因此,使用IN关键字成为一种需要。其语法格式如下:列名IN(列值1,列值2…….)7.3.5IN关键字表示查询条件7.3.6NULL关键字的使用在数据表中,有些字段可以设置为空,这些字段可能没有输入值,这时改字段的值为空(NULL),使用NULL或者NOTNULL关键字可以查询某一个字段值为空或者不为空的记录。7.4对查询结果排序输出一般情况下,使用SQL语言进行数据库查询得到的数据记录行是无序的,它只是按照记录在表的顺序排列。但是我们为了显性的表示其中各条记录的关系,我们需要将这些数据记录按照一定的顺序排列,这时可以使用ORDERBY子句,从而将查询结果按指定的列进行排序。查询排序的语法格式为:SELECTFieldNameList
[ALL|DISTINCT]FROMTableNameList
[WHERECondition][ORDERBYOrder_FieldName[ASC|DESC]]7.4对查询结果排序输出7.5查询结果的新建表存储一些时候,查询出来的信息作为重要的资源需要进行保存以便进行更进一步的加工处理,因此将其保存成为一种需要。SELECT语句提供了这种方法,在查询数据时,可以设定将数据存储到一个新建表中。将查询结果存入表中的语法如下:SELECTFieldNameList
[ALL|DISTINCT][INTONewTableName]FROMTableNameList
7.5查询结果的新建表存储7.6聚合函数在查询中的使用聚合函数是对一组值执行计算并返回单一的值。聚合函数忽略空值。聚合函数经常与SELECT语句的GROUPBY子句一同使用。所有聚合函数都具有确定性。任何时候用一组给定的输入值调用它们时,都返回相同的值。7.6.1SUM函数这个函数通常在SELECT语句中使用,返回系列值的总数。其语法格式如下:SUM([ALL[DISTINCT]表达式)【例7-20】显示一个公司一年销售业绩总和,假设月销售价格总额存在price列中,数据表名为ProductOrders,执行脚本代码如下:SELECTSUM(price)AStotal_price
FROMProductOrders7.6.2AVG函数AVG函数(平均函数)使用方法和SUM类似,它给我们提供系列值的算术平均数。其语法格式如下:AVG([ALL[DISTINCT]表达式)【例7-21】计算某公司每月的销售额,假设月销售价格总额存在price列中,数据表名为ProductOrders,执行脚本代码如下:SELECTAVG(price)AStotal_price
FROMProductOrders7.6.3MAX函数MAX()函数返回给定数据集中的最大值。我们可以给该函数一个字段名称来返回表中给定字段的最大值。还可以在MAX()函数中使用表达式和GROUPBY从句来加强查找功能。其语法格式如下:MAX(表达式)【例7-22】查询某公司一年中销售额最大的值,假设月销售价格总额存在price列中,数据表名为ProductOrders,执行脚本代码如下:SELECTMAX(price)AS“maxPrice”FROMProductOrders7.6.4MIN函数MIN()函数的用法与MAX函数类似,但返回表达式的最小值。其语法格式如下:MIN(表达式)【例7-23】查询某公司一年中销售额最小的值,假设月销售价格总额存在price列中,数据表名为ProductOrders,执行脚本代码如下:SELECTMIN(price)AS“MinPrice”FROMProductOrders7.6.5COUNT和COUNT(*)函数SQL提供了COUNT函数来查询满足设定标准的记录的数量。我们可以使用单独COUNT(*)语法来检索一个表内的行数。此外,还可以利用WHERE子句来设置计数条件,返回特定记录的条数。COUNT和COUNT(*)语法如下:COUNT([ALL[DISTINCT]表达式)COUNT(*)7.7查询结果的汇总数据汇总是对查询结果集进行求总和、求平均、求最大值、求最小值的计算的汇总统计。前面例子的统计函数是对整个数据表中的数据进行统计,但实际应用中往往需要进行分组统计和汇总,此时我们就需要用GROUPBY子句进行汇总。GGROUPBY列名是指按照指定的列名进行分组(即列值相同的记录组成一组),对每一组进行汇总计算。其语法格式如下:SELECTFieldNameList
[ALL|DISTINCT]FROMTableNameList
[WHERECondition][GROUPBYGroup_FieldName][HAVINGHavingCondition]7.7查询结果的汇总7.8多表连接查询前面的查询都是对单一表进行操作,但是在数据库实际编程中,往往需要查询许多数据,有可能这些数据出现在两个或者两个以上的表中,我们却希望这些数据出现在一个结果集中,这就要用到连接查询。在SQLSERVER中,可以使用ANSI连接语法形式,使连接协助FROM中,使用JOIN…ON关键字。另一种是早起的SQLServer连接语法形式,连接写在WHERE子句中。在SQLServer2005中,推荐使用ANSI形式的连接。两种形式的语法如下:SQLServer连接的语法格式:SELECT查询列表FROM表1,表2WHERE表1.列1<比较运算符>表2.列27.8.1内连接内连接也称为等同连接,返回的结果集是两个表中所有相匹配的数据,而舍弃不匹配的数据。也就是说,在这种查询中,DBMS只返回来自源表中的相关的行,即查询的结果表包含的两源表行,必须满足ON子句中的搜索条件。作为对照,如果在源表中的行在另一表中没有对应(相关)的行,则该行就被过滤掉,不会包括在结果表中。内连接使用比较运算符来完成。内连接可分为两种。1:等值连接,使用等于号(=)比较被连接列的列值,在查询结果中列出被连接表中的所有列,包括其中的重复列;2:不等连接,在连接条件中,可以使用其他比较运算符,比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。7.8.2外连接不管是内连接还是带WHERE子句的多表查询,都组合自多个表,并生成结果表。换句话说,如果任何一个源表中的行在另一个源表中没有匹配,DBMS将不把该行放在最后的结果表中。而外连接告诉ODBC生成的结果表,不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。SQL的外连接共有3种类型:左外连接,关键字为LEFTOUTERJOIN、右外连接,关键字为RIGHTOUTERJOIN和全外连接,关键字为FULLOUTERJOIN。外连接的用法和内连接一样,只是将INNERJOIN关键字替换为相应的外连接关键字即可。7.8.3交叉连接(CROSSJOIN)除了在FROM子句中使用逗号间隔连接的表外,SQL还支持另一种被称为交叉连接的操作,它们都返回被连接的两个表所有数据行的笛卡尔积,返回到的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。唯一的不同在于,交叉连接分开列名时,使用CROSSJOIN关键字而不是逗号。7.8.4自连接连接除了可以在多个不同的表中进行外,也可以在同一个表中进行连接,即自连接。自连接可以看做一张表的两个副本之间进行的连接。在自连接中,必须知道两个别名,使之在逻辑上成为两张表。7.9嵌套查询关于查询的嵌套,即在一个外层查询中包含另一个内层查询,相当于在一个SELECT语句中的WHERE子句中,包含有另一个SELECT语句,或者将一个SELECT语句作为另一个SELECT语句的新增列。嵌套查询也叫做子查询,可完成复杂的查询操作。通常情况下,嵌套查询可以写出连接的形式,但是有事写成连接形式会比较复杂,不容易理解,因此将其写成嵌套的形式,以将复杂的查询分解成简单的、容易理解的嵌套查询。使用子查询一般要注意以下几点:先执行括号里面的SQL语句,一层层到外面;内部查询只执行一次;如果里层的结果集返回多个,不能用=><>=<=等比较符要用IN.。7.9.1子查询作为新增列【例7-31】用子查询显示学号,并把对应学生的平均成绩输出。USEstu--打开数据库stuSELECTavg_score=(SELECTAVG(score)FROMscore)FROMscoreorderbyscore.id--显示学生平均成绩7.9.1子查询作为新增列7.9.2使用IN关键字进行子查询IN表示属于,即如果表达式的值属于子查询返回得到结果的值,则满足查询条件。相反,NOTIN表示不属于。其语法格式如下:WHERE表达式[NOT]IN(子查询)7.9.3使用比较运算符比较运算符包括:>(大于),<(小于),>=(大于等于),<=(小于等于),<>(不等于)。其语法格式如下:WHERE表达式比较运算符[ANY\ALL](子查询)7.9.4使用BETWEEN关键字为了求出在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024安全生产培训
- 2024至2030年中国处方插数据监测研究报告
- 2023年液压破拆属具项目综合评估报告
- 2024年特色风味及小吃服务项目成效分析报告
- 2024至2030年中国自动上胶折边机数据监测研究报告
- 2024至2030年中国灵敏(扇形)分裂式分度凸轮数据监测研究报告
- 2024至2030年中国数字检流计数据监测研究报告
- 2024至2030年中国室内外装饰材料行业投资前景及策略咨询研究报告
- 2024至2030年中国变色瓷杯数据监测研究报告
- 内蒙古巴彦淖尔市(2024年-2025年小学五年级语文)人教版小升初真题((上下)学期)试卷及答案
- 2024至2030年中国方形保鲜盒数据监测研究报告
- 天津市河西区2023-2024学年九年级上学期期中英语试题
- 8.3 法治社会 课件高中政治统编版必修三政治与法治
- 第八课 法治中国建设 课件高考政治一轮复习统编版必修三政治与法治
- JGJ162-2008-建筑施工模板安全技术规范
- 2024年山西省文化旅游投资控股集团限公司校园招聘120人高频难、易错点500题模拟试题附带答案详解
- 2024年新北师大版数学一年级上册 第4单元 10以内数加与减 第9课时 可爱的企鹅 教学课件
- 2024年中国敞篷车市场调查研究报告
- 江西九江富和建设投资集团有限公司招聘笔试题库2024
- 光伏消防演练方案及流程
- TCISA 415-2024 高炉本体数字孪生系统技术要求
评论
0/150
提交评论