在大部分 ASP 應(yīng)用程序中我們都會(huì)接觸到數(shù)據(jù)庫(kù),而我們?cè)诰帉?ASP 應(yīng)用程序時(shí)用來(lái)進(jìn)行數(shù)據(jù)庫(kù)操作的標(biāo)準(zhǔn)語(yǔ)法正是 SQL,因此 SQL 語(yǔ)法的重要性是不言而喻的。下面,我們就從最常用的 SQL 語(yǔ)句 SELECT 著手,一步一步地來(lái)學(xué)習(xí) SQL。
查詢是 SQL 語(yǔ)言的核心,而用于表達(dá) SQL 查詢的 SELECT 語(yǔ)句則是功能最強(qiáng)也是最為復(fù)雜的 SQL 語(yǔ)句,它從數(shù)據(jù)庫(kù)中檢索數(shù)據(jù),并將查詢結(jié)果提供給用戶。在本文中我們將建立一個(gè)名為 tianjiao 的簡(jiǎn)單數(shù)據(jù)庫(kù),該庫(kù)中存放了一個(gè)叫 sales 的銷售記錄表,如下所示 :
姓名 | 性別 | 工資 | 銷售目標(biāo) | 銷售額 | 地區(qū) |
888 | 男 | 2500 | 8000 | 9000 | 上海 |
吳冠軍 | 男 | 3000 | 10000 | 9999 | 北京 |
雷鳴 | 男 | 2000 | 8000 | 10000 | 四川 |
雪兒 | 女 | 2500 | 5000 | 6000 | 廣州 |
顧一 | 男 | 2600 | 9000 | 9800 | 大連 |
阿卓 | 女 | 2000 | 4000 | 4000 | 天津 |
熠天 | 男 | 4000 | 20000 | 20000 | 全國(guó) |
在該表中有六列即六個(gè)字段 : 姓名、性別、工資、銷售目標(biāo)、銷售額、地區(qū),首先我們用 Select 語(yǔ)句列出姓名、銷售目標(biāo)和銷售額 :
Select 姓名,銷售目標(biāo),銷售額 From sales
結(jié)果如下 :
姓名 | 銷售目標(biāo) | 銷售額 |
888 | 8000 | 9000 |
吳冠軍 | 10000 | 9999 |
雷鳴 | 8000 | 10000 |
雪兒 | 5000 | 6000 |
顧一 | 9000 | 9800 |
阿卓 | 4000 | 4000 |
熠天 | 20000 | 20000 |
然后,我們?cè)倭谐鏊心行缘男彰?、銷售目標(biāo)和銷售額 :
Select 姓名,銷售目標(biāo),銷售額 From sales Where 性別 =" 男 "
結(jié)果如下 :
姓名 | 銷售目標(biāo) | 銷售額 |
888 | 8000 | 9000 |
吳冠軍 | 10000 | 9999 |
雷鳴 | 8000 | 10000 |
顧一 | 9000 | 9800 |
熠天 | 20000 | 20000 |
接下來(lái),我們做一個(gè)相對(duì)復(fù)雜的查詢,列出銷售額大于銷售目標(biāo)的所有男性的姓名、銷售目標(biāo)和銷售額,并且按銷售目標(biāo)排序。
Select 姓名,銷售目標(biāo),銷售額
Form sales
Where 銷售額 > 銷售目標(biāo)
And 性別 =" 男 "
Order By 銷售目標(biāo)
結(jié)果如下 :
姓名 | 銷售目標(biāo) | 銷售額 |
888 | 8000 | 9000 |
雷鳴 | 8000 | 10000 |
顧一 | 9000 | 9800 |
熠天 | 20000 | 20000 |
大家可以看到,對(duì)于簡(jiǎn)單查詢,SQL Select 語(yǔ)句和英文語(yǔ)法很相象,我們來(lái)分析一下 SELECT 語(yǔ)句的完整格式,它包括六個(gè)子句,其中 SELECT 和 FROM 子句是必須的,其它子句可以任選,每個(gè)子句的功能如下 :
1、Select 子句列出所有要求 SELECT 語(yǔ)句檢索的數(shù)據(jù)項(xiàng)。它放在 SELECT 語(yǔ)句開始處,指定此查詢要檢索的數(shù)據(jù)項(xiàng)。這些數(shù)據(jù)項(xiàng)通常用選擇表表示,即一組用“,”隔開的選擇項(xiàng)。按照從左到右的順序,每個(gè)選擇項(xiàng)產(chǎn)生的一個(gè)列的查詢結(jié)果,一個(gè)選擇項(xiàng)可能是以下項(xiàng)目:
(1)、列名:標(biāo)識(shí) FROM 子句指定表中的列。如果列名作為選擇項(xiàng),則 SQL 直接從數(shù)據(jù)庫(kù)表中每行取出該列的值,再將其放在查詢結(jié)果的相應(yīng)行中。
(2)、常數(shù):指定在查詢結(jié)果的每行中都放上該值。
(3)、SQL 表達(dá)式:說(shuō)明必須將要放入查詢結(jié)果中的值按表達(dá)式的規(guī)定進(jìn)行計(jì)算。
2、From 子句列出包含所要查詢數(shù)據(jù)的表,它由關(guān)鍵字 FROM 后跟一組用逗號(hào)分開的表名組成。每個(gè)表明都代表一個(gè)包括該查詢要檢索數(shù)據(jù)的表。這些表稱為此 SQL 語(yǔ)句的表源,因?yàn)椴樵兘Y(jié)果都源于它們。
3、Where 子句告訴 SQL 只查詢某些行中的數(shù)據(jù),這些行用搜索條件描述。
4、Group By 子句指定匯總查詢,即不是對(duì)每行產(chǎn)生一個(gè)查詢結(jié)果,而是將相似的行進(jìn)行分組,再對(duì)每組產(chǎn)生一個(gè)匯總結(jié)果。
5、Having 子句告訴 SQL 只產(chǎn)生有 Group By 得到的某些組的結(jié)果,和 Where 子句一樣,所需要的組也用一個(gè)搜索條件指定。
6、Order By 子句將查詢結(jié)果按一列或多列中的數(shù)據(jù)排序。如果省略此子句,則查詢結(jié)果將是無(wú)序的。
下面作者將提供一個(gè)簡(jiǎn)單但實(shí)用的運(yùn)用 SQL 語(yǔ)句查詢的 ASP 程序供大家參考。
為了使大家更清楚更直接地了解 SQL 語(yǔ)法在 ASP 中的應(yīng)用,我們先將查詢的所有核心過(guò)程寫成一個(gè)名為 query2table 的 SUB,然后利用 ASP 的服務(wù)器端包容功能調(diào)用該 SUB。請(qǐng)將以下語(yǔ)句剪貼到記事簿,保存為 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
' 統(tǒng)計(jì)數(shù)據(jù)庫(kù)中的列數(shù)
%>
?。?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 的值定義為一個(gè)空格
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 的定義過(guò)程,在下面幾個(gè) ASP 程序中我們只要加入想要使用的 SQL 查詢語(yǔ)句,并調(diào)用該過(guò)程就可以非常方便的得到查詢結(jié)果。將以下四段代碼分別保存為 asp11a.asp、asp11b.asp、asp11c.asp、asp11d.asp 四個(gè) .asp 文件。
< HEAD>< TITLE>asp11a.asp< /TITLE>< /HEAD>
?。?HTML>< body bgcolor="#FFFFFF">
?。?%
call query2table("select > from publishers where name like 'A%%'")
' 將表 publishers 中所有姓名中有字母 A 的記錄查詢出來(lái)
%>
< !--#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 中所有發(fā)表年份大于或等于 1998 年的記錄查詢出來(lái)
%>
< !--#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 中所有數(shù)量大于 10000 且性別為男的記錄查詢出來(lái)
%>
?。?!--#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 中所有所在城市不為紐約的記錄查詢出來(lái)。
%>
< !--#include virtual="/asptest/subdbtable.inc"-->< /BODY>< /HTML>
利用 subdbtable.inc 文件中的所定義的過(guò)程 query2table,你就可以非常迅速地對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢,你所要做的只是將“conntemp.open "DSN=Student;uid=student;pwd=aspmagic"”中的數(shù)據(jù)庫(kù)名稱、用戶身份和密碼稍加改動(dòng),并在調(diào)用 query2table 時(shí)輸入想要使用的 SQL 查詢語(yǔ)句即可。是不是很簡(jiǎn)單 ? 這就是 ASP 和 SQL 的魅力所在 !!!
今天,我們雖然用了一整篇的篇幅只學(xué)習(xí)了一個(gè) SQL 指令,但請(qǐng)你相信你所獲得遠(yuǎn)不同于一個(gè) DOS 指令,SELECT 指令使得你可以非常容易地對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢,或許在這之前你對(duì)數(shù)據(jù)庫(kù)查詢還一無(wú)所知,但是通過(guò)本篇的學(xué)習(xí),你其實(shí)已經(jīng)會(huì)使用 ASP 進(jìn)行常用的數(shù)據(jù)庫(kù)查詢了,是不是很激動(dòng) ? 在下一篇中,作者將繼續(xù)給大家介紹 SQL 的其它幾個(gè)基本指令。