友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
喜书网 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

asp基础入门篇(DOC格式)-第11章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!



然后,我们再列出所有男性的姓名、销售目标和销售额 :
Select 姓名,销售目标,销售额 From sales Where 性别 =〃 男 〃
结果如下 :姓名销售目标销售额书生80009000吴冠军100009999雷鸣800010000顾一90009800熠天2000020000
接下来,我们做一个相对复杂的查询,列出销售额大于销售目标的所有男性的姓名、销售目标和销售额,并且按销售目标排序。
Select 姓名,销售目标,销售额
Form sales
Where 销售额 》销售目标
And 性别 =〃 男 〃
Order By 销售目标
结果如下 : 姓名销售目标销售额书生80009000雷鸣800010000顾一90009800熠天2000020000
大家可以看到,对于简单查询,SQL Select 语句和英文语法很相象,我们来分析一下 SELECT 语句的完整格式,它包括六个子句,其中 SELECT 和 FROM 子句是必须的,其它子句可以任选,每个子句的功能如下 :
1、Select 子句列出所有要求 SELECT 语句检索的数据项。它放在 SELECT 语句开始处,指定此查询要检索的数据项。这些数据项通常用选择表表示,即一组用〃,〃隔开的选择项。按照从左到右的顺序,每个选择项产生的一个列的查询结果,一个选择项可能是以下项目:
(1)、列名:标识 FROM 子句指定表中的列。如果列名作为选择项,则 SQL 直接从数据库表中每行取出该列的值,再将其放在查询结果的相应行中。
(2)、常数:指定在查询结果的每行中都放上该值。
(3)、SQL 表达式:说明必须将要放入查询结果中的值按表达式的规定进行计算。
2、From 子句列出包含所要查询数据的表,它由关键字 FROM 后跟一组用逗号分开的表名组成。每个表明都代表一个包括该查询要检索数据的表。这些表称为此 SQL 语句的表源,因为查询结果都源于它们。
3、Where 子句告诉 SQL 只查询某些行中的数据,这些行用搜索条件描述。
4、Group By 子句指定汇总查询,即不是对每行产生一个查询结果,而是将相似的行进行分组,再对每组产生一个汇总结果。
5、Having 子句告诉 SQL 只产生有 Group By 得到的某些组的结果,和 Where 子句一样,所需要的组也用一个搜索条件指定。
6、Order By 子句将查询结果按一列或多列中的数据排序。如果省略此子句,则查询结果将是无序的。
下面作者将提供一个简单但实用的运用 SQL 语句查询的 ASP 程序供大家参考。
为了使大家更清楚更直接地了解 SQL 语法在 ASP 中的应用,我们先将查询的所有核心过程写成一个名为 query2table 的 SUB,然后利用 ASP 的服务器端包容功能调用该 SUB。请将以下语句剪贴到记事簿,保存为 subdbtable。inc 文件,并置于虚拟目录 asptest 下 :
《 %
sub query2table(inputquery)
set conntemp=server。createobject(〃adodb。connection〃)
conntemp。open 〃DSN=Student;uid=student;pwd=aspmagic〃
set rstemp=conntemp。execute(inputquery)
howmanyfields=rstemp。fields。count …1
' 统计数据库中的列数
%》
《 table border=1》《 tr》
《 %
for i=0 to howmanyfields
%》
《 td》《 b》《 %=rstemp(i)。name%》《 /B》《 /TD》
《 % next %》
《 /tr》
《 %
do while not rstemp。eof
%》
《 tr》
《 % for i = 0 to howmanyfields
thisvalue=rstemp(i)
If isnull(thisvalue) then
thisvalue=〃?
' 如果字段为空,则将变量 thisvalue 的值定义为一个空格
end if%》
《 td valign=top》《 %=thisvalue%》《 /td》
《 % next %》
《 /tr》
《 %rstemp。movenext
loop%》
《 /table》
《 %
rstemp。close
set rstemp=nothing
conntemp。close
set conntemp=nothingend sub%》
完成了 SUB 的定义过程,在下面几个 ASP 程序中我们只要加入想要使用的 SQL 查询语句,并调用该过程就可以非常方便的得到查询结果。将以下四段代码分别保存为 asp11a。asp、asp11b。asp、asp11c。asp、asp11d。asp 四个 。asp 文件。
《 HEAD》《 TITLE》asp11a。asp《 /TITLE》《 /HEAD》
《 HTML》《 body bgcolor=〃#FFFFFF〃》
《 %
call query2table(〃select * from publishers where name like 'A%%'〃)
' 将表 publishers 中所有姓名中有字母 A 的记录查询出来
%》
《 !……#include virtual=〃/asptest/subdbtable。inc〃……》《 /BODY》《 /HTML》
《 HEAD》《 TITLE》asp11b。asp《 /TITLE》《 /HEAD》《 HTML》《 body bgcolor=〃#FFFFFF〃》
《 %
call query2table(〃select * from titles where Year_Published 》= 1998〃)
' 将表 titles 中所有发表年份大于或等于 1998 年的记录查询出来
%》
《 !……#include virtual=〃/asptest/subdbtable。inc〃……》《 /BODY》《 /HTML》
《 HEAD》《 TITLE》asp11c。asp《 /TITLE》《 /HEAD》《 HTML》《 body bgcolor=〃#FFFFFF〃》
《 %
call query2table(〃select * from publishers where amount》10000 and sex='male'〃)
' 将表 publishers 中所有数量大于 10000 且性别为男的记录查询出来
%》
《 !……#include virtual=〃/asptest/subdbtable。inc〃……》《 /BODY》《 /HTML》
《 HEAD》《 TITLE》asp11d。asp《 /TITLE》《 /HEAD》《 HTML》《 body bgcolor=〃#FFFFFF〃》
《 %
call query2table(〃select * from publishers where state《 》'NY'〃)
'将表 publishers 中所有所在城市不为纽约的记录查询出来。
%》
《 !……#include virtual=〃/asptest/subdbtable。inc〃……》《 /BODY》《 /HTML》
利用 subdbtable。inc 文件中的所定义的过程 query2table,你就可以非常迅速地对数据库进行查询,你所要做的只是将〃conntemp。open 〃DSN=Student;uid=student;pwd=aspmagic〃〃中的数据库名称、用户身份和密码稍加改动,并在调用 query2table 时输入想要使用的 SQL 查询语句即可。是不是很简单 ? 这就是 ASP 和 SQL 的魅力所在 !!!
今天,我们虽然用了一整篇的篇幅只学习了一个 SQL 指令,但请你相信你所获得远不同于一个 DOS 指令,SELECT 指令使得你可以非常容易地对数据库进行查询,或许在这之前你对数据库查询还一无所知,但是通过本篇的学习,你其实已经会使用 ASP 进行常用的数据库查询了,是不是很激动 ? 在下一篇中,作者将继续给大家介绍 SQL 的其它几个基本指令。
ASP基础教程:数据库查询语言(2)
  在本篇的开头,我要感谢一些朋友来信给我指出了前几篇文章中的错误。不知大家是否记得在第八篇中我举了一个简单的利用 Application 制作的页面访问计数器?有位朋友来信问我,为何当他改变计数器起始变量 NumVisits 的值后对最后的记数结果没有任何作用?起初我也大惑不解,让我们来回忆一下这段源程序,如下:
《 %
Dim NumVisits
NumVisits=0
Application。Lock
Application(〃NumVisits〃) = Application(〃NumVisits〃) + 1
Application。Unlock
%》
    欢迎光临本网页,你是本页的第 《 %= Application(〃NumVisits〃) %》位访客 !
在这段程序中,如果你试图通过改变变量 NumVisits 的值来改变记数器结果,是绝对办不到的。因为用变量的值去改变 Application 的值是不可以的,这两者是不相关的。所以这里对变量的定义和赋值都是多余的。那么我们究竟应该如何来给 Application(〃NumVisits〃) 定义一个初始值呢?请看以下修正后程序:
《 %
If Application(〃NumVisits〃)《 999 then
Application(〃NumVisits〃)=999
End If
Application。Lock
Application(〃NumVisits〃)=Application(〃NumVisits〃)+1
Application。Unlock
%》
    欢迎光临本网页,你是本页的第 《 %= Application(〃NumVisits〃) %》位访客 !
     这里的 999 就是你要设定的计数器初始值,如此一来问题就迎刃而解了。我非常感谢这位姓康的朋友给我指出了这个错误,虽然这只是一个很小的漏洞,但我们在共同学程序写程序的过程中非常需要这种严谨细致的作风,希望今后朋友们们一旦发现文中的错误即刻来信告知,我也能及时纠正,谢谢。
      SQL 语言可以分为两大部分:数据定义语言和数据操纵语言,继上一篇我们学习了数据操纵语言中的 Select 语句后,今天作者要继续给大家简要介绍其余的 SQL 语句。
      SQL 是一种完备的数据处理语言,不仅用于数据库查询,而且用于数据库中的数据修改和更新,与支持 SQL 查询的 Select 语句的复杂性相比较,更改数据库内容的 SQL 语句就格外简单。然而对于一个 DBMS 来说,数据更新所造成的风险大大超出了数据查询。数据库管理系统必须在更改期内保护所存储的数据的一致性,确保有效的数据进入数据库,数据库必须保持一致性, DBMS 还必须协调多用户的并行更新,以确保用户和他们的更改不至于影响其他用户的作业。
     用于修改数据库内容的 SQL 语句主要有以下三个:
1、 Insert,向一个表中加入新的数据行
2、 Delete,从一个表中删除数据行
3、 Update,更改数据库中已经存在的数据
首先我们来看看 Insert 的用法:
标准语法:
   INSERT INTO table_name
   (col1; col2。。。)
   VALUES(value1; value2。。。)
下例要将书生作为一个新的销售员加入表 Salesreps 中
   Insert Into
   Salesreps (name;num;sales;hire_date;ine)
   values ('shusheng';9;10000;'23…Feb…99';2000)
     在此语句中,列的名称列在括号中以逗号隔开,接下去是 Value 短语和括号中同样以逗号隔开的每列数据,应该注意的是数据和列名称的顺序是相同的,而且若是字符串型则以单引号隔开。从概念上来讲, Insert 语句建立的一个与表列结构相一致的数据行,用取自 Values 子句的数据来填充它,然后将该新行加入表中,表中的行是不排序的,因此不存在将该行插入到表的头或尾或两行之间的这个概念。 Insert 语句结束后,新行就是表的一部分了。
      Insert 语句还可以将多行数据添加到目标表中去,在这种形式的 Insert 语句中,新行的数据值不是在语句正文中明确地指定的,而是语句中指定的一个数据库查询。添加的值来自数据库自身的行,这乍看起来似乎有些奇怪,但是在某些特定的状态下,这是非常有用的。比如,你想把 1998 年 12 月 30 日之前产生的订单编号、日期和数目从 order 表中拷贝到另一个名为 oldorder 的表中去,多行 Insert 语句为拷贝数据提供了一种紧凑而高效的方法,如下:
   Insert into oldorder (Num;Date;Amount)
   Select Num;Date;Amount
   From order
   Where Date
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!