




已阅读5页,还剩78页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SQL语言快速入门入门教程2SQL语言快速入门之一2SQL语言快速入门之二3SQL语言快速入门之三5基础教程10SQL数据操作基础初级110SQL数据操作基础初级213SQL数据操作基础初级316SQL数据操作基础初级420SQL数据操作基础初级525SQL数据操作基础中级27SQL数据操作基础中级127SQL数据操作基础中级228SQL数据操作基础中级331SQL数据操作基础中级435SQL数据操作基础中级539全面接触SQL44全面接触SQL语法144全面接触SQL语法246全面接触SQL语法347全面接触SQL语法449全面接触SQL语法551全面接触SQL语法653全面接触SQL语法755SQL语法详解59主要SQL语句详解159主要SQL语句详解263SQL语法参考手册67SQL实践71SQL实践171SQL实践275SQL连接查询80入门教程SQL语言快速入门之一SQL是英文STRUCTUREDQUERYLANGUAGE的缩写,意思为结构化查询语言。SQL语言的主要功能就是同各种数据库建立联系,进行沟通。按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。SQL语句可以用来执行各种各样的操作,例如更新数据库中的数据,从数据库中提取数据等。目前,绝大多数流行的关系型数据库管理系统,如ORACLE,SYBASE,MICROSOFTSQLSERVER,ACCESS等都采用了SQL语言标准。虽然很多数据库都对SQL语句进行了再开发和扩展,但是包括SELECT,INSERT,UPDATE,DELETE,CREATE,以及DROP在内的标准的SQL命令仍然可以被用来完成几乎所有的数据库操作。下面,我们就来详细介绍一下SQL语言的基本知识。数据库表格一个典型的关系型数据库通常由一个或多个被称作表格的对象组成。数据库中的所有数据或信息都被保存在这些数据库表格中。数据库中的每一个表格都具有自己唯一的表格名称,都是由行和列组成,其中每一列包括了该列名称,数据类型,以及列的其它属性等信息,而行则具体包含某一列的记录或数据。以下,是一个名为天气的数据库表格的实例。城市最高气温最低气温北京105上海158天津82重庆2013该表格中“城市”,“最高气温”和“最低气温”就是三个不同的列,而表格中的每一行则包含了具体的表格数据。数据查询在众多的SQL命令中,SELECT语句应该算是使用最频繁的。SELECT语句主要被用来对数据库进行查询并返回符合用户查询标准的结果数据。SELECT语句的语法格式如下SELECTCOLUMN1,COLUMN2,ETCFROMTABLENAMEWHERECONDITION(表示可选项)SELECT语句中位于SELECT关键词之后的列名用来决定那些列将作为查询结果返回。用户可以按照自己的需要选择任意列,还可以使用通配符“”来设定返回表格中的所有列。SELECT语句中位于FROM关键词之后的表格名称用来决定将要进行查询操作的目标表格。SELECT语句中的WHERE可选从句用来规定哪些数据值或哪些行将被作为查询结果返回或显示。在WHERE条件从句中可以使用以下一些运算符来设定查询标准等于大于大于等于不等于除了上面所提到的运算符外,LIKE运算符在WHERE条件从句中也非常重要。LIKE运算符的功能非常强大,通过使用LIKE运算符可以设定只选择与用户规定格式相同的记录。此外,我们还可以使用通配符“”用来代替任何字符串。举例如下SELECTFIRSTNAME,LASTNAME,CITYFROMEMPLOYEEWHEREFIRSTNAMELIKEE(注意,字符串必须被包含在单括号内)上述SQL语句将会查询所有名称以E开头的姓名。或者,通过如下语句SELECTFROMEMPLOYEEWHEREFIRSTNAMEMAY;查询所有名称为MAY的行。SQL语言快速入门之二创建表格SQL语言中的CREATETABLE语句被用来建立新的数据库表格。CREATETABLE语句的使用格式如下CREATETABLETABLENAMECOLUMN1DATATYPE,COLUMN2DATATYPE,COLUMN3DATATYPE如果用户希望在建立新表格时规定列的限制条件,可以使用可选的条件选项CREATETABLETABLENAMECOLUMN1DATATYPECONSTRAINT,COLUMN2DATATYPECONSTRAINT,COLUMN3DATATYPECONSTRAINT举例如下CREATETABLEEMPLOYEEFIRSTNAMEVARCHAR15,LASTNAMEVARCHAR20,AGENUMBER3,ADDRESSVARCHAR30,CITYVARCHAR20简单来说,创建新表格时,在关键词CREATETABLE后面加入所要建立的表格的名称,然后在括号内顺次设定各列的名称,数据类型,以及可选的限制条件等。注意,所有的SQL语句在结尾处都要使用“;”符号。使用SQL语句创建的数据库表格和表格中列的名称必须以字母开头,后面可以使用字母,数字或下划线,名称的长度不能超过30个字符。注意,用户在选择表格名称时不要使用SQL语言中的保留关键词,如SELECT,CREATE,INSERT等,作为表格或列的名称。数据类型用来设定某一个具体列中数据的类型。例如,在姓名列中只能采用VARCHAR或CHAR的数据类型,而不能使用NUMBER的数据类型。SQL语言中较为常用的数据类型为CHARSIZE固定长度字符串,其中括号中的SIZE用来设定字符串的最大长度。CHAR类型的最大长度为255字节。VARCHARSIZE可变长度字符串,最大长度由SIZE设定。NUMBERSIZE数字类型,其中数字的最大位数由SIZE设定。DATE日期类型。NUMBERSIZE,D数字类型,SIZE决定该数字总的最大位数,而D则用于设定该数字在小数点后的位数。最后,在创建新表格时需要注意的一点就是表格中列的限制条件。所谓限制条件就是当向特定列输入数据时所必须遵守的规则。例如,UNIQUE这一限制条件要求某一列中不能存在两个值相同的记录,所有记录的值都必须是唯一的。除UNIQUE之外,较为常用的列的限制条件还包括NOTNULL和PRIMARYKEY等。NOTNULL用来规定表格中某一列的值不能为空。PRIMARYKEY则为表格中的所有记录规定了唯一的标识符。向表格中插入数据SQL语言使用INSERT语句向数据库表格中插入或添加新的数据行。INSERT语句的使用格式如下INSERTINTOTABLENAMEFIRST_COLUMN,LAST_COLUMNVALUESFIRST_VALUE,LAST_VALUE例如INSERTINTOEMPLOYEEFIRSTNAME,LASTNAME,AGE,ADDRESS,CITYVALUESLI,MING,45,NO77CHANGANROAD,BEIJING”简单来说,当向数据库表格中添加新记录时,在关键词INSERTINTO后面输入所要添加的表格名称,然后在括号中列出将要添加新值的列的名称。最后,在关键词VALUES的后面按照前面输入的列的顺序对应的输入所有要添加的记录值。更新记录SQL语言使用UPDATE语句更新或修改满足规定条件的现有记录。UPDATE语句的格式为UPDATETABLENAMESETCOLUMNNAMENEWVALUE,NEXTCOLUMNNEWVALUE2WHERECOLUMNNAMEOPERATORVALUEAND|ORCOLUMNOPERATORVALUE例如UPDATEEMPLOYEESETAGEAGE1WHEREFIRST_NAMEMARYANDLAST_NAMEWILLIAMS使用UPDATE语句时,关键一点就是要设定好用于进行判断的WHERE条件从句。删除记录SQL语言使用DELETE语句删除数据库表格中的行或记录。DELETE语句的格式为DELETEFROMTABLENAMEWHERECOLUMNNAMEOPERATORVALUEAND|ORCOLUMNOPERATORVALUE例如DELETEFROMEMPLOYEEWHERELASTNAMEMAY简单来说,当需要删除某一行或某个记录时,在DELETEFROM关键词之后输入表格名称,然后在WHERE从句中设定删除记录的判断条件。注意,如果用户在使用DELETE语句时不设定WHERE从句,则表格中的所有记录将全部被删除。删除数据库表格在SQL语言中使用DROPTABLE命令删除某个表格以及该表格中的所有记录。DROPTABLE命令的使用格式为DROPTABLETABLENAME;例如DROPTABLEEMPLOYEE如果用户希望将某个数据库表格完全删除,只需要在DROPTABLE命令后输入希望删除的表格名称即可。DROPTABLE命令的作用与删除表格中的所有记录不同。删除表格中的全部记录之后,该表格仍然存在,而且表格中列的信息不会改变。而使用DROPTABLE命令则会将整个数据库表格的所有信息全部删除。以上,我们对SQL语言主要的命令和语句进行了较为详细的介绍。应该说SQL语句的语法结构和风格还是相当简单和直观的,只要用户结合实践多加练习,一定会在短期内迅速掌握。SQL语言快速入门之三我们日常使用SQL语言的工作过程中,使用最多的还是从已经建立好的数据库中查询信息。下面,我们就来详细介绍一下如何使用SQL语言实现各种数据库查询操作。SELECTFROM为方便讲解,我们在数据库中创建名为STORE_INFORMATION的如下数据表。STORE_INFORMATIONSTORE_NAMESALESDATELOSANGELES1500JAN102000SANDIEGO250JAN112000LOSANGELES300JAN122000BOSTON700JAN122000SQL语言中用于数据库查询的最简单的命令就是SELECTFROM,语法格式为SELECT“COLUMN_NAME“FROM“TABLE_NAME“例如,如果我们希望查询STORE_INFORMATION数据表中所有的商店名称时,可以使用如下命令SELECTSTORE_NAMEFROMSTORE_INFORMATION查询结果显示为STORE_NAMELOSANGELESSANDIEGOLOSANGELESBOSTON如果用户希望一次查询多个字段,可以将所要查询的字段名称依次加入SELECT关键字之后,中间用“,”隔开即可。DISTINCTSELECT关键字支持用户查询数据表中指定字段的所有数据,但是这样有时就会不可避免的出现重复信息。如果用户希望只查询那些具有不同记录值的信息的话,可以使用SQL语言的DISTINCT关键字。语法格式如下SELECTDISTINCT“COLUMN_NAME“FROM“TABLE_NAME“例如,我们可以使用以下命令查询STORE_INFORMATION数据表具有不同记录值的所有记录。SELECTDISTINCTSTORE_NAMEFROMSTORE_INFORMATION查询结果如下STORE_NAMELOSANGELESSANDIEGOBOSTONWHERE除了选择具有不同记录值的记录之外,有时我们可能还会需要根据某些条件对数据库中的数据进行查询。例如,我们可能需要查询STORE_INFORMATION数据表中销售额超过1000美圆的商店。为此,我们可以使用SQL语言的WHERE关键字设定查询条件。语法格式如下SELECT“COLUMN_NAME“FROM“TABLE_NAME“WHERE“CONDITION“由此,我们可以使用如下命令查询销售额超过1000美圆的商店信息SELECTSTORE_NAMEFROMSTORE_INFORMATIONWHERESALES1000查询结果显示为STORE_NAMELOSANGELES运算函数现在,我们已经了解到在使用SQL语言进行数据库查询操作时可以通过对数值的判断设定灵活的查询条件。为了增强对运算的支持能力,SQL提供了众多实用的运算函数供广大用户使用。例如,我们可以直接在SQL命令中调用SUM或AVG这两个分别用于计算总数和平均数的函数。语法格式如下SELECT“FUNCTIONTYPE“COLUMN_NAME“FROM“TABLE_NAME“如果我们希望查询STORE_INFORMATION数据表中所有商店的总销售额的话,可以使用如下命令SELECTSUMSALESFROMSTORE_INFORMATION查询结果显示为SUMSALES2750COUNT除了SUM和AVG函数之外,COUNT函数是SQL语言中另一个较为常用的运算函数。COUNT函数可以用来计算数据表中指定字段所包含的记录数目。语法格式为SELECTCOUNT“COLUMN_NAME“FROM“TABLE_NAME“例如,如果我们希望查询STORE_INFORMATION数据表中的有关商店的记录条数时,可以使用如下命令SELECTCOUNTSTORE_NAMEFROMSTORE_INFORMATION查询结果显示为COUNTSTORE_NAME4COUNT函数可以和DISTINCT关键字一起使用从而可以查询数据表中指定字段中所有具有不同记录值的记录数目。例如,如果我们希望查询STORE_INFORMATION数据表中不同商店的数目时,可以使用如下命令SELECTCOUNTDISTINCTSTORE_NAMEFROMSTORE_INFORMATION查询结果显示为COUNTDISTINCTSTORE_NAME3GROUPBY下面我们来进一步看一下SQL语言中的集合函数。上文中,我们曾使用SUM函数计算所有商店的销售总额,如果我们希望计算每一家商店各自的总销售额时该怎么办呢要实现这一目的我们需要做两件事首先,我们需要查询商店名称和销售额两个字段;然后,我们使用SQL语言的GROUPBY命令将销售额按照不同的商店进行分组,从而计算出不同商店的销售总额。GROUPBY命令的语法格式为SELECT“COLUMN_NAME1“,SUM“COLUMN_NAME2“FROM“TABLE_NAME“GROUPBY“COLUMN_NAME1“我们可以使用如下命令实现上述查询目的SELECTSTORE_NAME,SUMSALESFROMSTORE_INFORMATIONGROUPBYSTORE_NAME查询结果显示为STORE_NAMESUMSALESLOSANGELES1800SANDIEGO250BOSTON700小注GROUPBY关键字一般应用于同时查询多个字段并对字段进行算术运算的SQL命令中。HAVING用户在使用SQL语言的过程中可能希望解决的另一个问题就是对由SUM或其它集合函数运算结果的输出进行限制。例如,我们可能只希望看到STORE_INFORMATION数据表中销售总额超过1500美圆的商店的信息,这时我们就需要使用HAVING从句。语法格式为SELECT“COLUMN_NAME1“,SUM“COLUMN_NAME2“FROM“TABLE_NAME“GROUPBY“COLUMN_NAME1“HAVINGARITHEMATICFUNCTIONCONDITION(GROUPBY从句可选)由此,我们可以使用如下命令实现上述查询目的SELECTSTORE_NAME,SUMSALESFROMSTORE_INFORMATIONGROUPBYSTORE_NAMEHAVINGSUMSALES1500查询结果显示为STORE_NAMESUMSALESLOSANGELES1800小注SQL语言中设定集合函数的查询条件时使用HAVING从句而不是WHERE从句。通常情况下,HAVING从句被放置在SQL命令的结尾处。ALIAS下面,我们重点介绍一下如何在SQL命令中设定别名。SQL语言中一般使用两种类型的别名,分别为字段别名和数据表别名。简单的说,使用字段别名可以帮助我们有效的组织查询的输出结果。例如,上文所列举的多个实例中,当我们计算商店销售总额时,显示结果中就会出现SUMSALES。虽然SUMSALES并不会对我们理解查询结果带来不便,但是如果我们需要在查询中使用多项复杂运算时,显示结果就不会这么直观了。如果这时我们使用字段别名就会极大的提高查询结果的可读性。对于数据表别名,我们可以通过将别名直接放置在FROM从句中数据表名称的后面设定。数据表别名在我们下面将要讲述的连接多个数据表进行查询的操作中极为有用。字段和数据表别名的语法格式如下SELECT“TABLE_ALIAS“COLUMN_NAME1“COLUMN_ALIAS“FROM“TABLE_NAME“TABLE_ALIAS“即别名都直接放置在各自对应名称的后面,中间用空格分开。以STORE_INFORMATION数据表为例,我们可以在GROUPBY一节中所使用的SQL命令中设置如下字段和数据表别名SELECTA1STORE_NAMESTORE,SUMSALES“TOTALSALES“FROMSTORE_INFORMATIONA1GROUPBYA1STORE_NAME查询结果显示为STORETOTALSALESLOSANGELES1800SANDIEGO250BOSTON700连接多个数据表最后,我们来看一下如果使用SQL语言连接多个数据表,实现对多个数据表的查询。为方便讲解,我们在数据库中分别创建了两个名为STORE_INFORMATION和REGION的数据表。STORE_INFORMATIONSTORE_NAMESALESDATELOSANGELES1500JAN102000SANDIEGO250JAN112000LOSANGELES300JAN122000BOSTON700JAN122000REGIONREGION_NAMESTORE_NAMEEASTBOSTONEASTNEWYORKWESTLOSANGELESWESTSANDIEGO下面,我们就来看一下通过数据表的连接实现按不同区域查询销售额。我们注意到在名为REGION的数据表中包含区域和商店两个字段信息,而在名为STORE_INFORMATION的数据表中则包含每一家商店的销售信息。因此,为了得到按区域划分的销售信息,我们需要将两个不同数据表的信息结合在一起进行查询。通过对上述两个数据表的分析,我们发现每个数据表中都包含一个名为STORE_NAME的字段,因此,我们可以使用如下命令实现查询目的SELECTA1REGION_NAMEREGION,SUMA2SALESSALESFROMGEOGRAPHYA1,STORE_INFORMATIONA2WHEREA1STORE_NAMEA2STORE_NAMEGROUPBYA1REGION_NAME查询结果显示为REGIONSALESEAST700WEST2050说明上述查询命令的前两行用于指定所要查询的目标字段,分别为REGION数据表中的REGION_NAME字段和STORE_INFORMATION数据表中SALES字段的记录值总数。这里,我们设定两个字段的别名分别为REGION和SALES,两个数据表的别名分别为A1和A2。如果我们只使用字段别名而不设定数据表别名的话,上述SQL命令的第一行就变成如下形式SELECTREGIONREGION_NAMEREGION,SUMSTORE_INFORMATIONSALESSALES由此我们可以看出有效的使用数据表别名,可以极大的简化对多个数据表进行操作的SQL命令。上述查询命令的第3行为WHERE从句,正是该从句设定了两个数据表的连接条件。因为我们希望确保REGION数据表中的STORE_NAME字段能够与STORE_INFORMATION数据表中的同名字段相对应,所以我们规定两个字段的记录值应当相等。在连接多个数据表时,一定要准确设定数据表的连接条件,如果WHERE从句设定不正确,则可能导致查询结果中出现众多不相关的数据基础教程SQL数据操作基础初级1为了建立交互站点,你需要使用数据库来存储来自访问者的信息。例如,你要建立一个职业介绍服务的站点,你就需要存储诸如个人简历,所感兴趣的工作等等这样的信息。创建动态网叶也需要使用数据库,如果你想显示符合来访者要求的最好的工作,你就需要从数据库中取出这份工作的信息。你将会发现,在许多情况下需要使用数据库。在这一章里,你将学会怎样使用“结构化查询语言”(SQL来操作数据库。SQL语言是数据库的标准语言。在ACTIVESEVERPAGES中,无论何时你要访问一个数据库,你就要使用SQL语言。因此,掌握好SQL对ASP编程是非常重要的。注意你可以把“SQL”读作“SEQUEL”,也可以按单个字母的读音读作SQL。两种发音都是正确的,每种发音各有大量的支持者。在本书里,认为“SQL”读作“SEQUEL”。通过这一章的学习,你将理解怎样用SQL实现数据库查询,你将学会怎样使用这种查询从数据表中取出信息,最后,你将学会怎样设计和建立自己的数据库。注意通过下面几章对SQL的介绍,你将对SQL有足够的了解,从而可以有效地使用ACTIVESEVERPAGES。但是,SQL是一种复杂的语言,本书不可能包括它的全部细节。要全面掌握SQL语言,你需要学习在MICROSOFTSQLSEVER中使用SQL。你可以到附近的书店去买一本MICROSOFTSQLSEVER65。SQL介绍本书假设你是在SQL操作MICROSOFTSQLSEVER的数据库。你也可以用SQL操作许多其它类型的数据库。SQL是操作数据库的标准语言。(事实上,关于SQL语言有一个专门的ANSI标准注意不要在你的站点上试图用MICROSOFTACCESS代替MICROSOFTSQLSEVER。SQLSEVER可以同时服务于许多用户,如果你希望你的站点有较高的访问率,MSACCESS是不能胜任的。在学习SQL的细节之前,你需要理解它的两大特点。一个特点容易掌握,另一个掌握起来有点困难。第一个特点是所有SQL数据库中的数据都存储在表中。一个表由行和列组成。例如,下面这个简单的表包括NAME和EMAILADDRESSNAMEEMAILADDRESSBILLGATESBILLGMICROSOFTCOMPRESIDENTCLINTONPRESIDENTWHITEHOUSECOMSTEPHENWALTHERSWALTHERSOMEWHERECOM这个表有两列(列也称为字段,域NAME和EMAILADDRESS。有三行,每一行包含一组数据。一行中的数据组合在一起称为一条记录。无论何时你向表中添加新数据,你就添加了一条新记录。一个数据表可以有几十个记录,也可以有几千甚至几十亿个记录。虽然你也许永远不需要存储十亿个EMAIL地址,但知道你能这样做总是好的,也许有一天你会有这样的需要。你的数据库很有可能包含几十个表,所有存储在你数据库中的信息都被存储在这些表中。当你考虑怎样把信息存储在数据库中时,你应该考虑怎样把它们存储在表中。SQL的第二个特点有些难于掌握。这种语言被设计为不允许你按照某种特定的顺序来取出记录,因为这样做会降低SQLSEVER取记录的效率。使用SQL,你只能按查询条件来读取记录。当考虑如何从表中取出记录时,自然会想到按记录的位置读取它们。例如,也许你会尝试通过一个循环,逐个记录地扫描,来选出特定的记录。在使用SQL时,你必须训练自己,不要有这种思路。假如你想选出所有的名字是“BILLGATES”的记录,如果使用传统的编程语言,你也许会构造一个循环,逐个查看表中的记录,看名字域是否是“BILLGATES”。这种选择记录的方法是可行的,但是效率不高。使用SQL,你只要说,“选择所有名字域等于BILLGATES的记录”,SQL就会为你选出所有符合条件的记录。SQL会确定实现查询的最佳方法。建设你想取出表中的前十个记录。使用传统的编程语言,你可以做一个循环,取出前十个记录后结束循环。但使用标准的SQL查询,这是不可能实现的。从SQL的角度来说,在一个表中不存在前十个记录这种概念。开始时,当你知道你不能用SQL实现某些你感觉应该能实现的功能,你会受到挫折。你也许会以头撞墙甚至想写恶毒的信件给SQL的设计者们。但后来你会认识到,SQL的这个特点不仅不是个限制,反而是其长处。因为SQL不根据位置来读取记录,它读取记录可以很快。综上所述,SQL有两个特点所有数据存储在表中,从SQL的角度来说,表中的记录没有顺序。在下一节,你将学会怎样用SQL从表中选择特殊的记录。使用SQL从表中取记录。SQL的主要功能之一是实现数据库查询。如果你熟悉INTERNET引擎,那么你已经熟悉查询了。你使用查询来取得满足特定条件的信息。例如,如果你想找到有ASP信息的全部站点,你可以连接到YAHOO并执行一个对ACTIVESEVERPAGES的搜索。在你输入这个查询后,你会收到一个列表,表中包括所有其描述中包含搜索表达式的站点。多数INTERNET引擎允许逻辑查询。在逻辑查询中,你可以包括特殊的运算符如AND、OR和NOT,你使用这些运算符来选择特定的记录。例如,你可以用AND来限制查询结果。如果你执行一个对ACTIVESEVERPAGESANDSQL的搜索。你将得到其描述中同时包含ACTIVESEVERPAGES和SQL的记录。当你需要限制查询结果时,你可以使用AND。如果你需要扩展查询的结果,你可以使用逻辑操作符OR。例如,如果你执行一个搜索,搜索所有的其描述中包含ACTIVESEVERPAGESORSQL的站点,你收到的列表中将包括所有其描述中同时包含两个表达式或其中任何一个表达式的站点。如果你想从搜索结果中排除特定的站点,你可以使用NOT。例如,查询“ACTIVESEVERPAGES”ANDNOT“SQL”将返回一个列表,列表中的站点包含ACTIVESEVERPAGES,但不包含SQL。当必须排除特定的记录时,你可以使用NOT。用SQL执行的查询与用INTERNET搜索引擎执行的搜索非常相似。当你执行一个SQL查询时,通过使用包括逻辑运算符的查询条件,你可以得到一个记录列表。此时查询结果是来自一个或多个表。SQL查询的句法非常简单。假设有一个名为EMAIL_TABLE的表,包含名字和地址两个字段,要得到BILLGATES的E_MAIL地址,你可以使用下面的查询SELECTEMAILFROMEMAIL_TABLEWHERENAME“BILLGATES“当这个查询执行时,就从名为EMAIL_TABLE的表中读取BILLGATES的E_MAIL地址。这个简单的语句包括三部分SELECT语句的第一部分指名要选取的列。在此例中,只有EMAIL列被选取。当执行时,只显示EMAIL列的值BILLGMICROSOFTCOM。SELECTT语句的第二部份指明要从哪个(些)表中查询数据。在此例中,要查询的表名为EMAIL_TABLE。最后,SELECT语句的WHERE子句指明要选择满足什么条件的记录。在此例中,查询条件为只有NAME列的值为BILLGATES的记录才被选取。BILLGATES很有可能拥有不止一个EMAIL地址。如果表中包含BILLGATES的多个EMAIL地址。用上述的SELECT语句可以读取他所有的EMAIL地址。SELECT语句从表中取出所有NAME字段值为BILLGATES的记录的EMAIL字段的值。前面说过,查询可以在查询条件中包含逻辑运算符。假如你想读取BILLGATES或CLINTON总统的所有EMAIL地址,你可以使用下面的查询语句SELECTEMAILFROMEMAIL_TABLEWHERENAME“BILLGATES“ORNAME“PRESIDENTCLINTON“此例中的查询条件比前一个复杂了一点。这个语句从表EMAIL_TABLE中选出所有NAME列为BILLGATES或PRESIDENTCLINTON的记录。如果表中含有BILLGATES或PRESIDENTCLINTON的多个地址,所有的地址都被读取。SELECT语句的结构看起来很直观。如果你请一个朋友从一个表中为你选择一组记录,你也许以非常相似的方式提出你的要求。在SQLSELECT语句中,你“SELECT特定的列FROM一个表WHERE某些列满足一个特定的条件”。下一节将介绍怎样执行SQL查询来选取记录。这将帮助你熟悉用SELECT语句从表中取数据的各种不同方法。SQL数据操作基础初级2使用ISQL执行SELECT查询当你安装SQLSEVER时,你同时安装了一个叫作ISQL/W的应用程序。ISQL/W允许你执行交互的SQL查询。在把查询包括到你的ASP网页中之前,用ISQL/W对其进行测试是非常有用的。注意在这本书的第一部份,你学习了怎样安装和配置MICROSOFTSQLSEVER。如果没有安装SQLSEVER或者SQLSEVER不能运行,请参阅第三章“安装和使用SQLSEVER”。选择任务上SQLSEVER程序组中的ISQL_W以启动该程序。程序启动时,首先会出现一个对话框,要求输入服务器信息和登录信息。在SEVER框中,输入你的SQL服务器的名字。如果服务器正运行在本地计算机上,服务器名字就是你计算机的名字。在登录信息框中,输入一个登录帐号和密码或选择使用“可信连接”,然后单击CONNECT按钮。注意如果你将SQLSEVER配置为使用完整安全或混合安全,那么你可以使用可信连接。如果你使用标准安全,你则需要提供用户帐号和密码。要了解更多信息,参见第三章。如果一切正常,在你单击连接按钮后会出现一个查询窗口。(如果有异常,请参考第三章)在执行查询之前,你需要选择数据库。安装SQLSEVER时你已为自己创建了一个数据库,SQLSEVER还有许多系统数据库,如MASTER,MODEL,MSDB,和TEMPDB。方便的是,SQLSEVER带有一个特殊的名为PUBS的例子数据库。库PUBS中包含供一个虚拟的出版商使用的各个表。文档中所有的例子程序都是针对这个库来设计的。本书中的许多例子也使用这个数据库。在查询窗口顶部的DB下拉框中选择数据库PUBS,这样你就选择了数据库。你所有的查询都将针对这个库中的各个表来执行。现在你可以执行你的第一个查询了。这真让人兴奋你的第一个查询将针对一个名为AUTRORS的表,表中包含所有为某个虚拟出版商工作的作者的相关数据。单击查询窗口并输入以下的语句SELECTPHONEFROMAUTHORSWHEREAU_NAME“RINGER“输入完成后,单击执行查询按钮(一个绿色三角形,看起来像VCR播放键)。单击此按钮后,任何出现在查询窗口中的语句均会被执行。查询窗口会自动变成结果显示窗口,你可以看到查询的结果。在SQLSEVER的不同版本中,库PUBS中的数据会有所不同。对SQLSEVER65来说,将会找到两条记录。结果显示窗口中应显示如下内容PHONE801826_0752801826_07522ROWSAFFECTED你所执行的SELECT语句从表AUTHORS中取出所有名字为RINGER的作者的电话号码。你通过在WHERE子句中使用特殊的选择条件来限制查询的结果。你也可以忽略选择条件,从表中取出所有作者的电话号码。要做到这一点,单击QUERY标签,返回到查询窗口,输入以下的SELECT语句SELECTPHONEFROMAUTHORS这个查询执行后,会取出表AUTHORS中的所有电话号码(没有特定的顺序)。如果表AUTHORS中包含一百个电话号码,会有一百个记录被取出,如果表中有十亿个电话号码,这十亿条记录都会被取出(这也许需要一些时间)。表AUTHRS的字段包括姓,名字,电话号码,地址,城市,州和邮政编码。通过在SELECT语句的第一部份指定它们,你可以从表中取出任何一个字段。你可以在一个SELECT语句中一次取出多个字段,比如SELECTAU_FNAME,AU_LNAME,PHONEFROMAUTHORS这个SELECT语句执行后,将取出这三个列的所有值。下面是这个查询的结果的一个示例(为了节省纸张,只显示查询结果的一部分,其余记录用省略号代替)AU_FNAMEAU_LNAMEPHONEJOHNSONWHITE408496_7223MARJORIEGREEN415986_7020CHERYLCARSON415548_7723MICHAELOLEARY408286_242823ROWSAFFECTED在SELECT语句中,你需要列出多少个字段,你就可以列出多少。不要忘了把字段名用逗号隔开。你也可以用星号()从一个表中取出所有的字段。这里有一个使用星号的例子SELECTFROMAUTHORS这个SELECT语句执行后,表中的所有字段的值都被取出。你会发现你将在SQL查询中频繁使用星号。技巧你可以使用星号来查看一个表的所有列的名字。要做到这一点,只需要在执行完SELECT语句后看一下查询结果的列标题。操作多个表到现在为止,你只尝试了用一句SQL查询从一个表中取出数据。你也可以用一个SELECT语句同时从多个表中取出数据,只需在SELECT语句的FROM从句中列出要从中取出数据的表名称即可SELECTAU_LNAME,TITLEFROMAUTHORS,TITLES这个SELECT语句执行时,同时从表AUTHORS和表TITLES中取出数据。从表AUTHORS中取出所有的作者名字,从表TITLES中取出所有的书名。在ISQL/W程序中执行这个查询,看一下查询结果。你会发现一些奇怪的出乎意料的情况作者的名字并没有和它们所著的书相匹配,而是出现了作者名字和书名的所有可能的组合,这也许不是你所希望见到的。出了什么差错问题在于你没有指明这两个表之间的关系。你没有通过任何方式告诉SQL如何把表和表关联在一起。由于不知道如何关联两个表,服务器只能简单地返回取自两个表中的记录的所有可能组合。要从两个表中选出有意义的记录组合,你需要通过建立两表中字段的关系来关联两个表。要做到这一点的途径之一是创建第三个表,专门用来描述另外两个表的字段之间的关系。表AUTHORS有一个名为AU_ID的字段,包含有每个作者的唯一标识。表TITLES有一个名为TITLE_ID的字段,包含每个书名的唯一标识。如果你能在字段AU_ID和字段TITLE_ID之间建立一个关系,你就可以关联这两个表。数据库PUBS中有一个名为TITLEAUTHOR的表,正是用来完成这个工作。表中的每个记录包括两个字段,用来把表TITLES和表AUTHORS关联在一起。下面的SELECT语句使用了这三个表以得到正确的结果SELECTAU_NAME,TITLEFROMAUTHORS,TITLES,TITLEAUTHORWHEREAUTHORSAU_IDTITLEAUTHORAU_IDANDTITLESTITLE_IDTITLEAUTHORTITLE_ID当这个SELECT语句执行时,每个作者都将与正确的书名相匹配。表TITLEAUTHOR指明了表AUTHORS和表TITLES的关系,它通过包含分别来自两个表的各一个字段实现这一点。第三个表的唯一目的是在另外两个表的字段之间建立关系。它本身不包含任何附加数据。注意在这个例子中字段名是如何书写的。为了区别表AUTHORS和表TITLES中相同的字段名AU_ID,每个字段名前面都加上了表名前缀和一个句号。名为AUTHORAU_ID的字段属于表AUTHORS,名为TITLEAUTHORAU_ID的字段属于表TITLEAUTHOR,两者不会混淆。通过使用第三个表,你可以在两个表的字段之间建立各种类型的关系。例如,一个作者也许写了许多不同的书,或者一本书也许由许多不同的作者共同完成。当两个表的字段之间有这种“多对多”的关系时,你需要使用第三个表来指明这种关系。但是,在许多情况下,两个表之间的关系并不复杂。比如你需要指明表TITLES和表PUBLISHERS之间的关系。因为一个书名不可能与多个出版商相匹配,你不需要通过第三个表来指明这两个表之间的关系。要指明表TITLES和表PUBLISHERS之间的关系,你只要让这两个表有一个公共的字段就可以了。在数据库PUBS中,表TITLES和表PUBLISHERS都有一个名为PUB_ID的字段。如果你想得到书名及其出版商的一个列表,你可以使用如下的语句SELECTTITLE,PUB_NAMEFROMTITLES,PUBLISHERSWHERETITLESPUB_IDPUBLISHERSPUB_ID当然,如果一本书是由两个出版商联合出版的,那么你需要第三个表来代表这种关系。通常,当你予先知道两个表的字段间存在“多对多”关系时,就使用第三个表来关联这两个表。反之,如果两个表的字段间只有“一对一”或“一对多”关系,你可以使用公共字段来关联它门。SQL数据操作基础初级3操作字段通常,当你从一个表中取出字段值时,该值与创建该表时所定义的字段名联系在一起。如果你从表AUTHORS中选择所有的作者名字,所有的值将会与字段名AU_LNAME相联系。但是在某些情况下,你需要对字段名进行操作。在SELECT语句中,你可以在缺省字段名后面仅跟一个新名字来取代它。例如,可以用一个更直观易读的名字AUTHORLASTNAME来代替字段名AU_LNAMESELECTAU_LNAME“AUTHORLASTNAME“FROMAUTHORS当这个SELECT语句执行时,来自字段AU_LNAME的值会与“AUTHORLASTNAME”相联系。查询结果可能是这样AUTHORLASTNAMEWHITEGREENCARSONOLEARYSTRAIGHT23ROWSAFFECTED注意字段标题不再是AU_LNAME,而是被AUTHORLASTNAME所取代。你也可以通过执行运算,来操作从一个表返回的字段值。例如,如果你想把表TITLES中的所有书的价格加倍,你可以使用下面的SELECT语句SELECTPRICE2FROMTITLES当这个查询执行时,每本书的价格从表中取出时都会加倍。但是,通过这种途径操作字段不会改变存储在表中的书价。对字段的运算只会影响SELECT语句的输出,而不会影响表中的数据。为了同时显示书的原始价格和涨价后的新价格,你可以使用下面的查询SELECTPRICE“ORIGINALPRICE“,PRICE2“NEWPRICE“FROMTITLES当数据从表TITLES中取出时,原始价格显示在标题ORIGINALPRICE下面,加倍后的价格显示在标题NEWPRICE下面。结果可能是这样ORIGINALPRICENEWPRICE399811952390598399818ROWSAFFECTED你可以使用大多数标准的数学运算符来操作字段值,如加(),减(),乘()和除(/)。你也可以一次对多个字段进行运算,例如SELECTPRICEYTD_SALES“TOTALREVENUE“FROMTITLES在这个例子中,通过把价格与销售量相乘,计算出了每种书的总销售额。这个SELECT语句的结果将是这样的TOTALREVENUE81,859,0546,318,2055,978,7881,859,0540,619,6818ROWSAFFECTED最后,你还可以使用连接运算符(它看起来像个加号)来连接两个字符型字段SELECTAU_FNAME“AU_LNAME“AUTHORNAME“FROMAUTHORS在这个例子中,你把字段AU_FNAME和字段AU_LNAME粘贴在一起,中间用一个逗号隔开,并把查询结果的标题指定为AUTHORNAME。这个语句的执行结果将是这样的AUTHORNAMESJOHNSONWHITEMARJORIEGREENCHERYLCARSONMICHAELOLEARYDEANSTRAIGHT23ROWSAFFECTED可以看到,SQL为你提供了对查询结果的许多控制。你应该在ASP编程过程中充分利用这些优点。使用SQL来操作查询结果几乎总是比使用有同样作用的脚本效率更高。排序查询结果本章的介绍中曾强调过,SQL表没有内在的顺序。例如,从一个表中取第二个记录是没有意义的。从SQL的角度看来,没有一个记录在任何其他记录之前。然而,你可以操纵一个SQL查询结果的顺序。在缺省情况下,当记录从表中取出时,记录不以特定的顺序出现。例如,当从表AUTHORS中取出字段AU_LNAME时,查询结果显示成这样AU_LNAMEWHITEGREENCARSONOLEARYSTRAIGHT23ROWSAFFECTED看一列没有特定顺序的名字是很不方便的。如果把这些名字按字母顺序排列,读起来就会容易得多。通过使用ORDERBY子句,你可以强制一个查询结果按升序排列,就像这样SELECTAU_LNAMEFROMAUTHORSORDERBYAU_LNAME当这个SELECT语句执行时,作者名字的显示将按字母顺序排列。ORDERBY子句将作者名字按升序排列。你也可以同时对多个列使用ORDERBY子句。例如,如果你想同时按升序显示字段AU_LNAME和字段AU_FNAME,你需要对两个字段都进行排序SELECTAU_LNAME,AU_FNAMEFROMAUTHORSORDERBYAU_LNAME,AU_FNAME这个查询首先把结果按AU_LNAME字段进行排序,然后按字段AU_FNAME排序。记录将按如下的顺序取出AU_LNAMEAU_FNAMEBENNETABRAHAMRINGERALBERTRINGERANNESMITHMEANDER23ROWSAFFECTED注意有两个作者有相同的名字RINGER。名为ALBERTRINGER的作者出现名为ANNERINGER的作者之前,这是因为姓ALBERT按字母顺序应排在姓ANNE之前。如果你想把查询结果按相反的顺序排列,你可以使用关键字DESC。关键字DESC把查询结果按降序排列,如下例所示SELECTAU_LNAME,AU_FNAMEFROMAUTHORSWHEREAU_LNAME”RINGER”ORDERBYAU_LNAME,AU_FNAMEDESC这个查询从表AUTHORS中取出所有名字为RINGER的作者记录。ORDERBY子句根据作者的名字和姓,将查询结果按降序排列。结果是这样的AU_LNAMEAU_FNAMERINGERANNERINGERALBERT2ROWSAFFECTEC注意在这个表中,姓ANNE出现在姓ALBERT之前。作者名字按降序显示。你也可以按数值型字段对一个查询结果进行排序。例如,如果你想按降序取出所有书的价格,你可以使用如下的SQL查询SELECTPRICEFROMTITLESORDERBYPRICEDESC这个SELECT语句从表中取出所有书的价格,显示结果时,价格低的书先显示,价格高的书后显示。警告不是特别需要时,不要对查询结果进行排序,因为服务器完成这项工作要费些力气。这意味着带有ORDERBY子句的SELECT语句执行起来比一般的SELECT语句花的时间长。取出互不相同的记录一个表有可能在同一列中有重复的值。例如,数据库PUBS的表AUTHORS中有两个作者的名字是RINGER。如果你从这个表中取出所有的名字,名字RINGER将会显示两次。在特定情况下,你可能只有兴趣从一个表
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安陆市2025-2026学年七年级上学期语文期中测试试卷
- 2013年7月国开电大法律事务专科《行政法与行政诉讼法》期末纸质考试试题及答案
- 湖南省怀化市实验中学2025-2026学年度上学期高一化学入学考试试卷(含答案)
- 2025年8月辽宁省鞍山市立山区七年级新生分班考试数学试题(含答案)
- 出售煤矿风机合同范本
- 劳动合同范本唐山
- 闸门改造工程合同范本
- 建筑木材收购合同范本
- 西安工作签合同范本
- 学校用地出租合同范本
- 2025数字量化混凝土配合比设计标准
- 宁德新能源verify测试题库
- 主通风机司机培训教材课件
- 《等腰三角形的性质》优秀课件
- 肺心病(课)课件
- 加油站打散油证明模板
- 中国烟草PPT模板
- c51e四门两盖耐久试验大纲
- 江苏省综合评标专家库题库
- 16竞品信息技术参数表
- 农作物品种试验技术规程玉米
评论
0/150
提交评论