ASP動態網頁製作中使用SQL語句的方法

2020-12-17 站長之家

1、SELECT 語句

在SQL的世界裡,最最基礎的操作就是SELECT 語句了。在資料庫工具下直接採用SQL的時候很多人都會熟悉下面的操作:

以下為引用的內容:
SELECT what
FROM whichTable
WHERE criteria

執行以上語句就會創建一個存放其結果的查詢。

而在ASP頁面文件上,你也可以採用以上的一般語法,不過情況稍微不同,ASP編程的時候,SELECT 語句的內容要作為字符串賦給一個變量:

以下為引用的內容:
SQL = "SELECT what FROM whichTable WHERE criteria"

好了,明白了ASP下SQL「說話」的方式,接下來如法炮製即可,只要滿足你的需要,傳統的SQL查詢模式和條件查詢都能派用場。

舉例說明,不妨假設你的資料庫內有個數據表,名字是Products ,現在你想取出這個表裡的全部記錄。然後你就編寫了下面的代碼:

以下為引用的內容:

SQL ="SELECT * FROM Products"

以上代碼——SQL語句的作用就是取出表內的全部數據——執行後將會選出數據表內的全部記錄。不過,要是只想從表內取出某個特定列,比如p_name。那就不能用 * 通配符了,這裡得鍵入具體某列的名字,代碼如下:

以下為引用的內容:
SQL ="SELECT p_name FROM Products"

執行以上查詢之後Products 表內、p_name 列的內容就會全被選取出來。

2、WHERE子句設置查詢條件

舉個例子,假如你只打算取出p_name 記錄,而且這些記錄的名字必須以字母w打頭,那麼你就要用到下面的WHERE 子句了:

以下為引用的內容:
SQL ="SELECT p_name FROM Products WHERE p_name LIKE 'W%'"

WHERE 關鍵詞的後面跟著用來過濾數據的條件,有了這些條件的幫助,只有滿足一定標準的數據才會被查詢出來。在以上的例子裡,查詢的結果只會得到名字以w 打頭的p_name 記錄。

以上例子中,百分比符號(%)的含義是指示查詢返回所有w 字母打頭而且後面是任何數據甚至沒有數據的記錄條目。所以,在執行以上查詢的時候, west 和 willow 就會從Products 表內被選取出來並存放在查詢裡。

就像你看到的那樣,只要仔細地設計SELECT 語句,你就可以限制recordset 中返回的信息量,多琢磨琢磨總能滿足你的要求。

這些啊還不過是掌握SQL用途剛起步。為了幫助你逐步掌握複雜的SELECT 語句用法,下面就讓我們再來看一下關鍵的標準術語:比較運算符,這些玩意都是你在構築自己的SELECT 字符串來獲得特定數據時要經常用到的。

WHERE子句基礎

在開始創建WHERE 子句的時候,最簡單的方式是採用標準的比較符號,它們是 < 、 <= 、 > 、 >= 、<> 和 =。顯然,你很快就能明白以下代碼的含義和具體運行結果:

以下為引用的內容:

SELECT * FROM Products WHERE p_price >= 199.95
SELECT * FROM Products WHERE p_price <> 19.95
SELECT * FROM Products WHERE p_version = '4'

注意: 這裡你會注意到,最後一個例句中的數字4周圍加了單引號。原因是這樣的,在這個例子中的 "4" 是文本類型而非數字類型。

3、比較運算符:LIKE、NOT LIKE和 BETWEEN

比較運算符指定從表內取出數據的內容範圍。你可以用它們來創建過濾器以便縮小recordset的範圍,促使其只保存給定任務下你關心的信息。

你已經在上面取出w打頭記錄的例子中看到了LIKE的用法。LIKE判定詞是一個非常有用的符號。不過,在很多情況下用了它可能會帶給你太多的數據,所以在用到它之前最好先開動腦筋多想想自己到底想獲得什麼數據。假設你想取出5位數字的SKU號碼,而且其開頭是1結尾是5,那麼你可以用下劃符(_)代替%符號:

SQL ="SELECT * FROM Products WHERE p_sku LIKE '1___5'"

下劃符表示任意一個字符。所以在輸入「1___5」的情況下,你的搜索就會限制在滿足特定模式的5位數範圍內了。

假如你想反其道而行之,要找出所有不匹配「1___5」模式的SKU條目。那麼你只需要在剛才語句例子中的LIKE前面加上NOT就可以了。

BETWEEN

假設你想取出一定範圍內的數據,而且你事先知道範圍的起點和終點,那麼你不妨採用BETWEEN 判斷詞。現在就讓我們假設你想選取給定表內範圍在 1和 10之間的記錄。你可以如下使用BETWEEN:

…WHERE ID BETWEEN 1 AND 10

或者你也可以採用已經熟悉的數學判斷字句:

…WHERE ID >= 1 AND ID >= 10

4、聯合語句

我們到目前為止所談到的SQL語句相對較為簡單,如果再能通過標準的recordset循環查詢,那麼這些語句也能滿足一些更複雜的要求。不過,何必非要拘泥在淺嘗則止的基礎水準之上呢?你完全可以再增加其他一些符號,比如AND、OR和NOT來完成更強大的功能。

以下面的SQL語句為例:

以下為引用的內容:

SQL ="SELECT c_firstname,c_lastname,c_email FROM customers WHERE c_email IS NOT NULL AND c_purchase ='1' OR c_purchase ='2' AND c_lastname LIKE 'A%'"

就你目前所掌握的SQL知識,以上的例子也不難解釋,不過上面的語句並沒有很明白地讓你看清條件字句是如何膠合在單一個SQL語句中的。

多行語句

在SQL語句不好懂的情況下,你不妨把整個語句分解為多行代碼,然後在現有變量基礎上逐步增加查詢語句的各個組成部分並把它存在同一變量內:

以下為引用的內容:
SQL = "SELECT c_firstname,c_lastname,c_emailaddress,c_phone"
SQL = SQL & " FROM customers"
SQL = SQL & " WHERE c_firstname LIKE 'A%' and c_emailaddress NOT NULL"
SQL = SQL & " ORDER BY c_lastname, c_firstname"

到了最後一句,SQL變量就包含了以下的完整SELECT 語句:

以下為引用的內容:

"SELECT c_firstname, c_lastname, c_emailaddress, c_phone FROM customers WHERE c_firstname LIKE 『A%』 and c_emailaddress NO NULL ORDER BY c_lastname,c_firstname"

整句照上面分解之後顯然好讀多了!在進行調試的時候,你或許更樂於多敲幾個字符把程序改得更好讀些。不過你可要記住了,在封閉引號之前或者在打開引號之後你需要增加空格,這樣才能保證字符串連接起來的時候你沒有把幾個詞湊到了一塊。

5、開始執行

在學會了SELECT語句的構造和用途之後你就該學習如何使用它了。在你所掌握的資料庫工具下,這可能意味著你得按下某個寫著「執行」字樣的按鈕。在ASP網頁上,可以立即執行SQL語句也可以當作存儲過程調用。

一旦創建了SQL 語句,你還得設法訪問其查詢結果。顯然,這裡的關鍵就是ASP recordset。為了充分利用你更為熟悉的SQL技能,你需要調整常規ASP網頁上最常採用的recordset:

以下為引用的內容:

Dim rs
Set rs = Server.CreateObject ("ADODB.Recordset")
rs.Open SQL,Conn,1,2

這裡Conn就是資料庫連接聲明,而唯一的修改就是在rs.Open,之後用包含SQL語句的變量代替了要查詢的數據表的名稱。

這種方法的優點之一是你可以指定遊標類型(如以上1 ,2 所示)。

執行SQL

你還可以用緊湊的一行代碼執行SQL語句來創建recordset。以下是語法:

Dim rs
set rs = Conn.Execute(SQL)

在上例中,你所看到的SQL是你存放自己SQL SELECT 語句的變量。該代碼行「運行」SQL語句(或者說對資料庫進行查詢),選取數據並把數據存放在recordset 內,在上例中就是變量rs。這種方法的主要缺點是你不能選擇自己想採用的遊標類型。相反,recordset總是用前向遊標打開。

因為遊標的緣故,你或許打算熟悉兩種創建recordset的方法。直接執行查詢節省了鍵入字符所消耗的時間,但那樣的話你就得採用默認的遊標了,這樣有可能遭遇經常不能正常運行的毛病。不管你具體採用哪種辦法,兩者之間的最大的差別也不外乎代碼精練與否。在不考慮你取得什麼欄位、你的標準是什麼的前提下,也不管你如何存儲數據,採用SQL式的recordset 在體積上會比ASP上打開的標準recordset 要小得多,更別提操作起來的簡易性了。畢竟,通過過濾數據,你消除了耗費時間的if-then 測試和可能用到的循環。

6,存儲查詢

當你的查詢相對簡單的時候,每次從頭開始創建SQL語句也不費什麼工夫,不過,複雜的查詢就不同了,每次都從頭來會產生很多開發錯誤。因此,一旦讓SQL順利地運行起來,你最好把它們存起來,在需要時再調用它們。這樣,哪怕是一個簡單查詢你都能隨時用上存儲的查詢語句了。

假設你每周都要給團隊做一次報告,指出目前存在的業務支持問題,這些數據需要從你的資料庫中選取,而且要按照日期選擇記錄,同時根據你所在團隊所採用的支持問題的類別排序。一旦你設計了這一查詢,你何必以後每周都重新編寫一次呢?不要在你的HTML頁面上創建查詢,你應該用你的資料庫工具創建查詢並且保存它。 然後你可以採用ActiveCommand 屬性把查詢插入到你的ASP網頁。頭一兩回你可能會覺得沒啥意思,其實也就幾行代碼而已:

以下為引用的內容:
Set objSQ = Server.CreateObject ("ADODB.Command")
objSQ.ActiveConnection = "databaseName"
objSQ.CommandText = "storedQueryName"
objSQ.CommandType = adCmdStoredProc
set objRec = objSQ.Execute

注意,採用adCmdStoredProc 表示你已經在頁面上包含了adovbs.inc 文件。該文件定義了你可以按照名字而非數字進行訪問的Access常數。只需要在頁面上包含該文件即可),然後你就可以用adCmdStoredProc 這類名字了。這樣,將來你再看到的時候更容易理解以上被存儲的查詢到底是個什麼意思。

7、ORDER BY

從Access資料庫中選取記錄有件最令人喪氣的事情,它們是以怎樣的順序輸入到資料庫內就按照怎樣的順序出來。就算你在Access環境內採用Sort By來改變記錄視圖,數據表內的記錄順序也並沒有發生改變。

如果你正在使用ASP recordset在網頁上寫出記錄,那麼你或許知道亂紛紛的順序是多令人痛苦的事。但是你可能不得不經常得面對這一問題,因為並不存在什麼簡單方便的解決方案。好在ORDER BY 可以簡化這一難題。

為了對你的結果排序,只要在SELECT語句末尾加上ORDER BY,然後指定你需要排序的參照列即可。因此,如果你想要根據顧客的姓氏對Customers表排序,那麼你可以編寫如下的查詢語句:

SQL = "SELECT c_lastname,c_firstname,c_email FROM Customers ORDER BY c_lastname"

這樣,只要你建立了recordset而且開始把結果寫到屏幕上,你就會看見數據按照字母順序排列起來了。

下面是對表的操作:

只複製a表的結構到b表(不複製數據)

以下為引用的內容:

sql = "select * into b from a where 1<>1"
sql = "select * into b from a where 1=0"

複製a表的結構和數據到b表

以下為引用的內容:

sql = "select * into b from a"

相關焦點

  • 在ASP.NET中使用SQL的IN操作
    如果沒有恢復對於動態SQL獲得該功能的一種方法,那麼必須使用IN操作。在文章的結尾,我們寫了一個SQLServer用戶自定義函數(UDF),為了將一個字符串分解成帶分隔符的子字符串。在這篇文章中,我們能看到這樣一個UDF如何派得上用場。我們將建立一個web表單,在此用戶可以通過選擇checkbox控制項而選擇一些在DataGrid中的記錄。
  • 入門:初學ASP動態網頁製作常用錯誤處理
    首頁 > 語言 > 關鍵詞 > 網頁最新資訊 > 正文 入門:初學ASP動態網頁製作常用錯誤處理
  • Mybatis 動態sql語句if和where標籤巧妙使用
    本文章描述的是 Mybatis if標籤和where標籤的結合使用需求是:根據電話和名字查用戶數據1 sql 查詢查詢sql語句如下:SELECT id , gender , nickname , mobile , avatar FROM dts_user WHERE gender = 1 AND mobile LIKE '%456%'查詢結果如下圖所示:2 mybatis動態sql配置
  • mybatis使用註解編寫動態sql注意事項
    在spring+springmvc+mybatis框架中開發,編寫sql語句以前都是直接使用xml的方式編寫,現在由於新的項目框架搭建過程中,同事配置的是使用註解的方式編寫sql語句,因此我也開始學習使用註解編寫sql語句。
  • php mysql SQL注入語句構造
    聲明:文章所有提到的「漏洞」,都沒有經過測試,可能根本不存在,其實有沒有漏洞並不重要,重要的是分析思路和語句構造。   二.$user_table where username='$username' and password='$password'";   $res = sql_query($q,$conn);   $row = sql_fetch_row($res);   $q = "select id,group_id from $user_table where username
  • SQL語句中where條件為什麼寫上1=1
    點擊上方藍色「邁莫coding」,選擇「設為星標」  在項目編寫中,經常會在代碼中使用到「where 1=1」,這是為什麼呢?如果使用不恰當會造T0級錯誤。例如在編寫SQL語句時進行where條件查詢時配合or運算符會得到意向不到的結果,結果會讓你哆嗦。
  • 使用SQL Server In-Memory存儲ASP.NET的會話狀態
    .設置這個默認值是因為性能.為了讓這些內存優化表可持續,需要在ASPStateInMemory.sql腳本中做三點改變.在腳本中有一些注釋解釋了為何需要做這些改變.一個快速的例子使用ASP.NET網頁表單4.5應用,並在會話中編寫簡單的帶有時間戳的字符串,SQL Server 2014中便生成如下的數據:
  • Asp定時執行操作、Asp定時讀取資料庫(網頁定時操作詳解)
    說明:讓網頁多長時間(秒)刷新自己,或在多長時間後讓網頁自動連結到其它網頁。三,ASP使用VB寫的定時組件ASP中沒有setTimeout這類的定時語句,我們需要利用ASP組件來解決,同樣,可以採用VB6來編制,具體操作方法參考上一編組件的做法,為了掛起線程,我們需要運用WIN32API函數Sleep,同樣新建一個Active Dll工程,起名字為Timer,類名為sleep。
  • 提升SQL語句性能的方法
    用具體案例進行SQL語句性能提升的方法。先用實際案例分析了優化SQL語句的方法,然後再結合nat123這個實際案例分析了如何實現外網訪問內網Mysql資料庫的方法。優化方法:優化的總體思路是拆分sql,將排序操作和查詢所有信息的操作分開。
  • SQL注入攻擊詳解
    在軟體體系架構設計中,分層式結構是最常見,也是最重要的一種結構被應用於眾多類型的軟體開發。3、Sql注入產生原因及威脅剛剛講過當我們訪問動態網頁時, Web 伺服器會向數據訪問層發起 Sql 查詢請求,如果權限驗證通過就會執行 Sql 語句。
  • PostgreSQL Tips: 動態SQL
    前言前幾天 Postgres 群裡有人問如何在 Postgres 裡實現動態列的行轉列,於是我整理了PostgreSQL 實現動態行轉列的方法匯總然後被問到如何直接通過一個函數返回結果,而不是返回一個待執行的 SQL 語句,於是我參考下面的教程,實現了一個函數返回 json,先把代碼附上
  • MyBatis dynamic SQL 1.1.4 發布,生成動態 SQL 的框架
    MyBatis dynamic SQL 1.1.4 已發布,MyBatis Dynamic SQL 是生成動態 SQL 語句的框架,可把它看作是一個類型安全的 SQL 模板庫,它還支持 MyBatis3
  • SQL Server應用程式的高級Sql注入
    [概 要] 這篇文章討論常用的"sql注入"技術的細節,應用於流行的Ms IIS/ASP/SQL-Server平臺。這裡探討有關這種攻擊各種可以注入程序訪問數據和資料庫防範的方法。一個典型的SQL語句是這樣的: select id, forename, surname from authors 這個查詢語句將會從'authors'表中返回'id','forename'和'surname'列的所有行。
  • mysql修改語句UPDATE的使用
    今天介紹一下update的使用,這個關鍵詞就是修改資料庫語句。我們看看在哪些環境會用到修改語句,比如在編輯輸入資料的時候發現資料錄錯了,或者某個信息要修改,這個時候就需要用到update了。我們實現的是最後原理,不管是asp,jsp還是php實現最底層都是通過sql語句修改資料庫,實現達到的效果。通過程序篩選出數據,在指定去執行。我們看看demo我們先看看update的語法。
  • SQLServer應用程式中的高級SQL注入
    典型的執行語句是query,它能夠收集比較有達標性的記錄並返回一個單一的結果集。SQL語言可以修改資料庫結構(數據定義語言)和操作資料庫內容(數據操作語言)。在這份文檔中,我們將特別討論SQLSERVER所使用的Transact-SQL語言。當一個攻擊者能夠通過往query中插入一系列的sql語句來操作數據寫入到應用程式中去,我們管這種方法定義成SQL注入。
  • 最詳細的SQL注入相關的命令整理
    偶然間我想到了在SQL語言中可以使用"in"關鍵字進行查詢,例如"select * from mytable where id in(1)",括號中的值就是我們提交的數據,它的結果與使用"select * from mytable where id=1"的查詢結果完全相同。
  • 使用explain和show profile來分析SQL語句實現優化SQL語句
    SQL語句優化是建立在慢查詢分析的基礎上,通過慢查詢定位有問題的SQL語句,關於慢查詢的介紹及其分析工具,可以參考[mysql慢查詢及慢查詢日誌分析工具]一、通過explain查詢1 用法:explain sql2 作用:用於分析sql語句
  • 學習掌握動態網頁PHP的編程語句
    首頁 > 語言 > 關鍵詞 > 最新資訊 > 正文 學習掌握動態網頁PHP的編程語句
  • MyBatis 動態 SQL 詳解(以後寫 SQL 爽多了)
    動態 SQL 是 MyBatis 的強大特性之一。如果你使用過 JDBC 或其它類似的框架,你應該能理解根據不同條件拼接 SQL 語句有多痛苦,例如拼接時要確保不能忘記添加必要的空格,還要注意去掉列表最後一個列名的逗號。利用動態 SQL,可以徹底擺脫這種痛苦。
  • 最強解讀MyBatis是如何執行SQL語句的?
    MyBatis 如何獲取 sql 語句?MyBatis 如何執行 sql 語句?MyBatis 如何實現不同類型數據之間的轉換?在過去程式設計師使用JDBC連接資料庫,總會帶來諸多不便。MyBatis 如何獲取 sql 語句? 與獲取資料庫源類似,只要解析Mapper配置文件中的對應標籤,就可以獲得對應的sql語句。