ASP基础入门:数据库查询语言(1)


  原定 方案从本篇开始就要给大家介绍 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)

  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