slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
第十八章 資料庫 SQL PowerPoint Presentation
Download Presentation
第十八章 資料庫 SQL

Loading in 2 Seconds...

play fullscreen
1 / 39

第十八章 資料庫 SQL - PowerPoint PPT Presentation


  • 106 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about '第十八章 資料庫 SQL' - von


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide2
SQL是一種結構化資料庫查詢語言,此一語言提供使用者建立、維護及查詢一個關聯式資料庫管理系統的命令。因為SQL語言具有易學習及閱讀的親合性,所以SQL已經被各種資料庫廠商採用,而成為一種共通的標準查詢語言。只要你學會SQL,即可操作各種資料庫如Dbase、FoxPro及Paradox等。 SQL是一種結構化資料庫查詢語言,此一語言提供使用者建立、維護及查詢一個關聯式資料庫管理系統的命令。因為SQL語言具有易學習及閱讀的親合性,所以SQL已經被各種資料庫廠商採用,而成為一種共通的標準查詢語言。只要你學會SQL,即可操作各種資料庫如Dbase、FoxPro及Paradox等。

SQL語言是由命令(Commands)、子句(Clauses)、運算子(Operators)及加總函數(Aggregate Functions)組成,分述如下:

1 commands
1.命令(Commands)

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

slide4

命 令

說 明

CREATE

建立新的資料表、欄位及索引表

DROP

從資料庫刪除資料表或索引表

ALTER

增加或修改欄位屬性

(1) 資料定義語言(DDL)

資料定義語言如下表:

slide5

命 令

說 明

SELECT

找出合於條件的記錄

INSERT

增加一筆記錄

UPDATE

更正合於條件的記錄

DELETE

刪除合於條件的記錄

(2) 資料操作語言(DML)

資料操作語言的命令如下表:

2 clause

子 句

說 明

FROM

指定資料表

WHERE

設定條件

GROUP BY

設定分群

ORDER BY

設定輸出的順序

2.子句(Clause)

子句是用於設定欲操作的對象,SQL所用的子句如下表:

3 operators

運算子

說 明

AND

邏輯AND

OR

邏輯OR

NOT

邏輯NOT

3.運算子(Operators)

運算子又分邏輯運算子(Logical Operators)與比較運算子(Comparison Operator),邏輯運算子如下表:

slide8

運算子

說 明

小於

<=

大於等於

大於

>=

大於等於

=

等於

<>

不等於

BETWEEN

設定範圍

LIKE

通配設定

IN

集合設定

比較運算子如下表:

4 aggregate functions

加總函數

說 明

AVG

求指定條件的平均

COUNT

求指定條件的數量

SUM

求指定條件的和

MAX

求指定條件的最大值

MIN

求指定條件的最小值

4.加總函數(Aggregate Functions)

加總函數如下表:

以下將分四節分別介紹資料操作語言(DML)的SELECT、INSERT、UPDATE及DELETE。

18 1 select
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〕〉〕

slide11
語法說明
  • 1.SELECT〈fieldlist〉

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

slide12
2.〔All | DISTINCT〕

〔ALL|DISTINCT〕是可以省略的項目(語法凡加中括號者皆是可以省略的項目),系統預設值為ALL,若加上DISTINCT則系統會剔除重覆的資料項。

  • 3.FROM〈tablelist〉

用於指定來源資料表,資料表如有一個以上,中間應用逗號(,)或驚嘆號(!)隔開。

  • 4.IN databasename
  • 用來連結一個外部資料庫(若要提高處理效率,最好使用附加資料表而不用IN子句)。
  • 5.<alias>別名

資料表名稱有時很冗長,當我們在使用SQL敘述時,可以替這些資料表名稱取一個別名。如此做法,可以簡化SQL敘述。

slide13
6.〔WHERE〈condition〉〕

用來指定所要查詢的條件。各種條件可配合各種邏輯運算、關係運算、算術運算、集合運算及通配運算元。

  • 7.〔GROUP BY〈fieldlist〉〕

其中GROUP BY用來將相同的資料集合併。

  • 8. 〔ORDER BY〈fieldlist〔ASC|DESC〕〉〕

用來選擇某些欄位作為列印的先後順序,系統內定值為升冪(ASCending),如要指定降冪DESCending,只要將DESC緊跟在所需排序的欄位右方即可。

slide14
FROM項目使用
  • 1.最簡單的查詢指令就是只含有SELECT和FROM兩個關鍵字。例如,以下敘述:

SELECT * FROM friend

可以列出資料表friend中所有欄位資料,其中星號(*)代表所有欄位。下圖是執行後的結果。

  • 2.如果所選的欄位不只一個,中間以(,)分開。例如,以下敘述:

SELECT name, height FROM friend

可以列出資料表friend中name,height兩個欄位資料,下圖是執行後的結果。

slide15
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

則是資料表關聯的範例,其結果如下圖所示。

slide16
補充說明

為什麼要關聯?

1.可聯結不同單位的資料:

同一個人的資料可能分佈在不同的單位,如果需要在同一地點查看不同單位的資料,就須使用“關聯”。例如,前例stuname及stugrd可以使用相同的欄位“學號”(id)給予關聯合併。

2.可以節省記憶空間:

於資料表strgrd中,同一個人成績可能會出現許多次,如果不使用關聯則每次輸入成績時,也要輸入基本資料,如此將造成資料的重覆鍵入,浪費儲存空間,如使用關聯則可以避免這種現象。

slide17
3.確保資料的一致性:

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

where
查詢條件WHERE

WHERE是用來指定查詢條件。例如,以下敘述:

SELECT * FROM friend WHERE educate > 4

可用來查詢資料表friend中,educate>4(教育程度大於4)的所有欄位資料。下圖是執行後的結果。

WHERE中各欄位條件可以分別使用邏輯運算。關係運算、數值運算、集合運算及通配運算等。分別舉例說明如下:

slide19
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。下圖是執行後的結果。

slide20

大於

小於

=

等於

>=

大於或等於

<=

小於或等於

<>

不等於

BETWEEN…AND…

指定的範圍

2.關係運算

WHERE子句可用關係運算子如下表所示:

slide21
以上關係運算子的使用,請看以下範例說明。例如,以下敘述:以上關係運算子的使用,請看以下範例說明。例如,以下敘述:

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年次的所有欄位資料。下圖是執行後的結果。

slide22

符號

優先等級

+(正),-(負)

1

^(次方)

2

*(乘),/(除)

3

+(加),-(減)

4

3.數值運算

WHERE條件內可用的數值運算子如下表:

slide23
例如,以下敘述:

SELECT * FROM friend WHERE height-weight-110 > 0

可用來查詢friend資料表中體重超過標準體重的所有欄位資料。下圖是執行後的結果。

slide24
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 '台北','高雄','台中'”可用來查詢地址不在台北,高雄,台中者的資料。(欄位內如有空白必須用中括號括起)。

slide25
5.通配運算。

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

slide26

萬用字元

內 容

%

代表零個至多個字元的字串

_

代表單一字元

〔〕

代表指定範圍或集合的單一字元

〔^〕

代表不在指定範圍或集合的單一字元

下表就是LIKE萬用字元的整理內容:

slide27

運算式

傳回值說明

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'的字串

以上萬用字元簡易運算式範例如下表:

slide28

運算式

傳回值說明

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資料表中,姓“許”的名單。

group by
GROUP BY項目的使用

SELECT指令中的GROUP BY項目可以用來將欄位中相同的值組合成群,其中SELECT除非用了函數,否則SELECT和GROUP BY所接欄位項目應相同。例如,以下敘述:

SELECT educate, name FROM friend GROUP BY educate,name

可將列出的順序,依照教育程度成群排列。下圖是執行後的結果。

slide30
又例如,以下敘述:

SELECT educate, AVG(height) as 身高平均 FROM friend GROUP BY educate

可用來列出friend資料表中各組教育程度的平均身高。下圖是執行後的結果。

再例如,以下敘述:

SELECT educate, COUNT(*) 人數 FROM friend GROUP BY educate

可用來列出friend資料表中各組教育程度的人數。下圖是執行後的結果。

order by
ORDER BY項目的使用

利用ORDER BY這個項目,可以將輸出的結果依照某一個欄位進行排序,系統內定值為升冪ASCending,如果希望排列方式為降冪Des cending,則應在欄位後面加上DESC。

以下敘述:

SELECT * FROM friend ORDER BY educate

可用來列出friend資料表中各欄位的資料,輸出方式按照教育程度由小而大排列。下圖是執行後的結果。

slide32
又例如,以下敘述:

SELECT educate, name, height FROM friend

ORDER BY educate, height DESC

可用來輸出friend資料表中教育程度、姓名、身高等三個欄位,輸出按照教育程度由小而大排列,教育程度相同時,再依身高由大而小排列。下圖是執行後的結果。

alias
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

slide34
若使用別名,則分別替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敘述的程式碼。下圖是執行後的結果。

18 1a
<範例>18-1a

本節程式集錦。

物件說明

  • 1.MainMenu1:用於製作主功能表。
  • 2.DataGrid1:用於展示SQL敘述的執行結果。
  • 3.RichTextBox1:用於顯示欲執行SQL敘述。

程式說明

  • 1.SQL保留字於程式設計中,大小寫不拘。
  • 2.雙引號內的空白均不可省略,如上面的" ORDER BY…"的空白均不可省略。
18 2 insert
18-2 INSERT

INSERT可用來增加一筆記錄,其語法如下,範例請看18-4a。

INSERT INTO 資料表(欄位)

VALUES (欄位值)

18 3 update
18-3 UPDATE

UPDATE可用來更正合於條件的記錄,其語法如下,範例請看18-4a。

UPDATE 資料表

SET 欄位=新值

WHERE 條件式

18 4 delete
18-4 DELETE

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

DELETE

FROM 資料表

WHERE 條件式

18 4a
<範例>18-4a

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