大家可以看到,對於簡單查詢,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 c
onntemp=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 學習站點,由上海的飛鳥主持,大家務必去看看。