73
9 9 T-SQL T-SQL 第第第第第第 第第第第第第 SQL SQL 第第 第第

第 9 章 T-SQL語法與參數的SQL查詢

  • Upload
    evers

  • View
    85

  • Download
    15

Embed Size (px)

DESCRIPTION

第 9 章 T-SQL語法與參數的SQL查詢. 第 9 章 T-SQL語法與參數的SQL查詢. 9-1 SQL語言的基礎 9-2 SELECT敘述的基本查詢 9-3 建立參數的SQL查詢 9-4 新增、更新與刪除記錄. 9-1 SQL語言的基礎- 說明. - PowerPoint PPT Presentation

Citation preview

Page 1: 第 9 章  T-SQL語法與參數的SQL查詢

第第 99 章 章 T-SQLT-SQL語法與參語法與參數的數的 SQLSQL查詢查詢

Page 2: 第 9 章  T-SQL語法與參數的SQL查詢

第第 99 章 章 T-SQLT-SQL語法與參數的語法與參數的SQLSQL查詢查詢

9-1 SQL9-1 SQL語言的基礎語言的基礎 9-2 SELECT9-2 SELECT敘述的基本查詢敘述的基本查詢 9-3 9-3 建立參數的建立參數的 SQLSQL查詢查詢 9-4 9-4 新增、更新與刪除記錄新增、更新與刪除記錄

Page 3: 第 9 章  T-SQL語法與參數的SQL查詢

9-1 SQL9-1 SQL語言的基礎語言的基礎 -- 說明說明 「「 SQLSQL 」(」( Structured Query LanguageStructured Query Language )的全名)的全名

是結構化查詢語言,本書簡稱是結構化查詢語言,本書簡稱 SQLSQL 語言。語言。 SQLSQL 語語言是「言是「 ANSIANSI 」(」( American National Standards American National Standards InstituteInstitute )制定的標準資料庫語言,其版本分為)制定的標準資料庫語言,其版本分為19891989 年的年的 ANSI-SQL 89ANSI-SQL 89和和 19921992 年制定的年制定的 ANSI-ANSI-SQL 92SQL 92 ,也稱為,也稱為 SQL 2SQL 2 。。

19741974年年 ChamberlinChamberlin和和 BoyceBoyce 建立建立 SEQUELSEQUEL 語言,語言,這是這是 SQLSQL 的原型。的原型。 IBMIBM 稍加修改後作為其關聯式稍加修改後作為其關聯式資料庫管理系統的資料庫語言,稱為資料庫管理系統的資料庫語言,稱為 System System RR,, 19801980年年 SQLSQL 的名稱正式誕生,從哪天開的名稱正式誕生,從哪天開始,始, SQLSQL 逐漸壯大成為一種標準的關聯式資料庫逐漸壯大成為一種標準的關聯式資料庫語言。語言。

Page 4: 第 9 章  T-SQL語法與參數的SQL查詢

9-1 SQL9-1 SQL語言的基礎語言的基礎 -- 指令種類指令種類 「資料定義語言「資料定義語言 DDLDDL 」(」( Data Definition Data Definition

LanguageLanguage ):資料表建立和欄位定義的):資料表建立和欄位定義的SQLSQL 語法。語法。

「資料操作語言「資料操作語言 DMLDML 」(」( Data Data Manipulation LanguageManipulation Language ):資料表記錄插):資料表記錄插入、刪除和更新的入、刪除和更新的 INSERTINSERT、、 DELETEDELETE和和UPDATEUPDATE 指令,和資料表查詢的指令,和資料表查詢的 SELECTSELECT指令。指令。

「資料控制語言「資料控制語言 DCLDCL 」(」( Data Control Data Control LanguageLanguage ):資料庫安全設定和權限管理):資料庫安全設定和權限管理的相關指令。的相關指令。

Page 5: 第 9 章  T-SQL語法與參數的SQL查詢

9-1 SQL9-1 SQL語言的基礎語言的基礎 -- 指令指令 在在 ASP.NETASP.NET 網頁資料庫的程式碼,或網頁資料庫的程式碼,或

SqlDataSourceSqlDataSource 控制項的控制項的SelectCommandSelectCommand、、 InsertCommandInsertCommand、、 UpdateCUpdateCommandommand和和 DeleteCommandDeleteCommand 屬性,都可以使用屬性,都可以使用SQLSQL 指令來執行資料庫操作和查詢,其基本指令指令來執行資料庫操作和查詢,其基本指令如下表所示:如下表所示:SQL指令 說明

INSERT 在資料表插入一筆新記錄UPDATE 更新資料表已經存在的記錄資料DELETE 刪除資料表的記錄資料SELECT 查詢資料表的記錄資料

Page 6: 第 9 章  T-SQL語法與參數的SQL查詢

9-2 SELECT9-2 SELECT 敘述的基本查詢敘述的基本查詢 9-2-1 SELECT9-2-1 SELECT 子句子句 9-2-2 WHERE9-2-2 WHERE 子句的比較運算子子句的比較運算子 9-2-3 WHERE9-2-3 WHERE 子句的邏輯運算子子句的邏輯運算子 9-2-4 WHERE9-2-4 WHERE 子句的算術運算子子句的算術運算子 9-2-5 9-2-5 聚合函數的摘要查詢聚合函數的摘要查詢 9-2-6 9-2-6 排序排序 ORDER BYORDER BY 子句子句

Page 7: 第 9 章  T-SQL語法與參數的SQL查詢

9-2 SELECT9-2 SELECT 敘述的基本查詢敘述的基本查詢 --語法語法

SELECTSELECT 指令是指令是 DMLDML 指令中語法最複雜的指令中語法最複雜的一個,其基本語法如下所示:一個,其基本語法如下所示:SELECT SELECT 欄位清單 欄位清單 FROM FROM 資料表來源資料表來源[WHERE [WHERE 搜尋條件搜尋條件 ]]

[ORDER BY [ORDER BY 欄位清單欄位清單 ]]

Page 8: 第 9 章  T-SQL語法與參數的SQL查詢

9-2 SELECT9-2 SELECT 敘述的基本查詢敘述的基本查詢 --子句說明子句說明

SELECTSELECT 指令各子句的說明,如下表所示:指令各子句的說明,如下表所示:子句 說明

SELECT 指定查詢結果包含哪些欄位FROM 指定查詢的資料來源是哪些資料表

WHERE 過濾查詢結果的條件,可以從資料表來源取得符合條件的查詢結果

ORDER BY 指定查詢結果的排序欄位

Page 9: 第 9 章  T-SQL語法與參數的SQL查詢

9-2 SELECT9-2 SELECT 敘述的基本查詢敘述的基本查詢 --查詢工具查詢工具

在本節說明的在本節說明的 SQLSQL 指令是使用指令是使用 ASP.NETASP.NET 網頁的網頁的SQLSQL 查詢工具來測試查詢結果。請啟動查詢工具來測試查詢結果。請啟動 VWDVWD 開開啟「範例網站啟「範例網站 \Ch09\Ch9-2\Ch09\Ch9-2 」資料夾的」資料夾的 ASP.NETASP.NET網站,執行網站,執行 SQLQuery.aspxSQLQuery.aspx 網頁,如下圖所示:網頁,如下圖所示:

Page 10: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-1 SELECT9-2-1 SELECT 子句子句 -- 語法語法在在 SELECTSELECT 指令的指令的 SELECTSELECT 子句可以指定子句可以指定

查詢結果包含哪些欄位,其語法如下所示:查詢結果包含哪些欄位,其語法如下所示:SELECT [ALL | DISTINCT] SELECT [ALL | DISTINCT] 欄位名稱 欄位名稱 [[AS] [[AS] 欄欄

位別名位別名 ] [, ] [, 欄位名稱 欄位名稱 [[AS] [[AS] 欄位別名欄位別名 ]]]] 上述上述 ALLALL 是預設值可以顯示所有記錄的欄是預設值可以顯示所有記錄的欄

位值,位值, DISTINCTDISTINCT 只顯示不重複欄位值的只顯示不重複欄位值的記錄。記錄。

Page 11: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-1 SELECT9-2-1 SELECT 子句子句 --查詢資料表的部分欄位查詢資料表的部分欄位

SELECTSELECT 子句可以指明查詢結果所需的欄位清單,子句可以指明查詢結果所需的欄位清單,只查詢資料表中的部分欄位。例如:查詢只查詢資料表中的部分欄位。例如:查詢 BooksBooks資料表的圖書記錄,只顯示資料表的圖書記錄,只顯示 BookIDBookID、、 BookTitleBookTitle和和 BookPriceBookPrice 三個欄位,如下所示:三個欄位,如下所示:SELECT BookID, BookTitle, BookPriceSELECT BookID, BookTitle, BookPrice

FROM BooksFROM Books

Page 12: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-1 SELECT9-2-1 SELECT 子句子句 --查詢資料表的所有欄位查詢資料表的所有欄位

查詢結果如果需要顯示資料表的所有欄位,查詢結果如果需要顯示資料表的所有欄位,SELECTSELECT 指令可以直接使用「指令可以直接使用「 ** 」符號代」符號代表資料表的所有欄位,而不用一一列出欄表資料表的所有欄位,而不用一一列出欄位清單。位清單。

例如:查詢例如:查詢 BooksBooks 資料表的所有圖書記錄資料表的所有圖書記錄且顯示所有欄位,如下所示:且顯示所有欄位,如下所示:SELECT * FROM BooksSELECT * FROM Books

上述上述 SELECTSELECT 指令的執行結果顯示指令的執行結果顯示 BooksBooks資料表的所有記錄和欄位。資料表的所有記錄和欄位。

Page 13: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-1 SELECT9-2-1 SELECT 子句子句 --欄位別名欄位別名 (( 說明說明 ))

SELECTSELECT 指令預設使用資料表定義的欄位指令預設使用資料表定義的欄位名稱來顯示查詢結果,基於需要,我們可名稱來顯示查詢結果,基於需要,我們可以使用以使用 ASAS 關鍵字指定欄位別名,其中關鍵字指定欄位別名,其中 ASAS關鍵字本身可有可無。關鍵字本身可有可無。

Page 14: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-1 SELECT9-2-1 SELECT 子句子句 --欄位別名欄位別名 (( 範例範例 ))

例如:查詢例如:查詢 BooksBooks 資料表的資料表的 BookIDBookID、、 BookTitleBookTitle和和 BookPriceBookPrice 三個欄位資料,顯示欄位名稱為書三個欄位資料,顯示欄位名稱為書號、書名和書價的中文欄位別名,如下所示:號、書名和書價的中文欄位別名,如下所示:SELECT BookID AS SELECT BookID AS 書號書號 , BookTitle AS , BookTitle AS 書名書名 ,,

BookPrice AS BookPrice AS 書價書價FROM BooksFROM Books

Page 15: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-1 SELECT9-2-1 SELECT 子句子句 --刪除重複記錄 刪除重複記錄 - ALL- ALL與與 DISTINCTDISTINCT

如果資料表記錄的欄位有重複值,如果資料表記錄的欄位有重複值, SELECTSELECT 子句子句的預設值的預設值 ALLALL 是顯示所有欄位值,我們可以使用是顯示所有欄位值,我們可以使用DISTINCTDISTINCT 關鍵字刪除重複欄位值,一旦欄位擁關鍵字刪除重複欄位值,一旦欄位擁有重複值,就只會顯示其中一筆記錄。有重複值,就只會顯示其中一筆記錄。

例如:查詢例如:查詢 BooksBooks 資料表的圖書資料擁有幾種不資料表的圖書資料擁有幾種不同的書價,如下所示:同的書價,如下所示:SELECT DISTINCT BookPrice SELECT DISTINCT BookPrice

FROM BooksFROM Books

Page 16: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-2 WHERE9-2-2 WHERE 子句的比較運算子子句的比較運算子 --語法語法

SELECTSELECT 指令和指令和 FROMFROM 字句是指出查詢哪字句是指出查詢哪個資料表的哪些欄位,個資料表的哪些欄位, WHEREWHERE 子句的篩子句的篩選條件才是真正的查詢條件,可以過濾記選條件才是真正的查詢條件,可以過濾記錄和找出符合條件的記錄資料,其基本語錄和找出符合條件的記錄資料,其基本語法如下所示:法如下所示:WHERE WHERE 搜尋條件搜尋條件

上述搜尋條件就是使用比較和邏輯運算子上述搜尋條件就是使用比較和邏輯運算子建立的過濾條件,查詢結果可以取回符合建立的過濾條件,查詢結果可以取回符合條件的記錄資料。條件的記錄資料。

Page 17: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-2 WHERE9-2-2 WHERE 子句的比較運算子子句的比較運算子 --比較運算子比較運算子

T-SQLT-SQL 支援的比較運算子(支援的比較運算子( Comparison Comparison OperatorsOperators )說明,如下表所示:)說明,如下表所示:運算子 說明

= 相等<>、!= 不相等

> 大於>= 大於等於< 小於

<= 小於等於!< 不小於!> 不大於

Page 18: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-2 WHERE9-2-2 WHERE 子句的比較運算子子句的比較運算子 --條件值為字串條件值為字串

WHEREWHERE 子句的條件運算式可以使用比較運算子子句的條件運算式可以使用比較運算子來執行字串比較,欄位條件的字串需要使用單引來執行字串比較,欄位條件的字串需要使用單引號括起。例如:在號括起。例如:在 BooksBooks 資料表查詢書號資料表查詢書號為為 'FS499''FS499' 圖書的詳細資料,如下所示:圖書的詳細資料,如下所示:SELECT * FROM Books SELECT * FROM Books

WHERE BookID = 'FS499'WHERE BookID = 'FS499'

Page 19: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-2 WHERE9-2-2 WHERE 子句的比較運算子子句的比較運算子 --條件值為數值條件值為數值

WHEREWHERE 子句條件運算式的條件值如果是數值,子句條件運算式的條件值如果是數值,數值不需使用單引號括起。例如:查詢數值不需使用單引號括起。例如:查詢 BooksBooks 資資料表的料表的 BookPriceBookPrice 欄位小於欄位小於 600600 元的圖書記錄,元的圖書記錄,如下所示:如下所示:SELECT BookID, BookTitle, BookPrice SELECT BookID, BookTitle, BookPrice

FROM BooksFROM Books

WHERE BookPrice < 600WHERE BookPrice < 600

Page 20: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-2 WHERE9-2-2 WHERE 子句的比較運算子子句的比較運算子 --條件值為日期條件值為日期 // 時間時間

WHEREWHERE 子句的條件運算式如果是日期子句的條件運算式如果是日期 // 時間的時間的比較,如同字串,也需要使用單引號括起。例如:比較,如同字串,也需要使用單引號括起。例如:查詢查詢 BooksBooks 資料表的資料表的 BookPubDateBookPubDate是是 2006-10-2006-10-0101 的圖書記錄,如下所示:的圖書記錄,如下所示:SELECT BookID, BookTitle, BookPrice SELECT BookID, BookTitle, BookPrice

FROM Books FROM Books

WHERE BookPubDate ='2006-10-01'WHERE BookPubDate ='2006-10-01'

Page 21: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-3 WHERE9-2-3 WHERE 子句的邏輯運算子子句的邏輯運算子 --說明說明

在在 WHEREWHERE 子句的搜尋條件可以使用邏輯運算子子句的搜尋條件可以使用邏輯運算子(( Logical OperatorsLogical Operators )來連接條件運算式,以便)來連接條件運算式,以便建立複雜的搜尋條件。常用的邏輯運算子說明,建立複雜的搜尋條件。常用的邏輯運算子說明,如下表所示:如下表所示:運算子 說明LIKE 包含,只需子字串即符合條件

BETWEEN/AND 在一個範圍之內IN 屬於清單其中之一

NOT 非,可以否定運算式的結果AND 且,需要連接的 2個運算子都為真,才是真OR 或,只需其中一個運算子為真,即為真

Page 22: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-3 WHERE9-2-3 WHERE 子句的邏輯運算子子句的邏輯運算子 -- LIKE LIKE 包含子字串運算子包含子字串運算子 (( 說明說明 ))

WHEREWHERE 子句的條件欄位可以使用子句的條件欄位可以使用 LIKELIKE 運算子進運算子進行比較,行比較, LIKELIKE 運算子是子字串查詢,只需是子字運算子是子字串查詢,只需是子字串就符合條件。我們還可以配合萬用字元來進行串就符合條件。我們還可以配合萬用字元來進行範本字串的比對,如下表所示:範本字串的比對,如下表所示:萬用字元 說明

% 代表 0或更多字元任易長度的任何字串_ 代表一個字元長度的任何字元

[ ] 符合括號內字元清單的任何一個字元,例如:[EO]

[ - ] 符合括號內「-」字元範圍的任何一個字元,例如:[A-J]

[ ^ ] 符合不在括號內字元清單的字元,例如:[^K-Y]

Page 23: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-3 WHERE9-2-3 WHERE 子句的邏輯運算子子句的邏輯運算子 -- LIKE LIKE 包含子字串運算子包含子字串運算子 (( 範例範例 1)1)

例如:查詢例如:查詢 BooksBooks 資料表中,書名有資料表中,書名有 JavaJava的圖書記錄,如下所示:的圖書記錄,如下所示:SELECT BookID, BookTitle, BookPrice SELECT BookID, BookTitle, BookPrice

FROM Books FROM Books

WHERE BookTitle LIKE '%Java%'WHERE BookTitle LIKE '%Java%'

Page 24: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-3 WHERE9-2-3 WHERE 子句的邏輯運算子子句的邏輯運算子 -- LIKE LIKE 包含子字串運算子包含子字串運算子 (( 範例範例 2)2)

例如:查詢例如:查詢 BooksBooks 資料表中,書號是資料表中,書號是 P-SP-S範圍字母開頭的圖書資料,如下所示:範圍字母開頭的圖書資料,如下所示:SELECT BookID, BookTitle, BookPrice SELECT BookID, BookTitle, BookPrice

FROM Books FROM Books

WHERE BookID LIKE '[P-S]%'WHERE BookID LIKE '[P-S]%'

Page 25: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-3 WHERE9-2-3 WHERE 子句的邏輯運算子子句的邏輯運算子 -- BETWEEN/AND BETWEEN/AND 範圍運算子範圍運算子

BETWEEN/ANDBETWEEN/AND 運算子可以定義欄位值需要符合運算子可以定義欄位值需要符合的範圍,其範圍值可以是文字、數值或和日期的範圍,其範圍值可以是文字、數值或和日期 //時間資料。例如:因為購書預算在時間資料。例如:因為購書預算在 590~620590~620 之間,之間,所以我們可以查詢所以我們可以查詢 BooksBooks 資料表看看有哪些書可資料表看看有哪些書可以購買,如下所示:以購買,如下所示:

SELECT BookID, BookTitle, BookPrice SELECT BookID, BookTitle, BookPrice

FROM BooksFROM Books

WHERE BookPrice WHERE BookPrice

BETWEEN 590 AND 620BETWEEN 590 AND 620

Page 26: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-3 WHERE9-2-3 WHERE 子句的邏輯運算子子句的邏輯運算子 -- IN IN 運算子運算子 (( 說明說明 ))

ININ 運算子只需是清單其中之一即可,我們需要列運算子只需是清單其中之一即可,我們需要列出一串文字或數值清單作為條件,欄位值只需是出一串文字或數值清單作為條件,欄位值只需是其中之一,就符合條件。其中之一,就符合條件。

Page 27: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-3 WHERE9-2-3 WHERE 子句的邏輯運算子子句的邏輯運算子 -- IN IN 運算子運算子 (( 範例範例 ))

例如:我們準備購買書號例如:我們準備購買書號 FS499FS499、、 F6472F6472和和P780P780 三本書,所以查詢三本書,所以查詢 BooksBooks 資料表關於這些資料表關於這些書籍的詳細資料,如下所示:書籍的詳細資料,如下所示:SELECT BookID, BookTitle, BookPrice SELECT BookID, BookTitle, BookPrice

FROM BooksFROM Books

WHERE BookID IN ('FS499', 'F6472', 'P780')WHERE BookID IN ('FS499', 'F6472', 'P780')

Page 28: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-3 WHERE9-2-3 WHERE 子句的邏輯運算子子句的邏輯運算子 -- NOT NOT 運算子運算子 (( 說明說明 ))

NOTNOT 運算子可以搭配邏輯運算子,取得與運算子可以搭配邏輯運算子,取得與條件相反的查詢結果,如下表所示:條件相反的查詢結果,如下表所示:運算子 說明

NOT LIKE 否定 LIKE運算式NOT BETWEEN 否定 BETWEEN/AND運算式

NOT IN 否定 IN運算式

Page 29: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-3 WHERE9-2-3 WHERE 子句的邏輯運算子子句的邏輯運算子 -- NOT NOT 運算子運算子 (( 範例範例 ))

例如:我們已經買了例如:我們已經買了 FS499FS499、、 F6472F6472和和 P780P780 三三本書,所以準備查詢本書,所以準備查詢 BooksBooks 資料表,看看還有什資料表,看看還有什麼圖書沒有購買,如下所示:麼圖書沒有購買,如下所示:SELECT BookID, BookTitle, BookPrice FSELECT BookID, BookTitle, BookPrice F

ROM Books WHERE BookID NOT IN ('FS499', ROM Books WHERE BookID NOT IN ('FS499', 'F6472', 'P780')'F6472', 'P780')

Page 30: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-3 WHERE9-2-3 WHERE 子句的邏輯運算子子句的邏輯運算子 -- AND AND 運算子運算子

ANDAND 運算子連接的前後運算式都必須同時為真,運算子連接的前後運算式都必須同時為真,整個整個 WHEREWHERE 子句的條件才為真。例如:查詢子句的條件才為真。例如:查詢BooksBooks 資料表的資料表的 BookIDBookID 欄位包含欄位包含 '5''5' 子字串,而子字串,而且且 BookTitleBookTitle有有 '' 程式程式 '' 子字串,如下所示:子字串,如下所示:SELECT BookID, BookTitle, BookPrice SELECT BookID, BookTitle, BookPrice

FROM Books WHERE BookID LIKE '%5%' FROM Books WHERE BookID LIKE '%5%' AND BookTitle LIKE '%AND BookTitle LIKE '% 程式程式 %'%'

Page 31: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-3 WHERE9-2-3 WHERE 子句的邏輯運算子子句的邏輯運算子 -- OR OR 運算子運算子

OROR 運算子連接的前後條件,只需任何一個條件運算子連接的前後條件,只需任何一個條件為真,即為真。例如:查詢為真,即為真。例如:查詢 BooksBooks 資料表的資料表的BookIDBookID 欄位包含欄位包含 '5''5' 子字串,或子字串,或 BookTitleBookTitle有有 '' 程程式式 '' 子字串,如下所示:子字串,如下所示:

SELECT BookID, BookTitle, BookPrice SELECT BookID, BookTitle, BookPrice

FROM Books WHERE BookID LIKE '%5%' OR FROM Books WHERE BookID LIKE '%5%' OR BookTitle LIKE '%BookTitle LIKE '% 程式程式 %'%'

Page 32: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-3 WHERE9-2-3 WHERE 子句的邏輯運算子子句的邏輯運算子 --連接多個條件與括號連接多個條件與括號 (( 說明說明 ))

在在 WHEREWHERE 子句的條件可以使用子句的條件可以使用 ANDAND和和OROR 來連接多個不同條件。其優先順序是位來連接多個不同條件。其優先順序是位在括號中的運算式優先。在括號中的運算式優先。

Page 33: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-3 WHERE9-2-3 WHERE 子句的邏輯運算子子句的邏輯運算子 --連接多個條件與括號連接多個條件與括號 (( 範例範例 ))

例如:查詢例如:查詢 BooksBooks 資料表資料表 BookIDBookID 欄位包含欄位包含‘‘ 2’2’ 子子字串,和字串,和 BookTitleBookTitle 欄位有欄位有‘‘程式程式’’子字串,或子字串,或BookPriceBookPrice 大於等於大於等於 600600 ,後,後 22 個條件以括號括個條件以括號括起,如下所示:起,如下所示:SELECT BookID, BookTitle, BookPrice FROM SELECT BookID, BookTitle, BookPrice FROM

Books WHERE BookID LIKE '%2%'Books WHERE BookID LIKE '%2%'

AND (BookTitle LIKE '%AND (BookTitle LIKE '% 程式程式 %'%'

OR BookPrice >=600)OR BookPrice >=600)

Page 34: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-4 WHERE9-2-4 WHERE 子句的算術運算子句的算術運算子子

在在 WHEREWHERE 子句的運算式條件也支援算術運算子子句的運算式條件也支援算術運算子的加、減、乘、除和餘數,我們可以在的加、減、乘、除和餘數,我們可以在 WHEREWHERE子句的條件加上算術運算子。例如:查詢子句的條件加上算術運算子。例如:查詢 BooksBooks資料表的資料表的 BookPriceBookPrice 在打八折後,售價大於在打八折後,售價大於 500500元的圖書記錄,如下所示:元的圖書記錄,如下所示:

SELECT BookID, BookTitle, BookPrice SELECT BookID, BookTitle, BookPrice

FROM Books WHERE FROM Books WHERE

(BookPrice * 0.8) > 500(BookPrice * 0.8) > 500

Page 35: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-5 9-2-5 聚合函數的摘要查詢聚合函數的摘要查詢 -- 說說明明

「聚合函數」(「聚合函數」( Aggregate FunctionsAggregate Functions )也)也稱為「欄位函數」(稱為「欄位函數」( Column FunctionsColumn Functions ),),可以進行選取記錄欄位值的筆數、平均、可以進行選取記錄欄位值的筆數、平均、範圍和統計函數,以便提供進一步欄位資範圍和統計函數,以便提供進一步欄位資料的分析結果。料的分析結果。

一般來說,如果一般來說,如果 SELECTSELECT 指令敘述擁有聚指令敘述擁有聚合函數,稱為「摘要查詢」(合函數,稱為「摘要查詢」( Summary Summary QueryQuery )。)。

Page 36: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-5 9-2-5 聚合函數的摘要查詢聚合函數的摘要查詢 -- 種種類類

常用的聚合函數說明,如下表所示:常用的聚合函數說明,如下表所示:函數 說明

COUNT(運算式) 計算記錄筆數AVG(運算式) 計算欄位平均值MAX(運算式) 取得記錄欄位的最大值MIN(運算式) 取得記錄欄位的最小值SUM(運算式) 取得記錄欄位的總計

Page 37: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-5 9-2-5 聚合函數的摘要查詢聚合函數的摘要查詢 --COUNT()COUNT() 函數函數

SQLSQL 指令可以配合指令可以配合 COUNT()COUNT() 函數計算查函數計算查詢的記錄數,「詢的記錄數,「 ** 」參數可以統計資料表的」參數可以統計資料表的所有記錄數,或指定欄位來計算欄位不是所有記錄數,或指定欄位來計算欄位不是空值的記錄數。空值的記錄數。

例如:查詢例如:查詢 BooksBooks 資料表的資料表的 BookPriceBookPrice 高高過過 600600 元的圖書種類,如下所示:元的圖書種類,如下所示:SELECT COUNT(*) AS SELECT COUNT(*) AS 圖書數 圖書數 FROM BooksFROM Books

WHERE BookPrice > 600WHERE BookPrice > 600

Page 38: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-5 9-2-5 聚合函數的摘要查詢聚合函數的摘要查詢 --AVG()AVG() 函數函數

SQLSQL 指令只需配合指令只需配合 AVG()AVG() 函數,就可以計函數,就可以計算指定欄位的平均值。例如:在算指定欄位的平均值。例如:在 BooksBooks 資資料表查詢料表查詢 BookIDBookID 包含包含 '5''5' 子字串的圖書總子字串的圖書總數,和書價的平均值,如下所示:數,和書價的平均值,如下所示:SELECT COUNT(*) AS SELECT COUNT(*) AS 圖書總數圖書總數 , ,

AVG(BookPrice) AS AVG(BookPrice) AS 書價平均值 書價平均值 FROM Books WHERE BookID LIKE '%5%'FROM Books WHERE BookID LIKE '%5%'

Page 39: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-5 9-2-5 聚合函數的摘要查詢聚合函數的摘要查詢 --MAX()MAX() 函數函數

SQLSQL 指令只需配合指令只需配合 MAX()MAX() 函數,就可以計函數,就可以計算符合條件記錄的欄位最大值。例如:在算符合條件記錄的欄位最大值。例如:在BooksBooks 資料表查詢資料表查詢 BookIDBookID 包含包含 '5''5' 子字串子字串的最貴書價,如下所示:的最貴書價,如下所示:SELECT MAX(BookPrice) AS SELECT MAX(BookPrice) AS 最貴書價 最貴書價 FROM FROM

Books Books

WHERE BookID LIKE '%5%'WHERE BookID LIKE '%5%'

Page 40: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-5 9-2-5 聚合函數的摘要查詢聚合函數的摘要查詢 --MIN()MIN() 函數函數

SQLSQL 指令如果配合指令如果配合 MIN()MIN() 函數,就可以計函數,就可以計算出符合條件記錄的欄位最小值。例如:算出符合條件記錄的欄位最小值。例如:在在 BooksBooks 資料表查詢資料表查詢 BookIDBookID 包含包含 '5''5' 子字子字串的最低書價,如下所示:串的最低書價,如下所示:SELECT MIN(BookPrice) AS SELECT MIN(BookPrice) AS 最低書價 最低書價 FROM FROM

Books Books

WHERE BookID LIKE '%5%'WHERE BookID LIKE '%5%'

Page 41: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-5 9-2-5 聚合函數的摘要查詢聚合函數的摘要查詢 --SUM()SUM() 函數函數

SQLSQL 指令配合指令配合 SUM()SUM() 函數,可以計算出符函數,可以計算出符合條件記錄的欄位總和。例如:在合條件記錄的欄位總和。例如:在 BooksBooks資料表計算圖書書價的總和和平均,如下資料表計算圖書書價的總和和平均,如下所示:所示:SELECT SUM(BookPrice) AS SELECT SUM(BookPrice) AS 書價總額書價總額 , ,

SUM(BookPrice)/COUNT(*) AS SUM(BookPrice)/COUNT(*) AS 書價平均 書價平均 FROM BooksFROM Books

Page 42: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-6 9-2-6 排序排序 ORDER BYORDER BY 子句子句 -- 語語法法

SELECTSELECT 指令可以使用指令可以使用 ORDER BYORDER BY 子句依子句依照欄位由小到大或由大到小進行排序,其照欄位由小到大或由大到小進行排序,其語法如下所示:語法如下所示:ORDER BY ORDER BY 運算式 運算式 [ASC | DESC] [, [ASC | DESC] [, 運算式 運算式

[ASC | DESC][ASC | DESC] 上述語法的排序方式預設是由小到大排序上述語法的排序方式預設是由小到大排序的的 ASCASC ,如果希望由大至小,請使用,如果希望由大至小,請使用DESCDESC 關鍵字。關鍵字。

Page 43: 第 9 章  T-SQL語法與參數的SQL查詢

9-2-6 9-2-6 排序排序 ORDER BYORDER BY 子句子句 -- 範範例例

例如:在例如:在 BooksBooks 資料表查詢資料表查詢 BookPriceBookPrice 小於等於小於等於600600 元的圖書記錄,並且使用元的圖書記錄,並且使用 BookPriceBookPrice 欄位進欄位進行由大至小排序,如下所示:行由大至小排序,如下所示:

SELECT BookID, BookTitle, BookPrice FROM SELECT BookID, BookTitle, BookPrice FROM Books WHERE BookPrice <= 600Books WHERE BookPrice <= 600

ORDER BY BookPrice DESCORDER BY BookPrice DESC

Page 44: 第 9 章  T-SQL語法與參數的SQL查詢

9-3 9-3 建立參數的建立參數的 SQLSQL 查詢查詢 9-3-1 9-3-1 從從 TextBoxTextBox 控制項取得參數值控制項取得參數值 9-3-2 9-3-2 從從 DropDownListDropDownList 控制項取得參數值控制項取得參數值 9-3-3 9-3-3 從從 URLURL 參數取得參數取得 SQLSQL 的參數值的參數值 9-3-4 9-3-4 改為使用改為使用 SessionSession 變數取得變數取得 SQLSQL 參參

數值數值

Page 45: 第 9 章  T-SQL語法與參數的SQL查詢

9-3 9-3 建立參數的建立參數的 SQLSQL 查詢查詢 在在 SqlDataSourceSqlDataSource 控制項使用設定資料來源精靈控制項使用設定資料來源精靈

建立的建立的 SQLSQL 指令敘述,就是指定指令敘述,就是指定SelectCommandSelectCommand 屬性值,可以切換原始檔檢視來屬性值,可以切換原始檔檢視來檢視檢視 SelectCommandSelectCommand 屬性值的屬性值的 SQLSQL 指令敘述。指令敘述。

WHEREWHERE 子句的條件不只可以是常數,還可以使子句的條件不只可以是常數,還可以使用其他控制項、用其他控制項、 SessionSession 變數或變數或 QueryStringQueryString的的URLURL參數值來建立過濾條件,即建立參數的參數值來建立過濾條件,即建立參數的 SQLSQL查詢,此時過濾條件的參數值不是常數值,而是查詢,此時過濾條件的參數值不是常數值,而是從其他來源取得的參數值。從其他來源取得的參數值。

Page 46: 第 9 章  T-SQL語法與參數的SQL查詢

9-3-1 9-3-1 從從 TextBoxTextBox 控制項取得參數控制項取得參數值值 -- 說明說明

參數的參數的 SQLSQL 查詢可以從查詢可以從 TextBoxTextBox 控制項取控制項取得參數值,例如:在得參數值,例如:在 TextBoxTextBox 控制項輸入控制項輸入書名的部分子字串,就可以在書名的部分子字串,就可以在 GridViewGridView 控控制項顯示符合條件的記錄資料。制項顯示符合條件的記錄資料。

Page 47: 第 9 章  T-SQL語法與參數的SQL查詢

9-3-1 9-3-1 從從 TextBoxTextBox 控制項取得參數控制項取得參數值值 -- 設定設定

在在 SQLSQL陳述式的步驟,按陳述式的步驟,按【【 WHEREWHERE】】鈕新增鈕新增WHEREWHERE 子句,可以看到「加入子句,可以看到「加入 WHEREWHERE 子句」子句」對話方塊。對話方塊。

在【資料行】欄選欄位【 BookTitle】,【運算子】欄位選【 LIKE】,來源選【 Control】後,在右上方【控制項 ID】

欄位選【 txtTitle】,按【加入】鈕建立WHERE子句

Page 48: 第 9 章  T-SQL語法與參數的SQL查詢

9-3-1 9-3-1 從從 TextBoxTextBox 控制項取得參數控制項取得參數值值 -- 範例網站範例網站

ASP.NETASP.NET 網站:網站: Ch9-3-1Ch9-3-1 在在 ASP.NETASP.NET 網頁建立網頁建立 TextBoxTextBox 控制項取得參數控制項取得參數

值,以便建立參數的值,以便建立參數的 SQLSQL 查詢,可以查詢符合書查詢,可以查詢符合書名條件的圖書記錄,如下圖所示:名條件的圖書記錄,如下圖所示:

Page 49: 第 9 章  T-SQL語法與參數的SQL查詢

9-3-2 9-3-2 從從 DropDownListDropDownList 控制項取得控制項取得參數值參數值 -- 說明說明

參數的參數的 SQLSQL 查詢除了可以從查詢除了可以從 TextBoxTextBox 控制控制項取得參數值外,我們也可以從項取得參數值外,我們也可以從DropDownListDropDownList 控制項取得參數值,例如:控制項取得參數值,例如:在在 DropDownListDropDownList 控制項選取圖書種類後,控制項選取圖書種類後,就可以在下方就可以在下方 GridViewGridView 控制項顯示此類別控制項顯示此類別的圖書資料。的圖書資料。

因為因為 ASP.NETASP.NET 網頁的網頁的 DropDownListDropDownList 控制控制項本身也是從項本身也是從 SqlDataSourceSqlDataSource 控制項取得控制項取得資料,換句話說,此資料,換句話說,此 ASP.NETASP.NET 網頁共有網頁共有 22個個 SqlDataSourceSqlDataSource 控制項,分別對應控制項,分別對應DropDownListDropDownList和和 GridViewGridView 控制項。控制項。

Page 50: 第 9 章  T-SQL語法與參數的SQL查詢

9-3-2 9-3-2 從從 DropDownListDropDownList 控制項取得控制項取得參數值參數值 -- 設定設定

在在 SQLSQL陳述式的步驟,按陳述式的步驟,按【【 WHEREWHERE】】鈕新增鈕新增WHEREWHERE 子句,可以看到「加入子句,可以看到「加入 WHEREWHERE 子句」子句」對話方塊。對話方塊。

在【資料行】欄選欄位【 BookCatalog】,【運算子】欄位選【=】,來源選

【 Control】後,在右上方【控制項 ID】

欄位選【DropDownList1】,按【加入】鈕建立

WHERE子句

Page 51: 第 9 章  T-SQL語法與參數的SQL查詢

9-3-2 9-3-2 從從 DropDownListDropDownList 控制項取得控制項取得參數值參數值 -- 範例網站範例網站

ASP.NETASP.NET 網站:網站: Ch9-3-2Ch9-3-2 擴充第擴充第 8-6-38-6-3 節的節的 ASP.NETASP.NET 網站,在網站,在 ASP.NETASP.NET

網頁使用網頁使用 DropDownListDropDownList 控制項取得參數值,以控制項取得參數值,以便建立參數的便建立參數的 SQLSQL 查詢,可以查詢指定類別的圖查詢,可以查詢指定類別的圖書記錄,如下圖所示:書記錄,如下圖所示:

Page 52: 第 9 章  T-SQL語法與參數的SQL查詢

9-3-3 9-3-3 從從 URLURL參數取得參數取得 SQLSQL 的參數的參數值值 -- 說明說明

在第在第 9-3-19-3-1和和 9-3-29-3-2 節建立的參數節建立的參數 SQLSQL 查詢都是查詢都是在同一頁在同一頁 ASP.NETASP.NET 網頁,以表單送回來取得控網頁,以表單送回來取得控制項輸入或選擇的參數值,對於不同制項輸入或選擇的參數值,對於不同 ASP.NETASP.NET網頁來說,我們可以使用網頁來說,我們可以使用 SessionSession 變數、變數、 URLURL參參數或數或 CookieCookie 來取得其他來取得其他 ASP.NETASP.NET 網頁傳入的參網頁傳入的參數值。數值。

例如:將第例如:將第 9-3-19-3-1節節 ASP.NETASP.NET 網站的網站的Default.aspxDefault.aspx 分割成二頁分割成二頁 ASP.NETASP.NET 網頁,在第一網頁,在第一頁輸入書名後,按下按鈕,就可以使用頁輸入書名後,按下按鈕,就可以使用 URLURL參數參數傳遞至第二頁建立參數的傳遞至第二頁建立參數的 SQLSQL 查詢,以便在查詢,以便在GridViewGridView 控制項顯示查詢結果的圖書記錄。控制項顯示查詢結果的圖書記錄。

Page 53: 第 9 章  T-SQL語法與參數的SQL查詢

9-3-3 9-3-3 從從 URLURL參數取得參數取得 SQLSQL 的參數的參數值值 -- 設定設定

在在 SQLSQL陳述式的步驟,按陳述式的步驟,按【【 WHEREWHERE】】鈕新增鈕新增WHEREWHERE 子句,可以看到「加入子句,可以看到「加入 WHEREWHERE 子句」子句」對話方塊。對話方塊。 在【資料行】欄選欄位

【 BookTitle】,【運算子】欄位選【 LIKE】,來源選【QueryString】後,在右上方

【QueryString欄位】輸入URL參數【 Title】,按【加入】鈕建立WHERE

子句

Page 54: 第 9 章  T-SQL語法與參數的SQL查詢

9-3-3 9-3-3 從從 URLURL參數取得參數取得 SQLSQL 的參數的參數值值 -- 範例網站範例網站

ASP.NETASP.NET 網站:網站: Ch9-3-3Ch9-3-3 在在 ASP.NETASP.NET 網頁建立網頁建立 TextBoxTextBox 控制項取得參數控制項取得參數

值後,使用值後,使用 Response.Redirect()Response.Redirect() 方法轉址至方法轉址至Ch9-3-3.aspxCh9-3-3.aspx ,以便建立,以便建立 URLURL參數的參數的 SQLSQL 查詢,查詢,可以查詢符合書名條件的圖書記錄,如下圖所示:可以查詢符合書名條件的圖書記錄,如下圖所示:

Page 55: 第 9 章  T-SQL語法與參數的SQL查詢

9-3-4 9-3-4 改為使用改為使用 SessionSession 變數取得變數取得SQLSQL參數值參數值 -- 說明說明

在第在第 9-3-39-3-3 節是使用節是使用 URLURL 參數來取得參數來取得 SQLSQL參數值,這一節直接修改上一節的網站,參數值,這一節直接修改上一節的網站,改為使用改為使用 SessionSession 變數取得變數取得 SQLSQL 參數值。參數值。

在「參數」框選【 BookTitle】後,在右上方將【參數來源】欄改選【 Session】,然後在

【 SessionField】欄輸入Session變數名稱【 Title】

Page 56: 第 9 章  T-SQL語法與參數的SQL查詢

9-3-4 9-3-4 改為使用改為使用 SessionSession 變數取得變數取得SQLSQL參數值參數值 -- 範例網站範例網站

ASP.NETASP.NET 網站:網站: Ch9-3-4Ch9-3-4 這個這個 ASP.NETASP.NET 網站就是上一節的網站內容,我網站就是上一節的網站內容,我

們準備改為使用們準備改為使用 SessionSession 變數,將參數傳至變數,將參數傳至 Ch9-Ch9-3-4.aspx3-4.aspx ,以便建立參數的,以便建立參數的 SQLSQL 查詢,來查詢符查詢,來查詢符合書名條件的圖書記錄合書名條件的圖書記錄,,可以看到和上一節相同可以看到和上一節相同執行結果的執行結果的 ASP.NETASP.NET 網頁。網頁。

Page 57: 第 9 章  T-SQL語法與參數的SQL查詢

9-4 9-4 新增、更新與刪除記錄新增、更新與刪除記錄 9-4-1 SQL9-4-1 SQL 語言的資料操作指令語言的資料操作指令 9-4-2 SqlDataSource9-4-2 SqlDataSource 控制項的資料操作控制項的資料操作 9-4-3 ADO.NET9-4-3 ADO.NET 的資料操作的資料操作

Page 58: 第 9 章  T-SQL語法與參數的SQL查詢

9-4-1 SQL9-4-1 SQL 語言的資料操作指令語言的資料操作指令 --INSERTINSERT 指令指令 (( 語法語法 ))

SQLSQL 插入記錄插入記錄 INSERTINSERT 指令可以新增一筆指令可以新增一筆記錄到資料表。其基本語法如下所示:記錄到資料表。其基本語法如下所示:INSERT INTO table (column1,column2,…..) INSERT INTO table (column1,column2,…..)

VALUES ('value1', 'value2 ', …)VALUES ('value1', 'value2 ', …) 上述上述 SQLSQL 指令的指令的 tabletable 是準備插入記錄的是準備插入記錄的

資料表名稱,資料表名稱, column1~ncolumn1~n 為資料表內的欄為資料表內的欄位名稱(不需全部欄位),位名稱(不需全部欄位), value1~nvalue1~n 是對是對應的欄位值。應的欄位值。

Page 59: 第 9 章  T-SQL語法與參數的SQL查詢

9-4-1 SQL9-4-1 SQL 語言的資料操作指令語言的資料操作指令 --INSERTINSERT 指令指令 ((注意事項注意事項 ))

INSERTINSERT 指令的注意事項,如下所示:指令的注意事項,如下所示: 不論是欄位或值清單,都需要使用逗號分隔。不論是欄位或值清單,都需要使用逗號分隔。 INSERTINSERT 指令指令 VALUESVALUES 的值,數值不用引號包的值,數值不用引號包

圍,字元與日期圍,字元與日期 // 時間需要使用引號包圍。時間需要使用引號包圍。 INSERTINSERT 指令的欄位清單不需和資料表定義的指令的欄位清單不需和資料表定義的

欄位數目或順序相同,只需選擇需要新增的欄欄位數目或順序相同,只需選擇需要新增的欄位(非位(非 NULLNULL 欄位)即可,但是括號內的欄位欄位)即可,但是括號內的欄位名稱順序需要和名稱順序需要和 VALUESVALUES 值的順序相同。值的順序相同。

Page 60: 第 9 章  T-SQL語法與參數的SQL查詢

9-4-1 SQL9-4-1 SQL 語言的資料操作指令語言的資料操作指令 --INSERTINSERT 指令指令 (( 範例範例 ))

例如:在例如:在 BooksBooks 資料表插入一筆圖書記錄的資料表插入一筆圖書記錄的 SQLSQL指令,如下所示:指令,如下所示:

INSERT INTO BooksINSERT INTO Books

(BookID, BookCatalog, BookTitle, BookAuthor, (BookID, BookCatalog, BookTitle, BookAuthor, BookPrice, BookPubDate)BookPrice, BookPubDate)

VALUES ('FT752', 'VALUES ('FT752', ' 程式設計程式設計 ', 'Visual Basic 2008', 'Visual Basic 2008程式設計範例教本程式設計範例教本 ', '', '陳會安陳會安 ', 560, '2008/03/01')', 560, '2008/03/01')

上述上述 SQLSQL 指令的字串欄位值有使用單引號括起,指令的字串欄位值有使用單引號括起,數值沒有,日期數值沒有,日期 // 時間也是使用單引號包圍。時間也是使用單引號包圍。

Page 61: 第 9 章  T-SQL語法與參數的SQL查詢

9-4-1 SQL9-4-1 SQL 語言的資料操作指令語言的資料操作指令 --UPDATEUPDATE 指令指令 (( 語法語法 ))

SQLSQL 更新記錄更新記錄 UPDATEUPDATE 指令可以將資料表內符指令可以將資料表內符合條件的記錄,更新其欄位內容。其基本語法如合條件的記錄,更新其欄位內容。其基本語法如下所示:下所示:UPDATE table SET column1 = 'value1' WHERE UPDATE table SET column1 = 'value1' WHERE

conditionsconditions 上述指令的上述指令的 tabletable 是資料表,是資料表, SETSET 子句子句 column1column1

是資料表的欄位名稱,不用全部只需指定要更新是資料表的欄位名稱,不用全部只需指定要更新的欄位,的欄位, value1value1 是更新欄位值,如果更新欄位不是更新欄位值,如果更新欄位不只一個,請使用逗號分隔,如下所示:只一個,請使用逗號分隔,如下所示:UPDATE table SET column1 = 'value1' , UPDATE table SET column1 = 'value1' ,

column2 = 'value2' column2 = 'value2' WHERE conditionsWHERE conditions

Page 62: 第 9 章  T-SQL語法與參數的SQL查詢

9-4-1 SQL9-4-1 SQL 語言的資料操作指令語言的資料操作指令 --UPDATEUPDATE 指令指令 ((注意事項注意事項 ))

UPDATEUPDATE 指令的注意事項,如下所示:指令的注意事項,如下所示: WHEREWHERE 條件子句是必要元素,如果沒有此條條件子句是必要元素,如果沒有此條

件,資料表內所有記錄欄位都會被更新。件,資料表內所有記錄欄位都會被更新。 更新欄位值如為數值不用引號包圍,字元與日更新欄位值如為數值不用引號包圍,字元與日期期 // 時間需要使用引號包圍。時間需要使用引號包圍。

Page 63: 第 9 章  T-SQL語法與參數的SQL查詢

9-4-1 SQL9-4-1 SQL 語言的資料操作指令語言的資料操作指令 --UPDATEUPDATE 指令指令 (( 範例範例 ))

例如:在例如:在 BooksBooks 資料表更改圖書記錄資料資料表更改圖書記錄資料的的 SQLSQL 指令,如下所示:指令,如下所示:UPDATE BooksUPDATE Books

SET BookPrice = 580, BookPubDate = SET BookPrice = 580, BookPubDate = '2008/04/01''2008/04/01'

WHERE (BookID = 'FT752') WHERE (BookID = 'FT752') 上述上述 SQLSQL 指令的指令的 WHEREWHERE 條件為書號條件為書號

BookIDBookID 欄位,然後使用欄位,然後使用 SETSET 子句更新指子句更新指定的欄位資料。定的欄位資料。

Page 64: 第 9 章  T-SQL語法與參數的SQL查詢

9-4-1 SQL9-4-1 SQL 語言的資料操作指令語言的資料操作指令 --DELETEDELETE指令指令 (( 語法語法 ))

SQLSQL 刪除記錄刪除記錄 DELETEDELETE 指令是將資料表內指令是將資料表內符合條件的記錄都刪除掉。其基本語法如符合條件的記錄都刪除掉。其基本語法如下所示:下所示:DELETE FROM table WHERE conditionsDELETE FROM table WHERE conditions

上述指令的上述指令的 tabletable 是資料表,是資料表, WHEREWHERE 子句子句conditionsconditions 為刪除記錄條件,口語來說就是為刪除記錄條件,口語來說就是「將符合「將符合 conditionsconditions 條件的記錄刪除掉」。條件的記錄刪除掉」。

Page 65: 第 9 章  T-SQL語法與參數的SQL查詢

9-4-1 SQL9-4-1 SQL 語言的資料操作指令語言的資料操作指令 -- DELETE DELETE指令指令 ((注意事項注意事項 ))

DELETEDELETE 指令的注意事項,如下所示:指令的注意事項,如下所示: WHEREWHERE 條件子句是條件子句是 DELETEDELETE 指令的必要元素,指令的必要元素,

如果沒有此條件,資料表內的所有記錄都會被如果沒有此條件,資料表內的所有記錄都會被刪除掉。刪除掉。

WHEREWHERE 條件能夠使用條件能夠使用 ==、、 <><>、、 >>、、 <=<=和和>=>= 運算子。運算子。

WHEREWHERE 條件可以不只一個,如果擁有多個條條件可以不只一個,如果擁有多個條件,請使用邏輯運算子件,請使用邏輯運算子 ANDAND或或 OROR 運算子連接。運算子連接。

Page 66: 第 9 章  T-SQL語法與參數的SQL查詢

9-4-1 SQL9-4-1 SQL 語言的資料操作指令語言的資料操作指令 --DELETEDELETE指令指令 (( 範例範例 ))

例如:在例如:在 BooksBooks 資料表刪除一筆記錄的資料表刪除一筆記錄的SQLSQL 指令,如下所示:指令,如下所示:DELETE FROM BooksDELETE FROM Books

WHERE (BookID = 'FT752')WHERE (BookID = 'FT752') 上述上述 SQLSQL 指令的指令的 WHEREWHERE 條件為書號條件為書號

BookIDBookID 欄位,也就是將符合書號條件的圖欄位,也就是將符合書號條件的圖書記錄刪除掉。書記錄刪除掉。

Page 67: 第 9 章  T-SQL語法與參數的SQL查詢

9-4-2 SqlDataSource9-4-2 SqlDataSource控制項的資料控制項的資料操作操作 -- 說明說明

SqlDataSourceSqlDataSource 控制項除了可以建立參數查詢外,控制項除了可以建立參數查詢外,我們也可以透過參數的我們也可以透過參數的 INSERTINSERT、、 UPDATEUPDATE和和DELETEDELETE 指令來新增、更新與刪除資料表的記錄指令來新增、更新與刪除資料表的記錄資料。資料。

在建立在建立 SqlDataSourceSqlDataSource 控制項連接控制項連接 Products.mdfProducts.mdf資料庫,且讓控制項自動產生資料庫,且讓控制項自動產生INSERTINSERT、、 UPDATEUPDATE和和 DELETEDELETE 指令後,以指令後,以DELETEDELETE 指令為例,其自動產生的指令為例,其自動產生的 SQLSQL 指令,即指令,即控制項的控制項的 DeleteCommandDeleteCommand 屬性值,如下所示:屬性值,如下所示:

DELETE FROM [Books] WHERE [BookID] = DELETE FROM [Books] WHERE [BookID] = @BookID@BookID

Page 68: 第 9 章  T-SQL語法與參數的SQL查詢

9-4-2 SqlDataSource9-4-2 SqlDataSource控制項的資料控制項的資料操作操作 -- 指定參數值指定參數值

DELETEDELETE 指令的指令的 @BookID@BookID是是 WHEREWHERE 刪除條件刪除條件的參數(參數名稱預設是欄位名稱),即書號。的參數(參數名稱預設是欄位名稱),即書號。可以使用程式碼來指定此參數的值,如下所示:可以使用程式碼來指定此參數的值,如下所示:

SqlDataSource2.DeleteParameters[SqlDataSource2.DeleteParameters[

"BookID"].DefaultValue = txtID.Text;"BookID"].DefaultValue = txtID.Text;

SqlDataSource2.Delete();SqlDataSource2.Delete(); 上述上述 SqlDataSourceSqlDataSource 控制項使用控制項使用

DeleteParametersDeleteParameters 集合物件來指定參數集合物件來指定參數 BookIDBookID的值,即的值,即 DefaultValueDefaultValue 屬性值,然後執行屬性值,然後執行Delete()Delete() 方法來刪除記錄。方法來刪除記錄。

Page 69: 第 9 章  T-SQL語法與參數的SQL查詢

9-4-2 SqlDataSource9-4-2 SqlDataSource控制項的資料控制項的資料操作操作 -- 進階進階 SQLSQL 選項選項

在在 SQLSQL陳述式步驟,按右下方的陳述式步驟,按右下方的【【進階進階】】鈕,可鈕,可以看到「進階以看到「進階 SQLSQL產生選項」對話方塊。產生選項」對話方塊。

勾選【產生INSERT、UPDATE和DELETE陳述式】,按【確定】鈕即可自動產生新增、更新和刪除的SQL指令

Page 70: 第 9 章  T-SQL語法與參數的SQL查詢

9-4-2 SqlDataSource9-4-2 SqlDataSource控制項的資料控制項的資料操作操作 -- 範例網站範例網站

ASP.NETASP.NET 網站:網站: Ch9-4-2Ch9-4-2 在在 ASP.NETASP.NET 網頁使用網頁使用 TextBoxTextBox 控制項取得使用控制項取得使用者輸入的刪除書號,按下按鈕就可以使用者輸入的刪除書號,按下按鈕就可以使用SqlDataSourceSqlDataSource 控制項來刪除此書號的圖書記錄,控制項來刪除此書號的圖書記錄,如下圖所示:如下圖所示:

Page 71: 第 9 章  T-SQL語法與參數的SQL查詢

9-4-3 ADO.NET9-4-3 ADO.NET 的資料操作的資料操作 -- 說說明明

在在 ASP.NETASP.NET 網頁執行資料表插入、刪除和網頁執行資料表插入、刪除和更新記錄操作可以使用更新記錄操作可以使用 CommandCommand物件來物件來執行執行 SQLSQL 指令,使用的是指令,使用的是ExecuteNonQuery()ExecuteNonQuery() 方法,如下所示:方法,如下所示:count = objCmd.ExecuteNonQuery();count = objCmd.ExecuteNonQuery();

上述程式碼左邊的變數上述程式碼左邊的變數 countcount 可以取得影響可以取得影響的記錄數,此方法可以執行的記錄數,此方法可以執行 SQLSQL 指令,但指令,但不會傳回任何記錄資料,傳回的是影響的不會傳回任何記錄資料,傳回的是影響的記錄數。記錄數。

Page 72: 第 9 章  T-SQL語法與參數的SQL查詢

9-4-3 ADO.NET9-4-3 ADO.NET 的資料操作的資料操作 -- 範例範例網站網站

ASP.NETASP.NET 網站:網站: Ch9-4-3Ch9-4-3 在在 ASP.NETASP.NET 網頁使用網頁使用 TextBoxTextBox 控制項建立輸入控制項建立輸入

圖書資料的表單後,就可以使用圖書資料的表單後,就可以使用 CommandCommand物件物件在在 BooksBooks 資料表插入一筆記錄,如下圖所示:資料表插入一筆記錄,如下圖所示:

Page 73: 第 9 章  T-SQL語法與參數的SQL查詢