背景:                 
[本书目录] [图书首页] [本书讨论区]  
链接地址:http://www.17xie.com/read-8568.html    注册17xie 一起来写书 实现您的出书梦想!

第六章  数据检索

学习数据库技术,必须正确地掌握检索数据的方法。在本章中将介绍各种数据检索的方法,主要介绍用SQL Server查询分析器通过Transact-SQL语句建立查询,并在熟悉Transact-SQL语句的基础上,介绍高级查询以及SQL Server如何处理数据并发和记录锁定。

本章主要包括以下内容:

n         建立查询

n         使用全文本查询

n         使用连接查询

n         建立子查询

6.1  建立查询

SQL Server数据库系统中输入数据后,就必须有检索数据、修改数据、增加数据和删除数据的功能模块。在MicrosoftSQL Server 2000中,有以下几种访问数据的方法:

n         基于窗体或图形化的工具,比如AccessVisual Basic中的工具。

n         交互式SQL Server工具,比如osql实用程序和SQL Server查询分析器。可以使用Transact-SQL语句直接查看生成的结果。

n         通过使用API,比如ADDOLE DBODBC等建立用于检索和操作数据的应用程序。

@        osql使用程序可以在命令行以交互方式输入Transact-SQL语句,还可以提交oaql作业并把输出结果定向到文本文件而不在命令提示下显示。

可以使用Transact-SQL语句直接与SQL Server通信,在MicrosoftSQL Server 2000中,可以利用Transact_SQL语句操作数据库对象和存储过程,有以下四个核心的SQL语句:

n         SELECT语句:用于检索已有数据。

n         UPDATE语句:用于编辑现有数据。

n         INSERT语句:用于插入数据。

n         DELETE语句:用于删除数据。

Microsoft SQL Server 2000中,可以使用SQL Server查询分析器生成特别的查询。图6-1显示了样本数据库Northwind中表Employees中的EmployeeIDLastNameFirstName的查询结果,是利用SQL Server查询分析器执行的。

SQL Server查询分析器中,还可以用包含Transact-SQL语句的文本文件,执行其中的语句,并在Result窗格中显示结果。在查询分析器中有彩色编码编辑器,可以帮助检查语法。

6-1  使用SQL查询分析器的执行结果

另外,在SQL Server查询分析器中,还可以进行以下工作:

n         进行索引分析。

n         浏览执行查询的统计信息。

n         浏览查询执行计划的图形表示。

n         显示执行计划。

n         进行查询分析。

可以用以下两种方法之一启动SQL Server查询分析器:

n         打开Microsoft SQL Server程序组,单击SQL Server Query Analyzer可以启动SQL Server查询分析器。

n         运行SQL Server Enterprise Manager,选择Tools菜单,然后单击SQL Server Query Analyzer,也可以启动SQL Server查询分析器。

启动后的查询分析器窗口如图6-2所示。

在查询分析器中,可以非常方便地获得帮助信息。按F1键或者在Help菜单中选择相应的选项可以获得与查询分析器有关的帮助信息;选择Transact-SQL语句使其高亮显示,然后按Shift+F1键可以获得语法帮助;选择Transact-SQL语句中的数据库对象并按Alt+F1键可以获得对象的属性帮助信息。

如果要设置查询分析器的选项,可以单击Tools菜单,然后选择Options选项,可以打开如图6-3所示的对话框,在该对话框中,有七个选项卡:GeneralConnection PropertiesFontsScriptEditorResultsConnections,默认选项卡是General

 

6-2  SQL查询分析器窗口

6-3  General选项卡

General选项卡中,可以设置查询文件目录、查询结果文件目录、模板文件目录以及它们的扩展名。另外,还有三个复选框,可以进行进一步设置。

选择Results选项卡,如图6-4所示。在该选项卡中可以设置查询结果的输出形式,在Default results targetResult output format两个下拉式列表中选择相应的选项即可。图6-1是在栅格中显示查询结果,图6-5是在文本中显示结果。

6-4  Result选项卡

6-5  用文本形式输出

另外,也可以在工具栏上单击Execute mode按钮旁边的箭头,然后选择输出结果的形式。单击Query菜单,选择Execute菜单命令或单击工具栏上的Execute按钮执行查询。

6.2  全文本和分布式查询

本节介绍全文本查询和分布式查询。在SQL Server数据库中保存着大量的文本信息。低版本的SQL Server只能通过模式匹配的形式检索,在SQL Server 2000中,可以对数据库中保存的数据进行全文本查询和分布式查询。

6.2.1  全文本查询

进行全文本查询要完成以下几个任务:

1)注册在全文本查询中的列和表。

2)对注册的列建立索引。

3)对注册的列建立全文本索引。

4)要保证数据改变和索引改变同步。

建立全文本查询可以使用SQL Server Enterprise Manager或者系统存储过程。使用SQL Server Enterprise Manager建立全文本查询的操作步骤如下:

1)运行SQL Server Enterprise Manager

2)单击Tools菜单,选择Wizards,打开执行向导对话框,如图6-6所示。

6-6  选择向导对话框

3)单击Database左边的“+”号,展开Database,然后双击Full-Text Indexing Wizard。启动全文本索引向导,如图6-7所示。

6-7  全文本索引向导

4)单击“下一步”按钮,打开如图6-8所示的选择数据库对话框,在下拉式列表中选择要建立全文本查询的数据库。

6-8  选择数据库

5)单击“下一步”按钮,打开如图6-9所示的对话框。在其中选择将要建立全文本查询的表。

6-9  选择表

6)单击“下一步”按钮,打开如图6-10所示的对话框,选择需要的索引。

 

 

6-10  选择索引

7设置完成后,单击“下一步”按钮,打开如图6-11所示的对话框,选择表中的列。

8)单击“下一步”按钮,将出现如图6-12所示的完成对话框。该对话框列出了创建过程中的一些设置,如果需要修改,单击“上一步”按钮重新进行设置,单击“完成”按钮完成创建过程。

6-11  选择表中的列

 

 

6-12  完成全文索引向导

6.2.2  分布式查询

使用分布式查询可以访问同一台计算机或者不同计算机上存放的数据以及存放在多个SQL Server服务器上的分布式数据和在关系型或非关系型数据库中存放的异构数据。

如果要进行异构数据源的分布式查询,需要有OLE DB提供者或ODBC驱动器。如果使用OLE DB驱动器,可以访问行集中的数据。

@        如果用OLE DB作为外部数据接口,还需要安装ODBSSQL ServerJETOracle数据库的OLE DB提供者。

如果通过OLE DB使用外部数据,需要提供以下信息:

n         OLE DB提供者名称

n         OLE DB提供者寻找数据源所需的信息

n         登录ID

n         行集的对象名或者查询名

如果经常需要分布式查询,可以使用链接服务器访问OLE DB数据源。链接服务器可以使用sp_addlindedserver系统存储过程。

@        关于分布式查询的其它具体内容本书中不做讨论,如果读者需要了解相关知识,可以参考SQL Server的高级教程。

6.3  连接查询

在数据库实际应用中,常常需要从两个或者两个以上表中检索数据,这时候就需要使用连接查询。连接查询就是以指定的表中的某个或某些列作为连接条件同时从这些表中检索数据。在Microsoft SQL Server 2000中,可以使用以下两种连接形式:

 

n         用于FROM子句中的ANSI连接语法形式。

n         用于WHERE子句的SQL Server连接语法形式。

ANSI连接的语法形式为:

SELECT table_name.column_nametable_name.column_name,…

FROM{table_name[join_type]JOIN table_name ON search_conditions}

WHERE[search_condition]

ANSI连接中,可以使用以下关键字来确定连接形式:

n         使用INSERT JOIN关键字,结果集中只包括满足条件的列。

n         使用CROSS JOIN关键字,结果集中包含两个表中所有行的组合。

n         使用OUTER JOIN关键字,结果集中除了包含满足条件的行,还包含某个表中的全部行。

SQL Server连接的语法形式如下:

SELECT table_name,column_nametable_name,

FROM{table_name,table_name}

WHERE table_name,table_name join_operator table_name.column_name

FROM子句中列出了连接时使用到的全部表名,WHERE子句中是出现在结果集中的行。表6-1列出了在WHERE子句中可以使用的连接运算符。

6-1  连接运算符

运算符

含义

运算符

含义

=

等于

>=

大于等于

> 

大于

<=

小于等于

< 

小于

<> 

不等于

连接查询有多种类型,比如内连接,外连接、无限制连接、自连接等。外连接又分为左连接、右连接和全连接。下面分别介绍这几种形式。

6.3.1  内连接

所谓内连接就是把两个表连接从而生成第三个表,在第三表中只包含那些满足连接条件的行。内连接有两种形式:等价连接和自然连接。

等价连接就是连接列值相等的列,连接的列要显示两次,所以会产生冗余行。自然连接就是比较列值与两个或多个表中的列是否相等,连接的列只显示一次,清除等价连接产生的冗余行。

6-13所示是使用ANSI内连接语法形式的示例,在这个示例中,结果集中的数据行来自publishers表和authors表。在FROM子句的后面,使用了运算符INNER JOIN,并且用关键字ON指定连接条件。图6-14所示是使用SQL Server连接语法形式的示例。在这个示例中,得到了与上例相同的结果集。在这个查询语句中,FROM子句后面只有两个表的名称,没有指定两个表的连接形式,而是使用了关键字WHERE指定连接条件。

内连接是最常用的连接形式。在编写连接的查询语句时,连接条件非常重要,一定要保证连接条件的正确性。在使用ANSI连接语法形式时,使用关键字ON指定连接条件;在使用SQL Server连接语法形式时,是用关键字Where指定连接条件。

6-13  使用ANSI内连接语法形式

6-14  使用SQL Server连接语法形式

6.3.2  无限制连接

无限制连接,又称交叉连接,可以产生一个结果集。在这个结果集中,包含了所连接的两个表中所有行的全部组合。

无限制连接中既可以使用ANSI连接的CROSS JOIN关键字创建,也可以使用WHERE子句中的SQL Server连接形式创建。

无限制连接要产生非常大的结果集,比如,一个表中有20行,另外一个表中有30行,那么,在无限制连接的结果集中就有600行。

6-15所示是使用ANSI连接形式的无限制连接,图6-16所示是使用SQL Server连接形式的无限制连接。

6-15  使用ANSI连接形式的无限制连接

6-16  使用SQL Server连接形式的无限制连接

6.3.3  外连接

外连接只能用于两个表中,它限制一个表中的行,而不限制另外一个表中的行。也就是说,在外连接中,某些不满足条件的行也会显示出来。

ANSI语法形式中,外连接可以使用以下几个关键字:

n         LEFT OUTER JOIN(左连接)包括列表中第一个表中的全部行。

n         RIGHT OUTER JOIN(右连接)包括列表中第二个表中的全部行。

n         FULL OUTER JOIN包括两个表中所有不满足条件的行。

SQL Server连接语法形式中,可以使用以下两种外连接运算符:

n         *=包含第一个表中的全部行。

n         =*包含第二个表中的全部行。

6-17所示是使用ANSI的左外连接语法形式,图6-18所示是使用SQL Server的左外连接语法形式。

6-17  使用ANSI的左外连接语法形式

6-18  使用SQL Server的左外连接语法形式

6.3.4  自连接

自连接就是把一个表中的行和该表中另外一些行联系起来。自连接主要用来查询同一个表中的相同信息。为了进行自连接,必须为表指定两个别名,这样才能在逻辑上将该表作为两个不同的表使用。

自连接的ANSI语法形式如下:

SELECT column_namecolumn_name,…

FROM column_name alist[join_type]JOIN column_name alias

ON search_conditions

WHERE table_name.column_name join_operator table_name.column_name

自连接的SQL Server语法形式如下:

SELECT column_namecolumn_type,…

FROM column_name aliascolumn_name alias,…

WHERE table_name.column_name join_operator table_name.column_name

6-19所示是使用了ANSI的自连接语法形式,图6-20所示是使用了SQL Server的自连接语法形式。

6-19  使用了ANSI的自连接语法形式

6-20  使用了SQL Server的自连接语法形式

6.4  子查询

嵌套的SELECT语句称为子查询,SELECT语句可以嵌套在SELECTINSERTUPDATE或者DELETE等子句中。子查询有两种类型,一种是只返回一个单值的子查询;另一种是返回一列值的子查询。

6-21的示例包括两个单列单值的子查询。查询结果包括书号、销售量、总的销售量和该书销售量占总销售量的比例。图6-22的示例包含一个单列多值子查询。查询结果得到所有已经销售了的书。

6-21  单列单值子查询

6-22  单列多值子查询

6.5   

通过本章的学习,读者应掌握以下内容:

n         SELECT语句是检索数据的语句。在SELECT语句中,SELECT子句指定查询的选项,FROM子句指定表名,WHERE语句指定条件。

n         内连接把两个表连接成一个新表,新表中仅包含那些满足连接条件的记录行。

n         外连接只能用于两个表中,它限制一个表中的行,而不限制另外一个表中的行。也就是说,在外连接中,某些不满足条件的行也会显示出来。

n         无限制连接,又称交叉连接,可以产生一个结果集。在这个结果集中,包含了所连接的两个表中所有行的全部组合。

n         自连接就是把一个表中的行和该表中另外一些行联系起来。自连接主要用来查询同一个表中的相同信息。


字数:8819    最后更新:11个月以前 [12-01 13:06]徐振成 修改
本页编辑者:徐振成  
[前一页]:图5-8设计表窗口图  [后一页]:第七章 索 引
[在本页中加入书签] [收藏本书] [推荐本书]
  17xie论坛 > 本书讨论区 > 本页评论   (共0条)
发表评论

用户名称 匿名发表
评论内容
验证码

关于我们 | 版权声明 | 免责声明 | 诚聘英才 | 联系我们 | 合作伙伴 | 友情链接 | 广告合作 | 提交意见
Copyright © 2007 17xie.com 互联网协同写书平台 京ICP备08002671号