SQL_server_2008_数据查询_详解.doc

上传人:hw****26 文档编号:3552864 上传时间:2019-06-04 格式:DOC 页数:52 大小:2.30MB
下载 相关 举报
SQL_server_2008_数据查询_详解.doc_第1页
第1页 / 共52页
SQL_server_2008_数据查询_详解.doc_第2页
第2页 / 共52页
SQL_server_2008_数据查询_详解.doc_第3页
第3页 / 共52页
SQL_server_2008_数据查询_详解.doc_第4页
第4页 / 共52页
SQL_server_2008_数据查询_详解.doc_第5页
第5页 / 共52页
点击查看更多>>
资源描述

1、第 5 章 数据查询和管理关系数据的一个重要内容就是可以在任意两个表中存在关系。这种关系为查询带来新的内容,通过不同的连接查询可以将不同表之间的不同列返回到同一个结果集中,从而组成需要的结果。在 SQL Server 2008 数据库系统中,SELCET 语句是 T-SQL 语言中的核心内容。数据查询功能通过 SELECT 语句来实现。 SELECT 语句可以从数据库中按照用户的需要检索数据,并将查询结果以表格的形式输出。本章将主要介绍 SELECT 语句的使用方法,以及如何连接多个表进行查询、使用子查询、XML 查询等。本章学习目标: 了解基本连接 掌握内连接的使用方法 掌握外连接的使用方法

2、 掌握交叉连接 理解子查询的分类及其含义 掌握嵌套子查询 理解 XML 数据类型 掌握 XQuery 方法5.1 SELECT 简单查询SELECT 语句是数据库最基本的语句之一,同时也是 SQL 编程技术最常用的语句。使用 SELECT 语句不但可以在数据库中精确地查找某条信息,而且还可以模糊地查找带有某项特征的多条数据。这在很大程度上方便了用户查找数据信息。本节将主要介绍 SELECT 语句的语法基础,并通过实例演示 SELECT 语句的使用方法。5.1.1 SELECT 基本语法SELECT 语句是一个查询表达式,包括 SELECT、FROM、WHERE、GROUP BY 和ORDER

3、BY 子句。SELECT 语句具有数据查询、统计、分组和排序的功能,可以精确地对数据库进行查找,也可以进行模糊查询。SELECT 语句有自己的语法结构,使用该语句时一定要严格执行其语法结构。加之其子句有很多,这里只列举它的主要子句格式,如下所示:SELECT ALL|DISTINCTselect_listINTO new_tableFROM table_sourceWHERE search_conditionsGROUP BY group_by_expressionHAVING search_conditionsORDER BY order_expressionASC|DESC上面格式中,SE

4、LECT 查询语句中共有 5 个子句,其中 SELECT 和 FROM 语句为必选子句,而 WHERE、GROUP BY 和 ORDER BY 子句为可选子句。内的部分为可选项且大写内容为关键字。下面对各种参数进行详细说明。 SELECT 子句 用来指定由 查询返回的列,并且各列在 SELECT 子句中的顺序决定了它们在结果表中的顺序。 ALL|DISTINCT 用来标识 在查询结果集中对相同行的处理方式。关键字 ALL 表示返回查询结果集的所有行,其中包括重复行;关键字 DISTINCT 表示若结果集中有相同的数据行则只保留显示一行,默 认值为 ALL。 select_list 用来指定要显

5、示的目标列,若要显示多个目标列,则各列名之间用半角逗号隔开;若要返回所有列,则可以用 “*”表示。 INTO new_table 用来创建一个新的数据表,new_table 为新表的名称,表的数据为查询的结果集。 FROM table_source 子句 用来指定数据源, table_source 为数据源表名称。 WHERE search_conditions 子句 用来指定限定返回的行的搜索条件,search_conditions为条件表达式。 GROUP BY group_by_expression 子句 用来指定查询结果的分组条件,即 归纳信息类型,group_by_expressio

6、n 为分组所依据的表达式。 HAVING search_conditions 子句 用来指定组或聚合的搜索条件,search_conditions 为分组后的条件表达式。 ORDER BY order_expressionASC|DESC子句 用来指定结果集的排序方式, ASC 表示结果集以升序排列,DESC 表示结果集以降序排列,默认情况下结 果集以 ASC 升序排列。在使用 SELECT 语句时,还要遵守以下两条规则:1 SELECT 语法中子句的测试顺序SELECT 语句中的 FROM、WHERE、GROUP BY 和 HAVING 等子句称为表表达式,它们在执行 SELECT 语句时首

7、先被测试,并且每个子句按照某种次序被依次测试。了解了这种测试顺序,在用户创建较复杂的 SELECT 语句时非常有用。测试表示 SELECT 语句在系统中的执行,其结果是一个虚拟表,用于以后的测试。具体地说,前一个子句的测试结果将用于下一个子句,直到表表达式的每个子句都被测试完毕。SELECT 语句中首先要测试的子句是 FROM 子句。如果指定了WHERE 子句,那么 FROM 子句的测试结果将用于 WHERE 子句。如果没有 WHERE子句,那么 FROM 子句的测试将用于下一个指定的子句。在表达式中的最后一个子句被测试完之后,此时的测试结果才用于 SELECT 子句,而 SELECT 子句的

8、测试结果用于 ORDER BY 子句。总的来说,SELECT 语句的测试顺序为:FROM 子句WHERE 子句(可选)GROUP BY 子句(可选)HAVING 子句(可选)SELECT 子句ORDER BY 子句(可选)了解该测试顺序对于提高查询效率有很大意义,这种效率在简单的查询语句中表现的并不明显。但是一旦用户使用了复杂的查询语句,尤其是在处理连接和子查询时,不了解 SELECT 语句的测试顺序将严重影响 SELECT 语句的查询效率。2引用对象名称约定若使用 SELECT 语句查询时,所引用对象的数据库不是当前数据库或引用的列名不明确时,为了保证查询的正确性,在引用数据表或列时需要使用

9、数据库或数据表名来限定数据表或列的名称。 如果要引用某数据表名称,而当前数据 库不是所引用对象的数据 库,就需要使用 USE语句将当前数据库设置为该表所在的数据库。例如,当前数据库为“网店场管理系统”,而 现在要引用“工 资管理系统 ”数据库中的“ 员工信息”数据表,这时需要在前面加上“USE 工资管理系统”语句。 如果当前使用的列名不明确是哪个数据表中的列,就需要通 过给该 列指定表名来确定其数据源。例如,在同一数据表中的多个表中都存在着名为“员工编号”的列,当进行多表操作时,如果只使用“员工 编号” 指定选择条件,就会出现歧义,所以需要通过表名来明确所要指定的 “员工编号” 列,即使用 “

10、员工信息.员工编号和工资信息.员工编号” 表示。5.1.2 使用 SELECT 语句前面已经详细介绍了 SELECT 及其子句的语法格式,本节将主要列举实例,单独介绍 SELECT 语句的使用方法而并不涉及它的各个子句。关于其子句的使用方法及其特点将在后面的章节中详细介绍。1使用 SELECT 获取表中所有信息SELECT 语句可以返回表中所有的内容,并按照表中的顺序与格式进行排列,其语法格式为:SELECT *FROM table_list其中值得注意的是“* ”,它表示源表中所有的信息,而 table_list 则表示查找数据信息的源表。由于它并不改变源表中的信息格式,因此使用该语句得到的

11、查询结果可以看到源表的结构。例如,查询“网店购物系统”数据库中“商品信息”表中的所有列,在数据库引擎查询窗口中输入 SELECT 语句:USE 网店购物系统SELECT *FROM 商品信息执行上面命令后,可以在 SQL Server 2008 窗口中看到如图 5-1 所示的结果。图 5-1 查询表中的所有列2使用 SELECT 获取表中若干列使用 SELECT 还可以获取表中指定的一列或者几列数据。返回结果中列的排列顺序为用户查询语句中指定的顺序,而各列中的数据顺则是源表的排列序列。使用 SELECT 获取表中若干列的语法如下所示:SELECT column1, column2, colum

12、n3FROM table_list上面信息中 column 表中源表中某一列,如果需要查询列数较多,各列之间应使用“,”符号分隔。例如同样在“商品信息”表中,查询“商品名称” 、 “商品价格”和“库存数量”三列数据,可以使用下面语句:USE 网店购物系统SELECT 商品名称, 商品价格, 库存数量 FROM 商品信息执行完该语句后,结果如图 5-2 所示。图 5-2 查询多列的结果在获取表中某些列时,在返回结果中用户可以为这些列重命名,这种操作并不改变数据库中表的列名,只显示在返回结果中。为列重命名的语法格式为:SELECT column1 AS Name1,column2 AS Name2

13、,column3 AS Name3FROM table_list其中 AS Name 为重命名过程,上面格式中将 column1 命名为 Name1.例如将“商品名称” 、 “商品价格”和“库存数量”三列重命名为“货物名称” 、 “销售价格”和“剩余数量” ,使用如下的语句。USE 网店购物系统SELECT 商品名称 AS 货物名称, 商品价格 AS 销售价格, 库存数量 AS 剩余数量FROM 商品信息执行语句后,可以得到如图 5-3 所示的结果。图 5-3 对列名进行重命名3使用 SELECT 获取相异行在数据库中数据难免会出现重复行的现象,例如“网店购物系统”数据库中“注册会员”表的“会

14、员地址”列记录了注册会员所在的地区或城市,而有些注册会员生活在同一个城市。如果用户希望在查询返回结果删除重复行,可以在SELECT 子句中使用 DISTINCT 关键字。首先使用下面的语句查看“网店购物系统”数据库中“注册会员”表“会员地址”列中的信息,查询语句如下所示:USE 网店购物系统SELECT 会员地址 FROM 注册会员执行语句后,得到如图 5-4 所示的结果。图 5-4 获取单列信息此时,用户可以使用 DISTINCT 关键字重新获得一列值,从而去除了相同的行,语句如下所示。USE 网店购物系统SELECT DISTINCT 会员地址 FROM 注册会员执行语句后,得到如图 5-

15、5 所示的结果。图 5-5 获取相异行4返回若干行前面介绍的几种方法可以分别获得表的全部信息或单独获取某个列,使用SELECT 还可以指定表中返回的行数,使用方法如下所示。SELECT TOP n *|columnFROM tableTOP n 用于指定查询结果返回的行数。该返回值有个特点:其返回结果一定是返回表中从上往下的 n 行信息。TOP n 与“* ”连用表示返回该表中所有列的前 n 条信息,而与 column 连用表示返回某 column 列的前 n 条信息。例如返回“注册会员”表中“会员地址”列的前 10 条信息,可以使用下面的语句:USE 网店购物系统SELECT TOP 10

16、会员地址 FROM 注册会员执行该语句后,可以得到如图 5-6 所示的结果。图 5-6 获取前 10 行的信息5.1.3 使用 From 子句FROM 子句是 SELECT 语句中必不可少的子句,该语句用于指定要读取的数据所在的一个表或几个表的名称,使用 FROM 子句表示要输出信息的来源。 FROM 子句的基本语法格式如下所示:FROM table_source其中,table_source 指定要在 Transact-SQL 语句中使用的表、视图或派生表源(有无别名均可) 。虽然语句中可用的表源个数的限值根据可用内存和查询中其他表达式的复杂性而有所不同,但一个语句中最多可使用 256 个表

17、源。单个查询可能不支持最多有 256 个表源。可将 table 变量指定为表源。如果查询中引用了许多表,查询性能会受到影响。编译和优化时间也受到其他因素的影响。这些因素包括:每个 是否有索引和索引视图,以及SELECT 语句中的大小。表源在 FROM 关键字后的顺序不影响返回的结果集。如果 FROM 子句中出现重复的名称,SQL Server 会返回错误 。在指定 table_source 表的同时也可以使用 AS 关键字给该表定义一个别名,别名可带来使用上的方便,也可用于区分自联接或子查询中的表或视图。别名往往是一个缩短了的表名,用于在联接中引用表的特定列。如果联接中的多个表中存在相同的列名

18、,SQL Server 要求使用表名、视图名或别名来限定列名。如果定义了别名则不能使用表名。下面来对“网店购物系统”数据库中的“注册会员”表进行简单查询,并对“注册会员”表定义别名为“会员信息” 。具体查询语句如下所示:USE 网店购物系统SELECT * FROM 注册会员 AS 会员信息执行该语句查询,得到结果如图 5-7 所示。图 5-7 查询结果5.1.4 使用 WHERE 子句在 SQL Server 数据库中查询数据时,有时需要定义严格的查询条件,只查询所需要的数据,而并非是数据表中的所有数据,那么就可以使用 SELECT 语句中的 WHERE 子句来实现。它类似一个筛选器,通过用

19、户定义的查询条件,来保留从 FROM 子句中返回并满足条件的数据。WHERE 子句被用于选取需要检索的数据行,灵活地使用 WHERE 子句能够指定许多不同的查询条件,以实现更精确的查询,如精确查询数据库中某条语句的某项数据值或在 WHERE 子句中使用表达式。在 SELECT 查询语句中,使用 WHERE 子句时一般语法结构为:SELECT condition FROM table WHERE searchcondition其中,search_conditions 为用户选取所需查询的数据行的条件,即查询返回的行记录的满足条件。对于用户所需要的所有行,search_conditions 条件为

20、 true;而对于其他行,search_conditions 条件为 false 或者未知。WHERE 子句使用灵活,searchcondition 有多种使用方式,表 5-1 列出了 WHERE 子句中可以使用的条件。表 5-1 WHERE 子句使用的条件类别 运算符 说明比较运算符 =、=、 比较两个表达式逻辑运算符 AND、OR、NOT 组合两个表达式的运算结果或取反范围运算符 BETWEEN、NOT BETWEEN 搜索值是否在范围内列表运算符 IN、NOT IN 查询值是否属于列表值之一字符匹配符 LIKE、NOT LIKE 字符串是否匹配未知值 IS NULL、IS NOT NUL

21、L 查询值是否为 NULL针对表 5-1 列举的查询条件,下面将详细介绍他们在 WHERE 子句中的使用方法及其功能。1比较运算符WHERE 子句的比较运算符主要有=、 、=、和 !=,分别表示等于、小于、大于、大于等于、小于等于、不等于(和!=都表示不等于) ,使用他们对查询条件进行限定。下面通过几个实例,详细介绍这些比较运算符的使用方法。 等于“=” 运算符在“网店购物系统”数据库“商品信息”表中查询商品编号为 45104017 的“商品名称” 、 “商品价格”以及“库存数量” ,此时,用户可以使用下面的语句:USE 网店购物系统SELECT 商品名称, 商品价格, 库存数量 FROM 商

22、品信息 WHERE 商品编号 =45104017上面语句中使用“商品编号 =45104017”指定查询条件,且该条件中 “=”后面的内容使用单引号括起来。执行该语句后,得到结果如图 5-8 所示。图 5-8 使用等于运算符指定查询条件 使用小于“” 运算符小于运算符使用方法和注意事项与等于运算符基本相同,使用小于运算符可以指定查询的某个范围,例如查询“商品信息”表中“商品价格”小于 300 元的“商品编号” 、 “商品名称”以及“库存数量” ,使用下面语句:USE 网店购物系统SELECT 商品名称, 商品价格, 库存数量 FROM 商品信息 WHERE 商品价格 300执行该语句后,得到结果如图 5-9 所示。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育教学资料库 > 精品笔记

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。