數(shù)據(jù)庫查詢語言(1)
發(fā)表時(shí)間:2024-06-13 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]原定計(jì)劃從本篇開始就要給大家介紹 ASP 內(nèi)建的 ActiveX 組件,但是考慮到我們在往后的學(xué)習(xí)中將會(huì)接觸到大量的數(shù)據(jù)庫查詢,因此作者臨時(shí)決定花一到兩篇的篇幅向大家簡要介紹一些數(shù)據(jù)庫查詢語言的基本知識(shí),這其實(shí)也是學(xué)習(xí) ASP 所必須掌握的一門知識(shí)。是否能夠靈活地運(yùn)用數(shù)據(jù)庫查詢語言,將直接關(guān)系到 ...
原定計(jì)劃從本篇開始就要給大家介紹 ASP 內(nèi)建的 ActiveX
組件,但是考慮到我們在往后的學(xué)習(xí)中將會(huì)接觸到大量的數(shù)據(jù)庫查詢,因此作者臨時(shí)決定花一到兩篇的篇幅向大家簡要介紹一些數(shù)據(jù)庫查詢語言的基本知識(shí),這其實(shí)也是學(xué)習(xí)
ASP
所必須掌握的一門知識(shí)。是否能夠靈活地運(yùn)用數(shù)據(jù)庫查詢語言,將直接關(guān)系到
ASP 程序的執(zhí)行效率等一系列問題,所以請各位務(wù)必重視。
相信很多朋友都聽說過 SQL
這個(gè)名字,如果你是計(jì)算機(jī)方面的行家,SQL
的大名一定是如雷貫耳。那么 SQL 究竟是什么呢?SQL 一詞實(shí)際上是
"Structured Query Language"
結(jié)構(gòu)式查詢語言的縮寫,是用于對存放在計(jì)算機(jī)數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行組織、管理和檢索的一種工具;是一種特定類型的數(shù)據(jù)庫
-- 關(guān)系數(shù)據(jù)庫。而控制這種數(shù)據(jù)庫的計(jì)算機(jī)程序就是我們常說的
DBMS-- 數(shù)據(jù)庫管理系統(tǒng)。譬如:SQL Server、Oracle、Sybase、DB2
等等。當(dāng)用戶想要檢索數(shù)據(jù)庫中的數(shù)據(jù)時(shí),就通過 SQL
語言發(fā)出請求,接著 DBMS 對該 SQL
請求進(jìn)行處理并檢索所要求的數(shù)據(jù),最后將其返回給用戶,此過程被稱作為數(shù)據(jù)庫查詢,這也就是數(shù)據(jù)庫查詢語言這一名稱的由來。
SQL 并不是象 C、COBOL 和 Fortran 語言那樣的完整的計(jì)算機(jī)語言。SQL
沒有用于條件測試的 IF 語句,也沒有用于程序分支的 Goto
語句以及循環(huán)語句 For 或 Do。確切的講,SQL 是一種數(shù)據(jù)庫子語言,SQL
語句可以被嵌入到另一種語言中,從而使其具有數(shù)據(jù)庫存取功能。SQL
也非嚴(yán)格的結(jié)構(gòu)式語言,它的句法更接近英語語句,因此易于理解,大多數(shù)
SQL 語句都是直述其意,讀起來就象自然語言一樣明了。SQL
還是一種交互式查詢語言,允許用戶直接查詢存儲(chǔ)數(shù)據(jù),利用這一交互特性,用戶可以在很短的時(shí)間內(nèi)回答相當(dāng)復(fù)雜的問題,而同樣問題若讓程序員編寫相應(yīng)的報(bào)表程序則可能要用幾個(gè)星期甚至更長時(shí)間。
在大部分 ASP 應(yīng)用程序中我們都會(huì)接觸到數(shù)據(jù)庫,而我們在編寫
ASP 應(yīng)用程序時(shí)用來進(jìn)行數(shù)據(jù)庫操作的標(biāo)準(zhǔn)語法正是 SQL,因此 SQL
語法的重要性是不言而喻的。下面,我們就從最常用的 SQL 語句 SELECT
著手,一步一步地來學(xué)習(xí) SQL。
查詢是 SQL 語言的核心,而用于表達(dá) SQL 查詢的 SELECT
語句則是功能最強(qiáng)也是最為復(fù)雜的 SQL
語句,它從數(shù)據(jù)庫中檢索數(shù)據(jù),并將查詢結(jié)果提供給用戶。在本文中我們將建立一個(gè)名為
tianjiao 的簡單數(shù)據(jù)庫,該庫中存放了一個(gè)叫 sales
的銷售記錄表,如下所示 :
姓名
性別
工資
銷售目標(biāo)
銷售額
地區(qū)
書生
男
2500
8000
9000
上海
吳冠軍
男
3000
10000
9999
北京
雷鳴
男
2000
8000
10000
四川
雪兒
女
2500
5000
6000
廣州
顧一
男
2600
9000
9800
大連
阿卓
女
2000
4000
4000
天津
熠天
男
4000
20000
20000
全國
在該表中有六列即六個(gè)字段 :
姓名、性別、工資、銷售目標(biāo)、銷售額、地區(qū),首先我們用 Select
語句列出姓名、銷售目標(biāo)和銷售額 :
Select 姓名,銷售目標(biāo),銷售額 From sales
結(jié)果如下 :
姓名
銷售目標(biāo)
銷售額
書生
8000
9000
吳冠軍
10000
9999
雷鳴
8000
10000
雪兒
5000
6000
顧一
9000
9800
阿卓
4000
4000
熠天
20000
20000
然后,我們再列出所有男性的姓名、銷售目標(biāo)和銷售額 :
Select 姓名,銷售目標(biāo),銷售額 From sales Where 性別 =" 男
"
結(jié)果如下 :
姓名
銷售目標(biāo)
銷售額
書生
8000
9000
吳冠軍
10000
9999
雷鳴
8000
10000
顧一
9000
9800
熠天
20000
20000
接下來,我們做一個(gè)相對復(fù)雜的查詢,列出銷售額大于銷售目標(biāo)的所有男性的姓名、銷售目標(biāo)和銷售額,并且按銷售目標(biāo)排序。
Select 姓名,銷售目標(biāo),銷售額
Form sales
Where 銷售額 > 銷售目標(biāo)
And 性別 =" 男 "
Order By 銷售目標(biāo)
結(jié)果如下 :
姓名
銷售目標(biāo)
銷售額
書生
8000
9000
雷鳴
8000
10000
顧一
9000
9800
熠天
20000
20000
大家可以看到,對于簡單查詢,SQL Select
語句和英文語法很相象,我們來分析一下 SELECT
語句的完整格式,它包括六個(gè)子句,其中 SELECT 和FROM
子句是必須的,其它子句可以任選,每個(gè)子句的功能如下 :
1、Select 子句列出所有要求 SELECT 語句檢索的數(shù)據(jù)項(xiàng)。它放在
SELECT
語句開始處,指定此查詢要檢索的數(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ù)庫表中每行取出該列的值,再將其放在查詢結(jié)果的相應(yīng)行中。
(2)、常數(shù):指定在查詢結(jié)果的每行中都放上該值。
(3)、SQL
表達(dá)式:說明必須將要放入查詢結(jié)果中的值按表達(dá)式的規(guī)定進(jìn)行計(jì)算。
2、From 子句列出包含所要查詢數(shù)據(jù)的表,它由關(guān)鍵字 FROM
后跟一組用逗號(hào)分開的表名組成。每個(gè)表明都代表一個(gè)包括該查詢要檢索數(shù)據(jù)的表。這些表稱為此
SQL 語句的表源,因?yàn)椴樵兘Y(jié)果都源于它們。
3、Where 子句告訴 SQL
只查詢某些行中的數(shù)據(jù),這些行用搜索條件描述。
4、Group By
子句指定匯總查詢,即不是對每行產(chǎn)生一個(gè)查詢結(jié)果,而是將相似的行進(jìn)行分組,再對每組產(chǎn)生一個(gè)匯總結(jié)果。
5、Having 子句告訴 SQL 只產(chǎn)生有 Group By
得到的某些組的結(jié)果,和 Where
子句一樣,所需要的組也用一個(gè)搜索條件指定。
6、Order By
子句將查詢結(jié)果按一列或多列中的數(shù)據(jù)排序。如果省略此子句,則查詢結(jié)果將是無序的。
下面作者將提供一個(gè)簡單但實(shí)用的運(yùn)用 SQL 語句查詢的 ASP
程序供大家參考。
為了使大家更清楚更直接地了解 SQL 語法在 ASP
中的應(yīng)用,我們先將查詢的所有核心過程寫成一個(gè)名為 query2table 的SUB,然后利用
ASP 的服務(wù)器端包容功能調(diào)用該 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
' 統(tǒng)計(jì)數(shù)據(jù)庫中的列數(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 的定義過程,在下面幾個(gè) ASP
程序中我們只要加入想要使用的 SQL
查詢語句,并調(diào)用該過程就可以非常方便的得到查詢結(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 的記錄查詢出來
%>
< !--#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 年的記錄查詢出來
%>
< !--#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 且性別為男的記錄查詢出來
%>
< !--#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,你就可以非常迅速地對數(shù)據(jù)庫進(jìn)行查詢,你所要做的只是將“conntemp.open
"DSN=Student;uid=student;pwd=aspmagic"”中的數(shù)據(jù)庫名稱、用戶身份和密碼稍加改動(dòng),并在調(diào)用
query2table 時(shí)輸入想要使用的 SQL 查詢語句即可。是不是很簡單 ?
這就是 ASP 和 SQL 的魅力所在 !!!
今天,我們雖然用了一整篇的篇幅只學(xué)習(xí)了一個(gè) SQL
指令,但請你相信你所獲得遠(yuǎn)不同于一個(gè) DOS 指令,SELECT
指令使得你可以非常容易地對數(shù)據(jù)庫進(jìn)行查詢,或許在這之前你對數(shù)據(jù)庫查詢還一無所知,但是通過本篇的學(xué)習(xí),你其實(shí)已經(jīng)會(huì)使用
ASP 進(jìn)行常用的數(shù)據(jù)庫查詢了,是不是很激動(dòng) ?
在下一篇中,作者將繼續(xù)給大家介紹 SQL
的其它幾個(gè)基本指令。在結(jié)束本文之前,作者在這里要向很多來信的朋友致歉,由于最近作者工作繁忙,實(shí)在無暇一一回答各位的問題,請見諒,我會(huì)盡量將一些常見的、發(fā)生頻率較高的問題在文章中寫出來,至于一些不常見的問題,我建議大家到下面這個(gè)站點(diǎn)提問,你將會(huì)得到及時(shí)的答復(fù)。Www.onlinechina.net/friend/flybird/bbs/wwwboard.asp?id=1,
這是作者至今為止所見的最棒的中文 ASP
學(xué)習(xí)站點(diǎn),由上海的飛鳥主持,大家務(wù)必去看看。(出處:熱點(diǎn)網(wǎng)絡(luò))