1 / 39

第十八章 資料庫 SQL

第十八章 資料庫 SQL. SQL 是一種結構化資料庫查詢語言,此一語言提供使用者建立、維護及查詢一個關聯式資料庫管理系統的命令。因為 SQL 語言具有易學習及閱讀的親合性,所以 SQL 已經被各種資料庫廠商採用,而成為一種共通的標準查詢語言。只要你學會 SQL ,即可操作各種資料庫如 Dbase 、 FoxPro 及 Paradox 等。 SQL 語言是由命令( Commands )、子句( Clauses )、運算子( Operators )及加總函數( Aggregate Functions )組成,分述如下:. 1. 命令( Commands ).

von
Download Presentation

第十八章 資料庫 SQL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第十八章 資料庫 SQL

  2. SQL是一種結構化資料庫查詢語言,此一語言提供使用者建立、維護及查詢一個關聯式資料庫管理系統的命令。因為SQL語言具有易學習及閱讀的親合性,所以SQL已經被各種資料庫廠商採用,而成為一種共通的標準查詢語言。只要你學會SQL,即可操作各種資料庫如Dbase、FoxPro及Paradox等。 SQL是一種結構化資料庫查詢語言,此一語言提供使用者建立、維護及查詢一個關聯式資料庫管理系統的命令。因為SQL語言具有易學習及閱讀的親合性,所以SQL已經被各種資料庫廠商採用,而成為一種共通的標準查詢語言。只要你學會SQL,即可操作各種資料庫如Dbase、FoxPro及Paradox等。 SQL語言是由命令(Commands)、子句(Clauses)、運算子(Operators)及加總函數(Aggregate Functions)組成,分述如下:

  3. 1.命令(Commands) SQL的命令分成資料定義語言(Data Definition Language)與資料操作語言(Data Manipulation Language),資料定義語言可用來建立新的資料庫、資料表、欄位及索引等,本書不予介紹;另一為資料操作語言,可用來建立查詢表、排序、過濾資料、萃取及修改、新增及刪除資料等動作。SQL的組成元素說明如下:

  4. 命 令 說 明 CREATE 建立新的資料表、欄位及索引表 DROP 從資料庫刪除資料表或索引表 ALTER 增加或修改欄位屬性 (1) 資料定義語言(DDL) 資料定義語言如下表:

  5. 命 令 說 明 SELECT 找出合於條件的記錄 INSERT 增加一筆記錄 UPDATE 更正合於條件的記錄 DELETE 刪除合於條件的記錄 (2) 資料操作語言(DML) 資料操作語言的命令如下表:

  6. 子 句 說 明 FROM 指定資料表 WHERE 設定條件 GROUP BY 設定分群 ORDER BY 設定輸出的順序 2.子句(Clause) 子句是用於設定欲操作的對象,SQL所用的子句如下表:

  7. 運算子 說 明 AND 邏輯AND OR 邏輯OR NOT 邏輯NOT 3.運算子(Operators) 運算子又分邏輯運算子(Logical Operators)與比較運算子(Comparison Operator),邏輯運算子如下表:

  8. 運算子 說 明 < 小於 <= 大於等於 > 大於 >= 大於等於 = 等於 <> 不等於 BETWEEN 設定範圍 LIKE 通配設定 IN 集合設定 比較運算子如下表:

  9. 加總函數 說 明 AVG 求指定條件的平均 COUNT 求指定條件的數量 SUM 求指定條件的和 MAX 求指定條件的最大值 MIN 求指定條件的最小值 4.加總函數(Aggregate Functions) 加總函數如下表: 以下將分四節分別介紹資料操作語言(DML)的SELECT、INSERT、UPDATE及DELETE。

  10. 18-1 SELECT SELECT是SQL敘述使用最頻繁的命令,其意為選擇的意思,可從一到數個資料表中選擇合乎條件的欄位與記錄,其傳回結果稱為資料集(Recordset)或結果集(Dataset),SELECT語法如下: SELECT 〔ALL|DISTINCT〕〈fieldlist〉 FROM〈tablelist〉IN databasename 〔WHERE 〈condition〉〕 〔GROUP BY 〈fieldlist〉〕 〔ORDER BY〈fieldlist 〔ASC|DESC〕〉〕

  11. 語法說明 • 1.SELECT〈fieldlist〉 fieldlist是用來放置所選用的欄位串列。欄位串列如來自不同的資料表則欄位之前要加資料表名稱,中間以逗號(,)隔開。欄位中間如有空白,則整個欄位應使用中括號括起。如果要選擇資料表的全部欄位,則可用星號(*)表示。此外,欄位串列可配合SUM(求和)、AVG(求平均)、MAX(求極大值)、MIN(求極小值)、COUNT(求計個數)等集合函數。

  12. 2.〔All | DISTINCT〕 〔ALL|DISTINCT〕是可以省略的項目(語法凡加中括號者皆是可以省略的項目),系統預設值為ALL,若加上DISTINCT則系統會剔除重覆的資料項。 • 3.FROM〈tablelist〉 用於指定來源資料表,資料表如有一個以上,中間應用逗號(,)或驚嘆號(!)隔開。 • 4.IN databasename • 用來連結一個外部資料庫(若要提高處理效率,最好使用附加資料表而不用IN子句)。 • 5.<alias>別名 資料表名稱有時很冗長,當我們在使用SQL敘述時,可以替這些資料表名稱取一個別名。如此做法,可以簡化SQL敘述。

  13. 6.〔WHERE〈condition〉〕 用來指定所要查詢的條件。各種條件可配合各種邏輯運算、關係運算、算術運算、集合運算及通配運算元。 • 7.〔GROUP BY〈fieldlist〉〕 其中GROUP BY用來將相同的資料集合併。 • 8. 〔ORDER BY〈fieldlist〔ASC|DESC〕〉〕 用來選擇某些欄位作為列印的先後順序,系統內定值為升冪(ASCending),如要指定降冪DESCending,只要將DESC緊跟在所需排序的欄位右方即可。

  14. FROM項目使用 • 1.最簡單的查詢指令就是只含有SELECT和FROM兩個關鍵字。例如,以下敘述: SELECT * FROM friend 可以列出資料表friend中所有欄位資料,其中星號(*)代表所有欄位。下圖是執行後的結果。 • 2.如果所選的欄位不只一個,中間以(,)分開。例如,以下敘述: SELECT name, height FROM friend 可以列出資料表friend中name,height兩個欄位資料,下圖是執行後的結果。

  15. 3.如果要剔除相同的記錄項,則於欄位前加上DISTINCT。例如,以下敘述:3.如果要剔除相同的記錄項,則於欄位前加上DISTINCT。例如,以下敘述: SELECT DISTINCT educate FROM frend 其結果如下圖所示。 • 4.如果資料欄位來自不同的資料表,則於欄位前加上資料表名稱,中間以逗點(,)或驚嘆號(!)隔開。例如,以下敘述: SELECT stuname.name, stuname.id, stugrd.eng FROM stuname, stugrd WHERE stuname.id=stugrd.id 則是資料表關聯的範例,其結果如下圖所示。

  16. 補充說明 為什麼要關聯? 1.可聯結不同單位的資料: 同一個人的資料可能分佈在不同的單位,如果需要在同一地點查看不同單位的資料,就須使用“關聯”。例如,前例stuname及stugrd可以使用相同的欄位“學號”(id)給予關聯合併。 2.可以節省記憶空間: 於資料表strgrd中,同一個人成績可能會出現許多次,如果不使用關聯則每次輸入成績時,也要輸入基本資料,如此將造成資料的重覆鍵入,浪費儲存空間,如使用關聯則可以避免這種現象。

  17. 3.確保資料的一致性: 同一欄位的資料,若同時出現在不同的資料表,將會造成資料維護的困難,例如,學生姓名欄若同時存放在不同的資料表中,而此位學生改名時,則必須至所有的資料表更正,萬一有某一個資料表忘了修正,則會破壞資料的一致性。

  18. 查詢條件WHERE WHERE是用來指定查詢條件。例如,以下敘述: SELECT * FROM friend WHERE educate > 4 可用來查詢資料表friend中,educate>4(教育程度大於4)的所有欄位資料。下圖是執行後的結果。 WHERE中各欄位條件可以分別使用邏輯運算。關係運算、數值運算、集合運算及通配運算等。分別舉例說明如下:

  19. 1.邏輯運算 WHERE子句可用的邏輯運算子有NOT、OR、AND及XOR。例如,以下敘述: SELECT * FROM friend WHERE educate > 4 AND height > 167 可用來查詢friend資料表中,educate>4且height>167的所有欄位資枓。下圖是執行後的結果。 又例如,以下敘述: SELECT * FROM friend WHERE NOT educate < 3 OR weight > 60 可用來查詢教育程度(educate)不小於3或體重(weight)大於60的所有欄位資料,注意NOT的優先權大於OR。下圖是執行後的結果。

  20. 大於 < 小於 = 等於 >= 大於或等於 <= 小於或等於 <> 不等於 BETWEEN…AND… 指定的範圍 2.關係運算 WHERE子句可用關係運算子如下表所示:

  21. 以上關係運算子的使用,請看以下範例說明。例如,以下敘述:以上關係運算子的使用,請看以下範例說明。例如,以下敘述: SELECT * FROM friend WHERE height >= 168 可用來查詢friend資料表中身高大於等於168者的所有欄位資料。下圖是執行後的結果。 又例如,以下敘述: SELECT * FROM friend WHERE educate BETWEEN 4 AND 5 可用來查詢friend資料表中教育程度介於4和5之間,(含4和5,且4和5位置不可掉換)。下圖是執行後的結果。 又例如,以下敘述: SELECT * FROM fri WHERE birth BETWEEN #1/1/1964 # AND #12/31/1967#' 可用來查詢fri資料表中,生日介於1964~1967年次的所有欄位資料。下圖是執行後的結果。

  22. 符號 優先等級 +(正),-(負) 1 ^(次方) 2 *(乘),/(除) 3 +(加),-(減) 4 3.數值運算 WHERE條件內可用的數值運算子如下表:

  23. 例如,以下敘述: SELECT * FROM friend WHERE height-weight-110 > 0 可用來查詢friend資料表中體重超過標準體重的所有欄位資料。下圖是執行後的結果。

  24. 4.集合運算。 集合運算就是利用保留字IN所組成,其使用語法如下: WHERE〈fieldname〉〔NOT〕IN(〈valus list〉) 其中〈value list〉是指定的集合,集合中的元素如果超過1個,中間必須以逗號隔開。例如,以下敘述: SELECT * FROM friend WHERE educate IN (2,3,5) 可用來查詢friend資料表中教育程度是2,3,5的所有欄位資料,下圖是執行後的結果。 又例如,“WHERE〔address city〕NOT IN '台北','高雄','台中'”可用來查詢地址不在台北,高雄,台中者的資料。(欄位內如有空白必須用中括號括起)。

  25. 5.通配運算。 通配運算是利用LIKE保留字配合通配字元%、_、〔〕及^所組成,其中(%)號代表字元長度和字元不拘;底線符號(_)號則代表長度為1的任意字元;中刮號[ ]代表指定範圍或集合的單一字元;^可用於表示不在字串中的字元,

  26. 萬用字元 內 容 % 代表零個至多個字元的字串 _ 代表單一字元 〔〕 代表指定範圍或集合的單一字元 〔^〕 代表不在指定範圍或集合的單一字元 下表就是LIKE萬用字元的整理內容:

  27. 運算式 傳回值說明 LIKE 'D%' 'D'開頭的字串 LIKE '%D' 'D'結尾的字串 LIKE '%D%' 包含'D'的字串 LIKE '_D' 'D'結尾且只含二個字元的字串 LIKE 'D_' 'D'開頭且只含二個字元的字串 LIKE '_D_' 'D'為中間第二個字元的三個字元字串 LIKE '〔NY〕%' 'N'開頭或'Y'開頭的字串 LIKE '%〔NY〕' 'N'結尾或'Y'結尾的字串 LIKE '%〔NY〕%' 包含'N'或'Y'的字串 以上萬用字元簡易運算式範例如下表:

  28. 運算式 傳回值說明 LIKE '〔N-Y〕%' 'N'到'Y'開頭的字串 LIKE '〔^N〕%' 不是'N'開頭的字串 其使用語法如下,若需詳細說明請自行線上查閱Like運算子。 WHERE〈fieldname〉〔NOT〕LIKE〈search string〉 其中LIKE〈search string〉就是上表使用通配字元的運算式,例如,以下敘述: SELECT * FROM friend WHERE tel LIKE '07%' 可用來查詢friend資料表中,電話號碼(tel)為07開頭者。下圖是執行後的結果。 又例如,以下敘述: SELECT * FROM friend WHERE name LIKE '許%' 可用來查詢friend資料表中,姓“許”的名單。

  29. GROUP BY項目的使用 SELECT指令中的GROUP BY項目可以用來將欄位中相同的值組合成群,其中SELECT除非用了函數,否則SELECT和GROUP BY所接欄位項目應相同。例如,以下敘述: SELECT educate, name FROM friend GROUP BY educate,name 可將列出的順序,依照教育程度成群排列。下圖是執行後的結果。

  30. 又例如,以下敘述: SELECT educate, AVG(height) as 身高平均 FROM friend GROUP BY educate 可用來列出friend資料表中各組教育程度的平均身高。下圖是執行後的結果。 再例如,以下敘述: SELECT educate, COUNT(*) 人數 FROM friend GROUP BY educate 可用來列出friend資料表中各組教育程度的人數。下圖是執行後的結果。

  31. ORDER BY項目的使用 利用ORDER BY這個項目,可以將輸出的結果依照某一個欄位進行排序,系統內定值為升冪ASCending,如果希望排列方式為降冪Des cending,則應在欄位後面加上DESC。 以下敘述: SELECT * FROM friend ORDER BY educate 可用來列出friend資料表中各欄位的資料,輸出方式按照教育程度由小而大排列。下圖是執行後的結果。

  32. 又例如,以下敘述: SELECT educate, name, height FROM friend ORDER BY educate, height DESC 可用來輸出friend資料表中教育程度、姓名、身高等三個欄位,輸出按照教育程度由小而大排列,教育程度相同時,再依身高由大而小排列。下圖是執行後的結果。

  33. ALIAS(別名)的使用 使用別名,表示在SQL敘述中重新命名資料表的名稱,但是真實的資料表名稱在資料庫中不會被改變。別名是用來使SQL敘述變得比較短及容易閱讀。例如,若有SQL敘述如下: select * From Customer, order, orpr, product where customer.id=orde.id And orde.orid=orpr.orid And orpr.prid=product.id Order By customer.id, orde.orid

  34. 若使用別名,則分別替customer、order、orpr及product取別名a、b、c及d,則SQL敘述可簡化如下:若使用別名,則分別替customer、order、orpr及product取別名a、b、c及d,則SQL敘述可簡化如下: Select * From customer a, orde b, orpr c, product d Where a.id=b.cuid And b.orid=c.orid And c.prid=d.id Order By a.id, b.orid 兩者皆可從4個資料表中擷取資料,但使用了別別(a,b,c,d)之後,可大幅縮短SQL敘述的程式碼。下圖是執行後的結果。

  35. <範例>18-1a 本節程式集錦。 物件說明 • 1.MainMenu1:用於製作主功能表。 • 2.DataGrid1:用於展示SQL敘述的執行結果。 • 3.RichTextBox1:用於顯示欲執行SQL敘述。 程式說明 • 1.SQL保留字於程式設計中,大小寫不拘。 • 2.雙引號內的空白均不可省略,如上面的" ORDER BY…"的空白均不可省略。

  36. 18-2 INSERT INSERT可用來增加一筆記錄,其語法如下,範例請看18-4a。 INSERT INTO 資料表(欄位) VALUES (欄位值)

  37. 18-3 UPDATE UPDATE可用來更正合於條件的記錄,其語法如下,範例請看18-4a。 UPDATE 資料表 SET 欄位=新值 WHERE 條件式

  38. 18-4 DELETE DELETE可用來刪除資料表內合於條件的記錄,其語法如下,範例請看18-4a。 DELETE FROM 資料表 WHERE 條件式

  39. <範例>18-4a 請讀者自行開啟範例e18-4a,執行程式並流覽其結果。

More Related