SQL非常全面的入门教程

上传人:1** 文档编号:324281 上传时间:2018-05-22 格式:DOC 页数:83 大小:298.50KB
返回 下载 相关 举报
SQL非常全面的入门教程_第1页
第1页 / 共83页
SQL非常全面的入门教程_第2页
第2页 / 共83页
SQL非常全面的入门教程_第3页
第3页 / 共83页
点击查看更多>>
资源描述
SQL语言快速入门入门教程 .2SQL 语言快速入门之一 .2SQL 语言快速入门之二 .3SQL 语言快速入门之三 .5基础教程 .10SQL 数据操作基础(初级)1 .10SQL 数据操作基础(初级)2 .13SQL 数据操作基础(初级)3 .16SQL 数据操作基础(初级)4 .20SQL 数据操作基础(初级)5 .25SQL 数据操作基础(中级) .27SQL 数据操作基础(中级)1 .27SQL 数据操作基础(中级)2 .28SQL 数据操作基础(中级)3 .31SQL 数据操作基础(中级)4 .35SQL 数据操作基础(中级)5 .39全面接触 SQL.44全面接触 SQL 语法(1) .44全面接触 SQL 语法(2) .46全面接触 SQL 语法(3) .47全面接触 SQL 语法(4) .49全面接触 SQL 语法(5) .51全面接触 SQL 语法(6) .53全面接触 SQL 语法(7) .55SQL 语法详解 .59主要 SQL 语句详解 (1) .59主要 SQL 语句详解 (2) .63SQL 语法参考手册 .67SQL 实践 .71SQL 实践 (1).71SQL 实践 (2).75Sql 连接查询 .80入门教程SQL 语言快速入门之一SQL 是英文 Structured Query Language 的缩写,意思为结构化查询语言。SQL 语言的主要功能就是同各种数据库建立联系,进行沟通。按照 ANSI(美国国家标准协会)的规定,SQL 被作为关系型数据库管理系统的标准语言。SQL 语句可以用来执行各种各样的操作,例如更新数据库中的数据,从数据库中提取数据等。目前,绝大多数流行的关系型数据库管理系统,如 Oracle, Sybase, Microsoft SQL Server, Access 等都采用了 SQL 语言标准。虽然很多数据库都对 SQL 语句进行了再开发和扩展,但是包括 Select, Insert, Update, Delete, Create,以及 Drop 在内的标准的 SQL 命令仍然可以被用来完成几乎所有的数据库操作。下面,我们就来详细介绍一下 SQL 语言的基本知识。数据库表格一个典型的关系型数据库通常由一个或多个被称作表格的对象组成。数据库中的所有数据或信息都被保存在这些数据库表格中。数据库中的每一个表格都具有自己唯一的表格名称,都是由行和列组成,其中每一列包括了该列名称,数据类型,以及列的其它属性等信息,而行则具体包含某一列的记录或数据。以下,是一个名为天气的数据库表格的实例。城市 最高气温 最低气温 北京 10 5 上海 15 8 天津 8 2 重庆 20 13 该表格中“城市” , “最高气温”和“最低气温”就是三个不同的列,而表格中的每一行则包含了具体的表格数据。数据查询在众多的 SQL 命令中,select 语句应该算是使用最频繁的。Select 语句主要被用来对数据库进行查询并返回符合用户查询标准的结果数据。Select 语句的语法格式如下:select column1 , column2,etc from tablenamewhere condition;(表示可选项)select 语句中位于 select 关键词之后的列名用来决定那些列将作为查询结果返回。用户可以按照自己的需要选择任意列,还可以使用通配符“*”来设定返回表格中的所有列。select 语句中位于 from 关键词之后的表格名称用来决定将要进行查询操作的目标表格。Select 语句中的 where 可选从句用来规定哪些数据值或哪些行将被作为查询结果返回或显示。在 where 条件从句中可以使用以下一些运算符来设定查询标准:=等于大于=大于等于不等于除了上面所提到的运算符外,LIKE 运算符在 where 条件从句中也非常重要。LIKE 运算符的功能非常强大,通过使用 LIKE 运算符可以设定只选择与用户规定格式相同的记录。此外,我们还可以使用通配符“%”用来代替任何字符串。举例如下:select firstname, lastname, cityfrom employeewhere firstname LIKE E%;(注意,字符串必须被包含在单括号内)上述 SQL 语句将会查询所有名称以 E 开头的姓名。或者,通过如下语句:select * from employeewhere firstname = May;查询所有名称为 May 的行。SQL 语言快速入门之二创建表格SQL 语言中的 create table 语句被用来建立新的数据库表格。Create table 语句的使用格式如下:create table tablename(column1 data type,column2 data type,column3 data type);如果用户希望在建立新表格时规定列的限制条件,可以使用可选的条件选项:create table tablename(column1 data type constraint,column2 data type constraint,column3 data type constraint);举例如下:create table employee(firstname varchar(15),lastname varchar(20),age number(3),address varchar(30),city varchar(20);简单来说,创建新表格时,在关键词 create table 后面加入所要建立的表格的名称,然后在括号内顺次设定各列的名称,数据类型,以及可选的限制条件等。注意,所有的 SQL 语句在结尾处都要使用“;”符号。使用 SQL 语句创建的数据库表格和表格中列的名称必须以字母开头,后面可以使用字母,数字或下划线,名称的长度不能超过30个字符。注意,用户在选择表格名称时不要使用 SQL 语言中的保留关键词,如 select, create, insert 等,作为表格或列的名称。数据类型用来设定某一个具体列中数据的类型。例如,在姓名列中只能采用 varchar 或 char 的数据类型,而不能使用 number 的数据类型。SQL 语言中较为常用的数据类型为:char(size):固定长度字符串,其中括号中的 size 用来设定字符串的最大长度。Char 类型的最大长度为255字节。varchar(size):可变长度字符串,最大长度由 size 设定。number(size):数字类型,其中数字的最大位数由 size 设定。Date:日期类型。number(size,d):数字类型,size 决定该数字总的最大位数,而 d 则用于设定该数字在小数点后的位数。最后,在创建新表格时需要注意的一点就是表格中列的限制条件。所谓限制条件就是当向特定列输入数据时所必须遵守的规则。例如,unique 这一限制条件要求某一列中不能存在两个值相同的记录,所有记录的值都必须是唯一的。除 unique 之外,较为常用的列的限制条件还包括 not null 和 primary key 等。Not null 用来规定表格中某一列的值不能为空。Primary key 则为表格中的所有记录规定了唯一的标识符。向表格中插入数据SQL 语言使用 insert 语句向数据库表格中插入或添加新的数据行。Insert语句的使用格式如下:insert into tablename(first_column,.last_column)values (first_value,.last_value);例如:insert into employee(firstname, lastname, age, address, city)values (Li, Ming, 45, No.77 Changan Road, Beijing”);简单来说,当向数据库表格中添加新记录时,在关键词 insert into 后面输入所要添加的表格名称,然后在括号中列出将要添加新值的列的名称。最后,在关键词 values 的后面按照前面输入的列的顺序对应的输入所有要添加的记录值。更新记录SQL 语言使用 update 语句更新或修改满足规定条件的现有记录。Update 语句的格式为:update tablenameset columnname = newvalue , nextcolumn = newvalue2.where columnname OPERATOR value and|or column OPERATOR value;例如:update employeeset age = age+1where first_name= Maryand last_name= Williams;使用 update 语句时,关键一点就是要设定好用于进行判断的 where 条件从句。删除记录SQL 语言使用 delete 语句删除数据库表格中的行或记录。Delete 语句的格式为:delete from tablenamewhere columnname OPERATOR value and|or column OPERATOR value;例如:delete from employeewhere lastname = May;简单来说,当需要删除某一行或某个记录时,在 delete from 关键词之后输入表格名称,然后在 where 从句中设定删除记录的判断条件。注意,如果用户在使用 delete 语句时不设定 where 从句,则表格中的所有记录将全部被删除。删除数据库表格在 SQL 语言中使用 drop table 命令删除某个表格以及该表格中的所有记录。Drop table 命令的使用格式为:drop table tablename;例如:drop table employee;如果用户希望将某个数据库表格完全删除,只需要在 drop table 命令后输入希望删除的表格名称即可。Drop table 命令的作用与删除表格中的所有记录不同。删除表格中的全部记录之后,该表格仍然存在,而且表格中列的信息不会改变。而使用 drop table 命令则会将整个数据库表格的所有信息全部删除。以上,我们对 SQL 语言主要的命令和语句进行了较为详细的介绍。应该说SQL 语句的语法结构和风格还是相当简单和直观的,只要用户结合实践多加练习,一定会在短期内迅速掌握。SQL 语言快速入门之三我们日常使用 SQL 语言的工作过程中,使用最多的还是从已经建立好的数据库中查询信息。下面,我们就来详细介绍一下如何使用 SQL 语言实现各种数据库查询操作。SELECTFROM为方便讲解,我们在数据库中创建名为 Store_Information 的如下数据表。Store_InformationStore_NameSalesDateLos Angeles$1500Jan-10-2000San Diego$250Jan-11-2000Los Angeles$300Jan-12-2000Boston$700Jan-12-2000SQL 语言中用于数据库查询的最简单的命令就是 SELECTFROM,语法格式为:SELECT column_name FROM table_name例如,如果我们希望查询 Store_Information 数据表中所有的商店名称时,可以使用如下命令:SELECT store_name FROM Store_Information查询结果显示为:Store_NameLos AngelesSan DiegoLos AngelesBoston如果用户希望一次查询多个字段,可以将所要查询的字段名称依次加入SELECT 关键字之后,中间用“, ”隔开即可。DISTINCTSELECT 关键字支持用户查询数据表中指定字段的所有数据,但是这样有时就会不可避免的出现重复信息。如果用户希望只查询那些具有不同记录值的信息的话,可以使用 SQL 语言的 DISTINCT 关键字。语法格式如下:SELECT DISTINCT column_nameFROM table_name例如,我们可以使用以下命令查询 Store_Information 数据表具有不同记录值的所有记录。SELECT DISTINCT Store_Name FROM Store_Information查询结果如下:Store_NameLos AngelesSan DiegoBostonWHERE除了选择具有不同记录值的记录之外,有时我们可能还会需要根据某些条件对数据库中的数据进行查询。例如,我们可能需要查询 Store_Information数据表中销售额超过1000美圆的商店。为此,我们可以使用 SQL 语言的 WHERE关键字设定查询条件。语法格式如下:SELECT column_nameFROM table_nameWHERE condition由此,我们可以使用如下命令查询销售额超过1000美圆的商店信息:SELECT store_name FROM Store_Information WHERE Sales 1000查询结果显示为:store_nameLos Angeles运算函数现在,我们已经了解到在使用 SQL 语言进行数据库查询操作时可以通过对数值的判断设定灵活的查询条件。为了增强对运算的支持能力,SQL 提供了众多实用的运算函数供广大用户使用。例如,我们可以直接在 SQL 命令中调用SUM 或 AVG 这两个分别用于计算总数和平均数的函数。语法格式如下:SELECT function type(column_name)FROM table_name如果我们希望查询 Store_Information 数据表中所有商店的总销售额的话,可以使用如下命令:SELECT SUM(Sales) FROM Store_Information查询结果显示为:SUM(Sales)$2750COUNT除了 SUM 和 AVG 函数之外,COUNT 函数是 SQL 语言中另一个较为常用的运算函数。COUNT 函数可以用来计算数据表中指定字段所包含的记录数目。语法格式为:SELECT COUNT(column_name)FROM table_name例如,如果我们希望查询 Store_Information 数据表中的有关商店的记录条数时,可以使用如下命令:SELECT COUNT(store_name)FROM Store_Information查询结果显示为:Count(store_name)4COUNT 函数可以和 DISTINCT 关键字一起使用从而可以查询数据表中指定字段中所有具有不同记录值的记录数目。例如,如果我们希望查询Store_Information 数据表中不同商店的数目时,可以使用如下命令:SELECT COUNT(DISTINCT store_name)FROM Store_Information查询结果显示为:Count(DISTINCT store_name)3GROUP BY下面我们来进一步看一下 SQL 语言中的集合函数。上文中,我们曾使用SUM 函数计算所有商店的销售总额,如果我们希望计算每一家商店各自的总销售额时该怎么办呢?要实现这一目的我们需要做两件事:首先,我们需要查询商店名称和销售额两个字段;然后,我们使用 SQL 语言的 GROUP BY 命令将销售额按照不同的商店进行分组,从而计算出不同商店的销售总额。GROUP BY 命令的语法格式为:SELECT column_name1, SUM(column_name2)FROM table_nameGROUP BY column_name1我们可以使用如下命令实现上述查询目的:SELECT store_name, SUM(Sales)FROM Store_InformationGROUP BY store_name查询结果显示为:store_name SUM(Sales)Los Angeles $1800San Diego $250Boston $700小注:GROUP BY 关键字一般应用于同时查询多个字段并对字段进行算术运算的SQL 命令中。HAVING用户在使用 SQL 语言的过程中可能希望解决的另一个问题就是对由 sum 或其它集合函数运算结果的输出进行限制。例如,我们可能只希望看到Store_Information 数据表中销售总额超过1500美圆的商店的信息,这时我们就需要使用 HAVING 从句。语法格式为:SELECT column_name1, SUM(column_name2)FROM table_nameGROUP BY column_name1HAVING (arithematic function condition)(GROUP BY 从句可选)由此,我们可以使用如下命令实现上述查询目的:SELECT store_name, SUM(sales)FROM Store_InformationGROUP BY store_nameHAVING SUM(sales) 1500查询结果显示为:store_name SUM(Sales)Los Angeles $1800小注:SQL 语言中设定集合函数的查询条件时使用 HAVING 从句而不是 WHERE 从句。通常情况下,HAVING 从句被放置在 SQL 命令的结尾处。ALIAS下面,我们重点介绍一下如何在 SQL 命令中设定别名。SQL 语言中一般使用两种类型的别名,分别为字段别名和数据表别名。简单的说,使用字段别名可以帮助我们有效的组织查询的输出结果。例如,上文所列举的多个实例中,当我们计算商店销售总额时,显示结果中就会出现SUM(sales)。虽然 SUM(sales)并不会对我们理解查询结果带来不便,但是如果我们需要在查询中使用多项复杂运算时,显示结果就不会这么直观了。如果这时我们使用字段别名就会极大的提高查询结果的可读性。对于数据表别名,我们可以通过将别名直接放置在 FROM 从句中数据表名称的后面设定。数据表别名在我们下面将要讲述的连接多个数据表进行查询的操作中极为有用。字段和数据表别名的语法格式如下:SELECT table_alias.column_name1 column_aliasFROM table_name table_alias即别名都直接放置在各自对应名称的后面,中间用空格分开。以 Store_Information 数据表为例,我们可以在 GROUP BY 一节中所使用的SQL 命令中设置如下字段和数据表别名:SELECT A1.store_name Store, SUM(Sales) Total SalesFROM Store_Information A1GROUP BY A1.store_name查询结果显示为:Store Total SalesLos Angeles $1800San Diego $250Boston $700连接多个数据表最后,我们来看一下如果使用 SQL 语言连接多个数据表,实现对多个数据表的查询。为方便讲解,我们在数据库中分别创建了两个名为Store_Information 和 Region 的数据表。Store_InformationStore_NameSalesDateLos Angeles$1500Jan-10-2000San Diego$250Jan-11-2000Los Angeles$300Jan-12-2000Boston$700Jan-12-2000RegionRegion_NameStore_NameEastBostonEastNew YorkWestLos AngelesWestSan Diego下面,我们就来看一下通过数据表的连接实现按不同区域查询销售额。我们注意到在名为 Region 的数据表中包含区域和商店两个字段信息,而在名为 Store_Information 的数据表中则包含每一家商店的销售信息。因此,为了得到按区域划分的销售信息,我们需要将两个不同数据表的信息结合在一起进行查询。通过对上述两个数据表的分析,我们发现每个数据表中都包含一个名为 Store_Name 的字段,因此,我们可以使用如下命令实现查询目的:SELECT A1.region_name REGION, SUM(A2.Sales) SALESFROM Geography A1, Store_Information A2WHERE A1.store_name = A2.store_nameGROUP BY A1.region_name查询结果显示为:REGION SALESEast $700West $2050说明:上述查询命令的前两行用于指定所要查询的目标字段,分别为 Region 数据表中的 Region_Name 字段和 Store_Information 数据表中 Sales 字段的记录值总数。这里,我们设定两个字段的别名分别为 REGION 和 SALES,两个数据表的别名分别为 A1和 A2。如果我们只使用字段别名而不设定数据表别名的话,上述SQL 命令的第一行就变成 如下形式:SELECT Region.Region_Name REGION, SUM(Store_Information.Sales) SALES由此我们可以看出有效的使用数据表别名,可以极大的简化对多个数据表进行操作的 SQL 命令。上述查询命令的第3行为 WHERE 从句,正是该从句设定了两个数据表的连接条件。因为我们希望确保 Region 数据表中的 Store_Name 字段能够与Store_Information 数据表中的同名字段相对应,所以我们规定两个字段的记录值应当相等。在连接多个数据表时,一定要准确设定数据表的连接条件,如果 WHERE 从句设定不正确,则可能导致查询结果中出现众多不相关的数据基础教程SQL 数据操作基础(初级 )1为了建立交互站点,你需要使用数据库来存储来自访问者的信息。例如,你要建立一个职业介绍服务的站点,你就需要存储诸如个人简历,所感兴趣的工作等等这样的信息。创建动态网叶也需要使用数据库,如果你想显示符合来访者要求的最好的工作,你就需要从数据库中取出这份工作的信息。你将会发现,在许多情况下需要使用数据库。在这一章里,你将学会怎样使用“结构化查询语言” (SQL来操作数据库。SQL 语言是数据库的标准语言。在 Active SeverPages 中,无论何时你要访问一个数据库,你就要使用 SQL 语言。因此,掌握好 SQL 对 ASP 编程是非常重要的。注意:你可以把“SQL”读作“sequel” ,也可以按单个字母的读音读作SQL。 两种发音都是正确的,每种发音各有大量的支持者。在本书里,认为“SQL”读作“sequel” 。通过这一章的学习,你将理解怎样用 SQL 实现数据库查询,你将学会怎样使用这种查询从数据表中取出信息,最后,你将学会怎样设计和建立自己的数据库。注意:通过下面几章对 SQL 的介绍,你将对 SQL 有足够的了解,从而可以有效地使用 Active Sever Pages。但是,SQL 是一种复杂的语言,本书不可能包括它的全部细节。要全面掌握 SQL 语言,你需要学习在 Microsoft SQL Sever 中使用 SQL。你可以到附近的书店去买一本 Microsoft SQL Sever 6.5。SQL 介绍:本书假设你是在 SQL 操作 Microsoft SQL Sever 的数据库。你也可以用SQL 操作许多其它类型的数据库。SQL 是操作数据库的标准语言。 (事实上,关于 SQL 语言有一个专门的 ANSI 标准注意:不要在你的站点上试图用 Microsoft Access 代替 Microsoft SQL Sever。SQL Sever 可以同时服务于许多用户,如果你希望你的站点有较高的访问率,MS Access 是不能胜任的。在学习 SQL 的细节之前,你需要理解它的两大特点。一个特点容易掌握,另一个掌握起来有点困难。第一个特点是所有 SQL 数据库中的数据都存储在表中。一个表由行和列组成。例如,下面这个简单的表包括 name 和 e-mail address:Name Email Address.Bill Gates billgmicrosoft.compresident Clinton presidentwhitehouse.comStephen Walther swalthersomewhere.com这个表有两列(列也称为字段,域:Name 和 Email Address。有三行,每一行包含一组数据。一行中的数据组合在一起称为一条记录。无论何时你向表中添加新数据,你就添加了一条新记录。一个数据表可以有几十个记录,也可以有几千甚至几十亿个记录。虽然你也许永远不需要存储十亿个 Email 地址,但知道你能这样做总是好的,也许有一天你会有这样的需要。你的数据库很有可能包含几十个表,所有存储在你数据库中的信息都被存储在这些表中。当你考虑怎样把信息存储在数据库中时,你应该考虑怎样把它们存储在表中。SQL 的第二个特点有些难于掌握。这种语言被设计为不允许你按照某种特定的顺序来取出记录,因为这样做会降低 SQL Sever 取记录的效率。使用SQL,你只能按查询条件来读取记录。当考虑如何从表中取出记录时,自然会想到按记录的位置读取它们。例如,也许你会尝试通过一个循环,逐个记录地扫描,来选出特定的记录。在使用SQL 时,你必须训练自己,不要有这种思路。假如你想选出所有的名字是“Bill Gates”的记录,如果使用传统的编程语言,你也许会构造一个循环,逐个查看表中的记录,看名字域是否是“Bill Gates”。这种选择记录的方法是可行的,但是效率不高。使用 SQL,你只要说, “选择所有名字域等于 Bill Gates 的记录” ,SQL 就会为你选出所有符合条件的记录。SQL 会确定实现查询的最佳方法。建设你想取出表中的前十个记录。使用传统的编程语言,你可以做一个循环,取出前十个记录后结束循环。但使用标准的 SQL 查询,这是不可能实现的。从 SQL 的角度来说,在一个表中不存在前十个记录这种概念。开始时,当你知道你不能用 SQL 实现某些你感觉应该能实现的功能,你会受到挫折。你也许会以头撞墙甚至想写恶毒的信件给 SQL 的设计者们。但后来你会认识到,SQL 的这个特点不仅不是个限制,反而是其长处。因为 SQL 不根据位置来读取记录,它读取记录可以很快。综上所述,SQL 有两个特点:所有数据存储在表中,从 SQL 的角度来说,表中的记录没有顺序。在下一节,你将学会怎样用 SQL 从表中选择特殊的记录。使用 SQL 从表中取记录。SQL 的主要功能之一是实现数据库查询。如果你熟悉 Internet 引擎,那么你已经熟悉查询了。你使用查询来取得满足特定条件的信息。例如,如果你想找到有 ASP 信息的全部站点,你可以连接到 Yahoo!并执行一个对 Active Sever Pages 的搜索。在你输入这个查询后,你会收到一个列表,表中包括所有其描述中包含搜索表达式的站点。多数 Internet 引擎允许逻辑查询。在逻辑查询中,你可以包括特殊的运算符如 AND、OR 和 NOT,你使用这些运算符来选择特定的记录。例如,你可以用AND 来限制查询结果。如果你执行一个对 Active Sever Pages AND SQL 的搜索。你将得到其描述中同时包含 Active Sever Pages 和 SQL 的记录。当你需要限制查询结果时,你可以使用 AND。如果你需要扩展查询的结果,你可以使用逻辑操作符 OR。例如,如果你执行一个搜索,搜索所有的其描述中包含 Active Sever Pages OR SQL 的站点,你收到的列表中将包括所有其描述中同时包含两个表达式或其中任何一个表达式的站点。如果你想从搜索结果中排除特定的站点,你可以使用 NOT。例如,查询“Active Sever Pages ”AND NOT “SQL”将返回一个列表,列表中的站点包含 Active Sever Pages,但不包含 SQL。当必须排除特定的记录时,你可以使用 NOT。用 SQL 执行的查询与用 Internet 搜索引擎执行的搜索非常相似。当你执行一个 SQL 查询时,通过使用包括逻辑运算符的查询条件,你可以得到一个记录列表。此时查询结果是来自一个或多个表。SQL 查询的句法非常简单。假设有一个名为 email_table 的表,包含名字和地址两个字段,要得到 Bill Gates 的 e_mail 地址,你可以使用下面的查询:SELECT email from email_table WHERE name=Bill Gates当这个查询执行时,就从名为 email_table 的表中读取 Bill Gates 的e_mail 地址。这个简单的语句包括三部分: SELECT 语句的第一部分指名要选取的列。在此例中,只有 email 列被选取。当执行 时,只显示 email 列的值 billgmicrosoft.com。 SELECTT 语句的第二部份指明要从哪个(些)表中查询数据。在此例中,要查询的表名为 email_table。最后,SELECT 语句的 WHERE 子句指明要选择满足什么条件的记录。在此例中,查询条件为只有 name 列的值为 Bill Gates 的记录才被选取。Bill Gates 很有可能拥有不止一个 email 地址。如果表中包含 Bill Gates的多个 email 地址。用上述的 SELECT 语句可以读取他所有的 email 地址。SELECT 语句从表中取出所有 name 字段值为 Bill Gates 的记录的 email 字段的值。前面说过,查询可以在查询条件中包含逻辑运算符。假如你想读取 Bill Gates 或 Clinton 总统的所有 email 地址,你可以使用下面的查询语句:SELECT email FROM email_table WHERE name=Bill Gates OR name=president Clinton此例中的查询条件比前一个复杂了一点。这个语句从表 email_table 中选出所有 name 列为 Bill Gates 或 president Clinton 的记录。如果表中含有Bill Gates 或 president Clinton 的多个地址,所有的地址都被读取。SELECT 语句的结构看起来很直观。如果你请一个朋友从一个表中为你选择一组记录,你也许以非常相似的方式提出你的要求。在 SQL SELECT 语句中,你“SELECT 特定的列 FROM 一个表 WHERE 某些列满足一个特定的条件” 。下一节将介绍怎样执行 SQL 查询来选取记录。这将帮助你熟悉用 SELECT 语句从表中取数据的各种不同方法。SQL 数据操作基础(初级 )2使用 ISQL 执行 SELECT 查询当你安装 SQL Sever 时,你同时安装了一个叫作 ISQL/w 的应用程序。ISQL/w 允许你执行交互的 SQL 查询。在把查询包括到你的 ASP 网页中之前,用ISQL/w 对其进行测试是非常有用的。注意:在这本书的第一部份,你学习了怎样安装和配置 Microsoft SQL Sever。如果没有安装 SQL Sever 或者 SQL Sever 不能运行,请参阅第三章“安装和使用 SQL Sever”。选择任务上 SQL Sever 程序组中的 ISQL_w 以启动该程序。程序启动时,首先会出现一个对话框,要求输入服务器信息和登录信息。在 Sever 框中,输入你的 SQL 服务器的名字。如果服务器正运行在本地计算机上,服务器名字就是你计算机的名字。在登录信息框中,输入一个登录帐号和密码或选择使用“可信连接” ,然后单击 Connect 按钮。 注意:如果你将 SQL Sever 配置为使用完整安全或混合安全,那么你可以使用可信连接。如果你使用标准安全,你则需要提供用户帐号和密码。要了解更多信息,参见第三章。如果一切正常,在你单击连接按钮后会出现一个查询窗口。 (如果有异常,请参考第三章) 在执行查询之前,你需要选择数据库。安装 SQL Sever 时你已为自己创建了一个数据库,SQL Sever 还有许多系统数据库,如 master,model,msdb,和tempdb。方便的是,SQL Sever 带有一个特殊的名为 pubs 的例子数据库。库 pubs中包含供一个虚拟的出版商使用的各个表。文档中所有的例子程序都是针对这个库来设计的。本书中的许多例子也使用这个数据库。在查询窗口顶部的 DB 下拉框中选择数据库 pubs,这样你就选择了数据库。你所有的查询都将针对这个库中的各个表来执行。现在你可以执行你的第一个查询了。这真让人兴奋!你的第一个查询将针对一个名为 autrors 的表,表中包含所有为某个虚拟出版商工作的作者的相关数据。单击查询窗口并输入以下的语句:SELECT phone FROM authors WHERE au_name=Ringer输入完成后,单击执行查询按钮(一个绿色三角形,看起来像 VCR 播放键) 。单击此按钮后,任何出现在查询窗口中的语句均会被执行。查询窗口会自动变成结果显示窗口,你可以看到查询的结果。在 SQL Sever 的不同版本中,库 pubs 中的数据会有所不同。对 SQL Sever 6.5来说,将会找到两条记录。结果显示窗口中应显示如下内容:phone.801 826_0752801 826_0752(2 row(s) affected)你所执行的 SELECT 语句从表 authors 中取出所有名字为 Ringer 的作者的电话号码。你通过在 WHERE 子句中使用特殊的选择条件来限制查询的结果。你也可以忽略选择条件,从表中取出所有作者的电话号码。要做到这一点,单击Query 标签,返回到查询窗口,输入以下的 SELECT 语句:SELECT Phone FROM authors这个查询执行后,会取出表 authors 中的所有电话号码(没有特定的顺序) 。如果表 authors 中包含一百个电话号码,会有一百个记录被取出,如果表中有十亿个电话号码,这十亿条记录都会被取出(这也许需要一些时间) 。表 authrs 的字段包括姓,名字,电话号码,地址,城市,州和邮政编码。通过在 SELECT 语句的第一部份指定它们,你可以从表中取出任何一个字段。你可以在一个 SELECT 语句中一次取出多个字段,比如:SELECT au_fname ,au_lname, phone FROM authors这个 SELECT 语句执行后,将取出这三个列的所有值。下面是这个查询的结果的一个示例(为了节省纸张,只显示查询结果的一部分,其余记录用省略号代替):au_fname au_lname phone .Johnson White 408 496_7223Marjorie Green 415 986_7020Cheryl Carson 415 548_7723Michael OLeary 408 286_2428 (23 row(s) affected)在 SELECT 语句中,你需要列出多少个字段,你就可以列出多少。不要忘了把字段名用逗号隔开。你也可以用星号(*)从一个表中取出所有的字段。这里有一个使用星号的例子:SELECT * FROM authors这个 SELECT 语句执行后,表中的所有字段的值都被取出。你会发现你将在SQL 查询中频繁使用星号。技巧:你可以使用星号来查看一个表的所有列的名字。要做到这一点,只需要在执行完 SELECT 语句后看一下查询结果的列标题。操作多个表到现在为止,你只尝试了用一句 SQL 查询从一个表中取出数据。你也可以用一个 SELECT 语句同时从多个表中取出数据,只需在 SELECT 语句的 FROM 从句中列出要从中取出数据的表名称即可:SELECT au_lname ,title FROM authors, titles 这个 SELECT 语句执行时,同时从表 authors 和表 titles 中取出数据。从表 authors 中取出所有的作者名字,从表 titles 中取出所有的书名。在ISQL/w 程序中执行这个查询,看一下查询结果。你会发现一些奇怪的出乎意料的情况:作者的名字并没有和它们所著的书相匹配,而是出现了作者名字和书名的所有可能的组合,这也许不是你所希望见到的。出了什么差错?问题在于你没有指明这两个表之间的关系。你没有通过任何方式告诉 SQL 如何把表和表关联在一起。由于不知道如何关联两个表,服务器只能简单地返回取自两个表中的记录的所有可能组合。要从两个表中选出有意义的记录组合,你需要通过建立两表中字段的关系来关联两个表。要做到这一点的途径之一是创建第三个表,专门用来描述另外两个表的字段之间的关系。表 authors 有一个名为 au_id 的字段,包含有每个作者的唯一标识。表titles 有一个名为 title_id 的字段,包含每个书名的唯一标识。如果你能在字段 au_id 和字段 title_id 之间建立一个关系,你就可以关联这两个表。数据库 pubs 中有一个名为 titleauthor 的表,正是用来完成这个工作。表中的每个记录包括两个字段,用来把表 titles 和表 authors 关联在一起。下面的SELECT 语句使用了这三个表以得到正确的结果:SELECT au_name,title FROM authors,titles,titleauthor WHERE authors.au_id=titleauthor.au_idAND titles.title_id=titleauthor.title_id 当这个 SELECT 语句执行时,每个作者都将与正确的书名相匹配。表titleauthor 指明了表 authors 和表 titles 的关系,它通过包含分别来自两个表的各一个字段实现这一点。第三个表的唯一目的是在另外两个表的字段之间建立关系。它本身不包含任何附加数据。注意在这个例子中字段名是如何书写的。为了区别表 authors 和表 titles中相同的字段名 au_id,每个字段名前面都加上了表名前缀和一个句号。名为author.au_id 的字段属于表 authors,名为 titleauthor.au_id 的字段属于表titleauthor,两者不会混淆。通过使用第三个表,你可以在两个表的字段之间建立各种类型的关系。例如,一个作者也许写了许多不同的书,或者一本书也许由许多不同的作者共同完成。当两个表的字段之间有这种“多对多”的关系时,你需要使用第三个表来指明这种关系。但是,在许多情况下,两个表之间的关系并不复杂。比如你需要指明表titles 和表 publishers 之间的关系。因为一个书名不可能与多个出版商相匹配,你不需要通过第三个表来指明这两个表之间的关系。要指明表 titles 和表publishers 之间的关系,你只要让这两个表有一个公共的字段就可以了。在数据库 pubs 中,表 titles 和表 publishers 都有一个名为 pub_id 的字段。如果你想得到书名及其出版商的一个列表,你可以使用如下的语句:SELECT title,pub_name FROM titles,publishersWHERE titles.pub_id=publishers.pub_id当然,如果一本书是由两个出版商联合出版的,那么你需要第三个表来代表这种关系。通常,当你予先知道两个表的字段间存在“多对多”关系时,就使用第三个表来关联这两个表。反之,如果两个表的字段间只有“一对一”或“一对多”关系,你可以使用公共字段来关联它门。SQL 数据操作基础(初级 )3操作字段通常,当你从一个表中取出字段值时,该值与创建该表时所定义的字段名联系在一起。如果你从表 authors 中选择所有的作者名字,所有的值将会与字段名 au_lname 相联系。
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!