1. SELECT 語句 在SQL的世界里,最最基礎(chǔ)的操作就是SELECT 語句了。在數(shù)據(jù)庫工具下直接采用SQL的時候很多人都會熟悉下面的操作: 執(zhí)行以上語句就會創(chuàng)建一個存放其結(jié)果的查詢。 而在ASP頁面文件上,你也可以采用以上的一般語法,不過情況稍微不同,ASP編程的時候,SELECT 語句的內(nèi)容要作為字符串賦給一個變量: SQL = "SELECT what FROM whichTable WHERE criteria" 舉例說明,不妨假設(shè)你的數(shù)據(jù)庫內(nèi)有個數(shù)據(jù)表,名字是Products ,現(xiàn)在你想取出這個表里的全部記錄。然后你就編寫了下面的代碼: 以上代碼——SQL語句的作用就是取出表內(nèi)的全部數(shù)據(jù)——執(zhí)行后將會選出數(shù)據(jù)表內(nèi)的全部記錄。不過,要是只想從表內(nèi)取出某個特定列,比如p_name。那就不能用 * 通配符了,這里得鍵入具體某列的名字,代碼如下: 執(zhí)行以上查詢之后Products 表內(nèi)、p_name 列的內(nèi)容就會全被選取出來。
有的時候取出全部數(shù)據(jù)庫記錄也許正好滿足你的要求,不過,在大多數(shù)情況下我們通常只需得到部分記錄。這樣一來該如何設(shè)計查詢呢?當(dāng)然會更費點腦筋了,何況本文也存心不想讓你去用那個什么勞什子的recordset。 舉個例子,假如你只打算取出p_name 記錄,而且這些記錄的名字必須以字母w打頭,那么你就要用到下面的WHERE 子句了: WHERE 關(guān)鍵詞的后面跟著用來過濾數(shù)據(jù)的條件,有了這些條件的幫助,只有滿足一定標(biāo)準(zhǔn)的數(shù)據(jù)才會被查詢出來。在以上的例子里,查詢的結(jié)果只會得到名字以w 打頭的p_name 記錄。 以上例子中,百分比符號(%)的含義是指示查詢返回所有w 字母打頭而且后面是任何數(shù)據(jù)甚至沒有數(shù)據(jù)的記錄條目。所以,在執(zhí)行以上查詢的時候, west 和 willow 就會從Products 表內(nèi)被選取出來并存放在查詢里。 就像你看到的那樣,只要仔細(xì)地設(shè)計SELECT 語句,你就可以限制recordset 中返回的信息量,多琢磨琢磨總能滿足你的要求。 這些啊還不過是掌握SQL用途剛起步。為了幫助你逐步掌握復(fù)雜的SELECT 語句用法,下面就讓我們再來看一下關(guān)鍵的標(biāo)準(zhǔn)術(shù)語:比較運算符,這些玩意都是你在構(gòu)筑自己的SELECT 字符串來獲得特定數(shù)據(jù)時要經(jīng)常用到的。 WHERE子句基礎(chǔ) 注意: 這里你會注意到,最后一個例句中的數(shù)字4周圍加了單引號。原因是這樣的,在這個例子中的 '4' 是文本類型而非數(shù)字類型。因為你會把 SELECT 語句放到引號中來把它作為一個值賦給變量,所以你也可以在語句中采用引號。 比較運算符 3. LIKE 、 NOT LIKE和 BETWEEN 你已經(jīng)在上面取出w打頭記錄的例子中看到了LIKE的用法。LIKE判定詞是一個非常有用的符號。不過,在很多情況下用了它可能會帶給你太多的數(shù)據(jù),所以在用到它之前最好先開動腦筋多想想自己到底想獲得什么數(shù)據(jù)。假設(shè)你想取出5位數(shù)字的SKU號碼,而且其開頭是1結(jié)尾是5,那么你可以用下劃符(_)代替%符號: 下劃符表示任意一個字符。所以在輸入“1 _ _ _ 5”的情況下,你的搜索就會限制在滿足特定模式的5位數(shù)范圍內(nèi)了。 假如你想反其道而行之,要找出所有不匹配“1_ _ _ 5”模式的SKU條目。那么你只需要在剛才語句例子中的LIKE前面加上NOT就可以了。 BETWEEN 或者你也可以采用已經(jīng)熟悉的數(shù)學(xué)判斷字句:
我們到目前為止所談到的SQL語句相對較為簡單,如果再能通過標(biāo)準(zhǔn)的recordset循環(huán)查詢,那么這些語句也能滿足一些更復(fù)雜的要求。不過,何必非要拘泥在淺嘗則止的基礎(chǔ)水準(zhǔn)之上呢?你完全可以再增加其他一些符號,比如AND、 OR和NOT來完成更強大的功能。 以下面的SQL語句為例: 就你目前所掌握的SQL知識,以上的例子也不難解釋,不過上面的語句并沒有很明白地讓你看清條件字句是如何膠合在單一SQL語句中的。 多行語句 整句照上面分解之后顯然好讀多了!在進行調(diào)試的時候,你或許更樂于多敲幾個字符把程序改得更好讀些。不過你可要記住了,在封閉引號之前或者在打開引號之后你需要增加空格,這樣才能保證字符串連接起來的時候你沒有把幾個詞湊到了一塊。 [page_break] 5. 開始執(zhí)行 在學(xué)會了SELECT語句的構(gòu)造和用途之后你就該學(xué)習(xí)如何使用它了。在你所掌握的數(shù)據(jù)庫工具下,這可能意味著你得按下某個寫著“執(zhí)行”字樣的按鈕。在ASP網(wǎng)頁上,可以立即執(zhí)行SQL語句也可以當(dāng)作存儲過程調(diào)用。 一旦創(chuàng)建了SQL 語句,你還得設(shè)法訪問其查詢結(jié)果。顯然,這里的關(guān)鍵就是ASP recordset。在使用非SQL的recordset時,創(chuàng)建recordset的代碼通常如下所示: 如果你對ASP比較熟悉以上的代碼對你可就不陌生了,你應(yīng)該知道“customers”表示你打開數(shù)據(jù)庫內(nèi)一個數(shù)據(jù)表的名字。 打開recordset 這里唯一的修改就是在objRec.Open,之后用包含SQL語句的變量代替了要查詢的數(shù)據(jù)表的名稱。 這種方法的優(yōu)點之一是你可以指定游標(biāo)類型(如以上0, 1 ,2 所示)。 執(zhí)行SQL 在上例中,你所看到的SQL是你存放自己SQL SELECT 語句的變量。該代碼行“運行”SQL語句(或者說對數(shù)據(jù)庫進行查詢),選取數(shù)據(jù)并把數(shù)據(jù)存放在recordset 內(nèi),在上例中就是變量objRec。這種方法的主要缺點是你不能選擇自己想采用的游標(biāo)類型。相反,recordset總是用前向游標(biāo)打開。 因為游標(biāo)的緣故,你或許打算熟悉兩種創(chuàng)建recordset的方法。直接執(zhí)行查詢節(jié)省了鍵入字符所消耗的時間,但那樣的話你就得采用默認(rèn)的游標(biāo)了,這樣有可能遭遇經(jīng)常不能正常運行的毛病。不管你具體采用哪種辦法,兩者之間的最大的差別也不外乎代碼精練與否。在不考慮你取得什么字段、你的標(biāo)準(zhǔn)是什么的前提下,也不管你如何存儲數(shù)據(jù),采用SQL式的recordset 在體積上會比ASP上打開的標(biāo)準(zhǔn)recordset 要小得多,更別提操作起來的簡易性了。畢竟,通過過濾數(shù)據(jù),你消除了耗費時間的if-then 測試和可能用到的循環(huán)。 編寫測試用SQL 6. 存儲查詢
假設(shè)你每周都要給團隊做一次報告,指出目前存在的業(yè)務(wù)支持問題,這些數(shù)據(jù)需要從你的數(shù)據(jù)庫中選取,而且要按照日期選擇記錄,同時根據(jù)你所在團隊所采用的支持問題的類別排序。一旦你設(shè)計了這一查詢,你何必以后每周都重新編寫一次呢?不要在你的HTML頁面上創(chuàng)建查詢,你應(yīng)該用你的數(shù)據(jù)庫工具創(chuàng)建查詢并且保存它。 然后你可以采用ActiveCommand 屬性把查詢插入到你的ASP網(wǎng)頁。頭一兩回你可能會覺得沒啥意思,其實也就幾行代碼而已: objSQ.CommandText = "storedQueryName" set objRec = objSQ.Execute 注意,采用adCmdStoredProc 表示你已經(jīng)在頁面上包含了adovbs.inc 文件。該文件定義了你可以按照名字而非數(shù)字進行訪問的Access常數(shù)。只需要在頁面上包含該文件即可(<!--#INCLUDE -->),然后你就可以用adCmdStoredProc 這類名字了。這樣,將來你再看到的時候更容易理解以上被存儲的查詢到底是個什么意思。 7. ORDER BY 從Access數(shù)據(jù)庫中選取記錄有件最令人喪氣的事情,它們是以怎樣的順序輸入到數(shù)據(jù)庫內(nèi)就按照怎樣的順序出來。就算你在Access環(huán)境內(nèi)采用Sort By來改變記錄視圖,數(shù)據(jù)表內(nèi)的記錄順序也并沒有發(fā)生改變。
為了對你的結(jié)果排序,只要在SELECT語句末尾加上ORDER BY,然后指定你需要排序的參照列即可。因此,如果你想要根據(jù)顧客的姓氏對Customers表排序,那么你可以編寫如下的查詢語句: 這樣,只要你建立了recordset而且開始把結(jié)果寫到屏幕上,你就會看見數(shù)據(jù)按照字母順序排列起來了。
[page_break] 8. 記錄統(tǒng)計
或者 舉例說明,以下代碼將選出一些記錄以及這些記錄的總數(shù): 但是你不能實現(xiàn)自己的目的。這里采用的“count”函數(shù)其實是一種集合函數(shù),意思是只返回單行信息:回答你提出的問題。對第1個SELECT 語句來說,問題是“在客戶表內(nèi)有多少條記錄?”查詢返回單一的值作為響應(yīng),因此它不能同你常規(guī)的查詢相組合。假如你希望得到其他數(shù)據(jù),你需要采用RecordCount。 集合函數(shù)除了“count”之外還包括AVG、MIN、MAX和SUM等。
任何熟悉SQL和關(guān)系數(shù)據(jù)庫的人都遇見過大量的連接類型。最簡單的說,連接(join)會把兩個表的內(nèi)容組合到一個虛擬表或者recordset內(nèi)。假如數(shù)據(jù)表有效地規(guī)一化,或許你會經(jīng)常從某一個表中選出特定的信息再從另一個表中選出關(guān)聯(lián)信息。這樣做就需要簡單的“同等連接(equijoin)”。 |
溫馨提示:喜歡本站的話,請收藏一下本站!