[摘要] SQL語(yǔ)言是關(guān)系數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)語(yǔ)言,所有的關(guān)系數(shù)據(jù)庫(kù)都要遵循這一標(biāo)準(zhǔn),但是學(xué)生在學(xué)習(xí)過(guò)程中總會(huì)感到困惑,不知道如何應(yīng)用這門(mén)語(yǔ)言,掌握不住學(xué)習(xí)要點(diǎn),本文結(jié)合作者多年的教學(xué)經(jīng)驗(yàn),介紹了在DB2中關(guān)于SQL語(yǔ)言的教學(xué)方法和觀點(diǎn)。
[關(guān)鍵詞] 關(guān)系數(shù)據(jù)庫(kù) SQL語(yǔ)言 DB2
Database2(DB2) Universal Database(UDB) 是IBM公司開(kāi)發(fā)的一個(gè)成熟的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)。SQL是結(jié)構(gòu)化查詢語(yǔ)言Structure Query Language的英文縮寫(xiě),它是一種最常用的關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言,所有的關(guān)系數(shù)據(jù)庫(kù)都要遵循這個(gè)標(biāo)準(zhǔn),比如:Visual Forpro、Sql Server、Oracle、DB2、Mysql等關(guān)系數(shù)據(jù)庫(kù),盡管SQL是標(biāo)準(zhǔn)語(yǔ)言,但是每個(gè)具體的數(shù)據(jù)庫(kù)產(chǎn)品在遵循這個(gè)標(biāo)準(zhǔn)的同時(shí)又增加了自己產(chǎn)品的特點(diǎn)。
一、SQL語(yǔ)言的特點(diǎn)
SQL語(yǔ)言是關(guān)系數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)語(yǔ)言,之所以成為國(guó)際標(biāo)準(zhǔn),是因?yàn)樗且粋€(gè)綜合的、功能極強(qiáng)同時(shí)又簡(jiǎn)潔易學(xué)的語(yǔ)言。SQL語(yǔ)言集數(shù)據(jù)查詢、數(shù)據(jù)操縱、數(shù)據(jù)定義和數(shù)據(jù)控制四大功能于一體,但在DB2數(shù)據(jù)庫(kù)中卻只有10個(gè)英文單詞完成核心功能的一門(mén)關(guān)系數(shù)據(jù)庫(kù)通用的語(yǔ)言。
二、SQL語(yǔ)言的使用
DB2中關(guān)于SQL語(yǔ)言的10個(gè)英文單詞見(jiàn)表所示。
數(shù)據(jù)定義和數(shù)據(jù)控制語(yǔ)句經(jīng)常被數(shù)據(jù)庫(kù)管理員使用,作為學(xué)生或者用戶來(lái)講,常用的還是數(shù)據(jù)查詢和數(shù)據(jù)操縱。其中數(shù)據(jù)庫(kù)查詢也是數(shù)據(jù)庫(kù)的核心操作,SELECT語(yǔ)句具有靈活的使用方式和豐富的功能,完整的格式比較復(fù)雜,但常用的基本結(jié)構(gòu)如下:
SELECT [DISTINCT]目標(biāo)列表達(dá)式
FROM 表名或視圖名
[WHERE 條件表達(dá)式]
[GROUP BY 列名
[HAVING 分組條件]]
[ORDER BY 列名 ASC|DESC]
針對(duì)數(shù)據(jù)查詢問(wèn)題,分以下步驟進(jìn)行:⑴首先要找出查詢的來(lái)源表或視圖(寫(xiě)FROM后邊),如果來(lái)自于多張表或視圖,則多張表之間必然存在參照關(guān)系,即N張表存在N-1個(gè)參照關(guān)系,參照關(guān)系寫(xiě)在WHERE后面;⑵其次分析查詢條件(寫(xiě)WHERE后面,通常連接條件在前,查詢條件在后,之間用邏輯運(yùn)算符AND連接);⑶然后分析是否有函數(shù)等,如果有函數(shù)并且具有明顯的分組特征,則選擇GROUP BY短語(yǔ),如果這些小組的結(jié)果并不都想要,則選擇HAVING短語(yǔ);⑷然后再分析是否需要對(duì)查詢結(jié)果進(jìn)行排序,需要排序選擇order by短語(yǔ),ASC表示升序(系統(tǒng)默認(rèn)方式),DESC表示降序;⑸最后確定查詢結(jié)果,并分析查詢結(jié)果中是否存在重復(fù)的行數(shù)據(jù),如果存在,則在SELECT后面選擇DISTINCT短語(yǔ),目的在于消除重復(fù)的行。下面我們以學(xué)生-課程數(shù)據(jù)庫(kù)為例說(shuō)明SELECT語(yǔ)句的使用方法。學(xué)生-課程數(shù)據(jù)庫(kù)中包含三個(gè)表,表中下劃線約定為各表的主鍵。
學(xué)生表(學(xué)號(hào),姓名,性別,年齡,所在系)
課程表(課程號(hào),課程名,學(xué)分,先修課程號(hào))
成績(jī)表(學(xué)號(hào),課程號(hào),成績(jī))
例1:查詢計(jì)算機(jī)系選修兩門(mén)課程以上的學(xué)生姓名,課程名及成績(jī),結(jié)果按照姓名降序排序。
解:SELECT 姓名,課程名,成績(jī)-----------⑸
FROM 學(xué)生表,成績(jī)表,課程表---------⑴
WHERE 學(xué)生表.學(xué)號(hào)=成績(jī)表.學(xué)號(hào) AND 成績(jī)表.課程號(hào)=課程表.課程號(hào) AND 所在系=’計(jì)算機(jī)’-----------⑵
GROUP BY 學(xué)號(hào)---------------------⑶
HAVING COUNT(*)>2
ORDER BY 姓名 DESC-----------------⑷
數(shù)據(jù)操縱語(yǔ)句主要實(shí)現(xiàn)對(duì)數(shù)據(jù)的插入如insert、修改如update、刪除如delete,下面舉例說(shuō)明這三種語(yǔ)句的使用方法。
Insert語(yǔ)句結(jié)構(gòu)1:insert into 表名 values(值1,值2,…),此結(jié)構(gòu)完成對(duì)表中所有字段進(jìn)行賦值插入;
Insert語(yǔ)句結(jié)構(gòu)2:insert into 表名(列1,列2,…) values(值1,值2,…),此結(jié)構(gòu)完成對(duì)表中指定的字段進(jìn)行賦值插入;
例2:向?qū)W生表中插入一條新記錄,學(xué)號(hào)001,姓名張曉剛,性別男,年齡20,所在系CS。
解:學(xué)生表中5個(gè)字段全部賦值,因此采用結(jié)構(gòu)1,表示為insert into 學(xué)生表 values(‘001’,’張曉剛’,’男’,20,’CS’),這里要注意,字符型常量要采用單引號(hào)的定界符。
Update語(yǔ)句結(jié)構(gòu):update 表名 set 列名=新值 [where 列名=某值]
例3:將學(xué)生表中學(xué)號(hào)為001的學(xué)生年齡改為21。
解:這里給出更新條件,所以選擇where子句,表示為update 學(xué)生表 set 年齡=21 where 學(xué)號(hào)=‘001’。
Delete語(yǔ)句結(jié)構(gòu):delete from 表名 [where 列名=某值]
例4:將成績(jī)表中成績(jī)小于60分的記錄刪除。
解:這里給出刪除條件,所以選擇where子句,表示為delete from 成績(jī)表 where 成績(jī)<60,這里要注意,刪除學(xué)生表(主表)時(shí)要受刪除規(guī)則的約束。
三、結(jié)束語(yǔ)
SQL語(yǔ)言既然作為一門(mén)語(yǔ)言,因此就不能獨(dú)立于實(shí)踐,所以要求我們教師在講授的過(guò)程中一定要結(jié)合具體的某個(gè)數(shù)據(jù)庫(kù)軟件演示操作過(guò)程,安排上機(jī)環(huán)節(jié)讓學(xué)生自己實(shí)踐一下,作者相信這樣的學(xué)習(xí)效果會(huì)更好。
參考文獻(xiàn):
[1]段竹,吳鏑.DB2 UDB數(shù)據(jù)庫(kù)實(shí)用教程[M].北京.清華大學(xué)出版社.2010年
[2]徐怡. 數(shù)據(jù)庫(kù)課程項(xiàng)目化教學(xué)改革實(shí)踐及發(fā)展思考[J].《福建電腦》,2009(9):211-21