首页 | 免费域名 | 个人服务器 | 一流信息监控拦截系统 | 虚拟主机知识库 | ASP 空间 | ASP技术大全 | 下载中心 | 客户服务中心
  7i24 > ASP技术大全 > ASP快速入门(书生版) >
    7i24 .Com  
  动态网站设计十八般武艺——ASP篇(十一)

7i24.Com不停为您服务
动态网站设计十八般武艺——ASP篇(十一)
作者:天骄创作室 书生

 

  原定计划从本篇开始就要给大家介绍ASP内建的ActiveX组件,但是考虑到我们在往后的学习中将会接触到大量的数据库查询,因此作者临时决定花一到两篇的篇幅向大家简要介绍一些数据库查询语言的基本知识,这其实也是学习ASP所必须掌握的一门知识。是否能够灵活地运用数据库查询语言,将直接关系到ASP程序的执行效率等一系列问题,所以请各位务必重视。

  相信很多朋友都听说过SQL这个名字,如果你是计算机方面的行家,SQL的大名一定是如雷贯耳。那么SQL究竟是什么呢?SQL一词实际上是"Structured Query Language"结构式查询语言的缩写,是用于对存放在计算机数据库中的数据进行组织、管理和检索的一种工具;是一种特定类型的数据库--关系数据库。而控制这种数据库的计算机程序就是我们常说的DBMS--数据库管理系统。譬如:SQL Server、Oracle、Sybase、DB2等等。当用户想要检索数据库中的数据时,就通过SQL语言发出请求,接着DBMS对该SQL请求进行处理并检索所要求的数据,最后将其返回给用户,此过程被称作为数据库查询,这也就是数据库查询语言这一名称的由来。

  SQL并不是象C、COBOL和Fortran语言那样的完整的计算机语言。SQL没有用于条件测试的IF语句,也没有用于程序分支的Goto语句以及循环语句For或Do。确切的讲,SQL是一种数据库子语言,SQL语句可以被嵌入到另一种语言中,从而使其具有数据库存取功能。SQL也非严格的结构式语言,它的句法更接近英语语句,因此易于理解,大多数SQL语句都是直述其意,读起来就象自然语言一样明了。SQL还是一种交互式查询语言,允许用户直接查询存储数据,利用这一交互特性,用户可以在很短的时间内回答相当复杂的问题,而同样问题若让程序员编写相应的报表程序则可能要用几个星期甚至更长时间。

  在大部分ASP应用程序中我们都会接触到数据库,而我们在编写ASP应用程序时用来进行数据库操作的标准语法正是SQL,因此SQL语法的重要性是不言而喻的。下面,我们就从最常用的SQL语句SELECT着手,一步一步地来学习SQL。

  查询是SQL语言的核心,而用于表达SQL查询的SELECT语句则是功能最强也是最为复杂的SQL语句,它从数据库中检索数据,并将查询结果提供给用户。在本文中我们将建立一个名为tianjiao的简单数据库,该库中存放了一个叫sales的销售记录表,如下所示:

姓名 性别 工资 销售目标 销售额 地区
书生 男 2500 8000 9000 上海
吴冠军 男 3000 10000 9999 北京
雷鸣 男 2000 8000 10000 四川
雪儿 女 2500 5000 6000 广州
顾一 男 2600 9000 9800 大连
阿卓 女 2000 4000 4000 天津
熠天 男 4000 20000 20000 全国



  在该表中有六列即六个字段:姓名、性别、工资、销售目标、销售额、地区,首先我们用Select语句列出姓名、销售目标和销售额:

  Select 姓名,销售目标,销售额 From sales

  结果如下:
姓名 销售目标 销售额
书生 8000 9000
吴冠军 10000 9999
雷鸣 8000 10000
雪儿 5000 6000
顾一 9000 9800
阿卓 4000 4000
熠天 20000 20000



  然后,我们再列出所有男性的姓名、销售目标和销售额:

  Select 姓名,销售目标,销售额 From sales Where 性别="男"

  结果如下:
姓名 销售目标 销售额
书生 8000 9000
吴冠军 10000 9999
雷鸣 8000 10000
顾一 9000 9800
熠天 20000 20000



  接下来,我们做一个相对复杂的查询,列出销售额大于销售目标的所有男性的姓名、销售目标和销售额,并且按销售目标排序。
  Select 姓名,销售目标,销售额
  Form sales
  Where 销售额>销售目标
  And 性别="男"
  Order By 销售目标


  结果如下:
姓名 销售目标 销售额
书生 8000 9000
雷鸣 8000 10000
顾一 9000 9800
熠天 20000 20000



  大家可以看到,对于简单查询,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)
  setconntemp=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 onntemp=nothing
  end 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的其它几个基本指令。在结束本文之前,作者在这里要向很多来信的朋友致歉,由于最近作者工作繁忙,实在无暇一一回答各位的问题,请见谅,我会尽量将一些常见的、发生频率较高的问题在文章中写出来.


  2002年1月3日  阅读 3854 次  发送此页给朋友  来源:    版权争议  删除

相关文章:   近期热点:

上一篇: 动态网站设计十八般武艺——ASP篇(十)
下一篇: 动态网站设计十八般武艺——ASP篇(十二)
返回上一层...
搜索:

(C)2004-2022 7i24.Com 保留所有权利