ASP教程:第十二篇 資料庫查詢語言(1)

來源:互聯網
上載者:User
 原定計劃從本篇開始就要給大家介紹 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 的其它幾個基本指令。在結束本文之前,作者在這裡要向很多來信的朋友致歉,由於最近作者工作繁忙,實在無暇一一回答各位的問題,請見諒,我會盡量將一些常見的、發生頻率較高的問題在文章中寫出來,至於一些不常見的問題,我建議大家到下面這個網站提問,你將會得到及時的回覆。www.onlinechina.net/friend/flybird/bbs/wwwboard.asp?id=1, 這是作者至今為止所見的最棒的中文 ASP 學習網站,由上海的飛鳥主持,大家務必去看看。



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

11.11 Big Sale for Cloud

Get Unbeatable Offers with up to 90% Off,Oct.24-Nov.13 (UTC+8)

Get It Now >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。