SQL語(yǔ)言的組成 一、SQL語(yǔ)言有命令動(dòng)詞、子句、運(yùn)算符和統(tǒng)計(jì)函數(shù)構(gòu)成。這些元素結(jié)合起來(lái)組成語(yǔ)句,用來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行各種操作,包括創(chuàng)建、更新、查詢及一些其他功能。 雖名為結(jié)構(gòu)化查詢語(yǔ)言,實(shí)際上不止如此,SQL的功能分為如下3個(gè)部分: (1) Data Definition Language(DDL),數(shù)據(jù)定義語(yǔ)言 (2) Data Control Language(DCL),數(shù)據(jù)控制語(yǔ)言 ?。?) Data Manipulation Language(DML),數(shù)據(jù)處理語(yǔ)言 這3種語(yǔ)言合起來(lái)組成了完整的SQL,其主要的命令動(dòng)詞如下表所示,通過(guò)這幾個(gè)動(dòng)詞,就可以完成對(duì)數(shù)據(jù)庫(kù)的大部分操作 SQL的基本命令動(dòng)詞
SQL語(yǔ)言分類 | 主要命令動(dòng)詞 | 數(shù)據(jù)定義(DLL) | Create,Drop,Add,Alter | 數(shù)據(jù)處理(DML) | Select,Insert,Update,Delete,Transaction,Execute | 數(shù)據(jù)控制(DCL) | Grant,Revoke | 二、SQL的數(shù)據(jù)定義功能 SQL的數(shù)據(jù)定義功能是通過(guò)DDL部分實(shí)現(xiàn)的,可以完成表、視圖、索引、存儲(chǔ)過(guò)程、用戶和組的建立和撤銷。其基本命令有如下幾個(gè): 1) Create Table,創(chuàng)建新表 2) Create Index,在現(xiàn)有的表上創(chuàng)建新的索引 3) Create Procedure,創(chuàng)建一個(gè)存儲(chǔ)過(guò)程 4) Create View,創(chuàng)建新視圖 5) Create{User| Group} ,創(chuàng)建一個(gè)或更多的新用戶或組 6) Alter Table ,修改用CreateTable創(chuàng)建的表 Drop{Table | Index | Procedure | View | User | Group},撤銷上述用Create 命令建立的相應(yīng)對(duì)象?! 榱嗽赩isual Basic中執(zhí)行SQL語(yǔ)句需要使用Database對(duì)象的Execute方法,參數(shù)寫上SQL語(yǔ)句即可。數(shù)據(jù)控件的 數(shù)據(jù)源(Recordsource)屬性也額可以直接使用SQL的Select語(yǔ)句。下面就用SQL語(yǔ)句建立一個(gè)數(shù)據(jù)表,并且加上索 引(以后介紹中直接寫SQL語(yǔ)句,不再涉及Visual Basic部分) Sub CreateTable() Dim db As Database, Sql As String Set db = CreateDatabase('students.mdb', dbLangChineseSimplified) '創(chuàng)建數(shù)據(jù)庫(kù) Sql = 'create table students(XH integer,XM text(20),XB text(2),BORN text(40),BIRTH datetime);' db.Execute Sql Sql = 'Create unique index XH on students(XH ASC) with primary;' 'ASC是指升序,如果用降序,改為DESC db.Execute Sql '執(zhí)行創(chuàng)建索引的SQL語(yǔ)句 db.Close '關(guān)閉數(shù)據(jù)庫(kù)End Sub 執(zhí)行過(guò)上述Visual Basic程序后,會(huì)建立一個(gè)帶有索引的數(shù)據(jù)表。需要注意的是:SQL不能創(chuàng)建數(shù)據(jù)庫(kù)! 三、SQL的數(shù)據(jù)處理功能 SQL的數(shù)據(jù)處理功能是通過(guò)DML的部分實(shí)現(xiàn)的,可以完成數(shù)據(jù)的查詢、增加、修改、刪除和運(yùn)算等功能。其基本命令如下: a) Select和Select. . .Into 將一組符合條件的記錄檢索出來(lái),從數(shù)據(jù)庫(kù)返回使用或者放入另一個(gè)表。 b) Insert Into 添加一個(gè)或多個(gè)記錄至一個(gè)表 c) Update 創(chuàng)建更新查詢來(lái)改變基于特定準(zhǔn)則的指定表中的字段值,就是修改記錄 d) Delete 刪除符合條件的記錄 e) Execute 用于激活有Create Procedure創(chuàng)建的存儲(chǔ)過(guò)程 下面通過(guò)例子對(duì)SQL的DML使用進(jìn)行說(shuō)明 1) 將一個(gè)記錄插入表中。 此條SQL語(yǔ)句將一個(gè)記錄插入到students表中: Insert Into Students(xh,xm,xb,born,birth) values_(970111,”小張”,”男”,”河北廊坊”,”1980-1-15”); 2) 刪除表中的一個(gè)記錄。 將學(xué)號(hào)為970111的記錄刪除: Delete * from students where xh=970111 3) 更新一個(gè)記錄。 將學(xué)號(hào)為970111的記錄的出生地改為“河北保定”: Update students set born=”河北保定” where xh=970111 4) 找出符合條件的記錄。 從students表中找出出生日期在1980年6月1日以后的記錄: Select * from students where birth>=”1980-6-1” Select 語(yǔ)句是SQL最為常用的一個(gè)語(yǔ)句,有極其強(qiáng)大的數(shù)據(jù)檢索功能,在此列出它的語(yǔ)句格式,因篇幅所限,不做詳細(xì)介紹?! elect[all | distinct [on (expression [,. . .])]] * | expression [ as output_name] [,…] [ into [ temporary | temp] [table] new_table ] [from from_item [, . . .] ] [where condition] [group by expression [, . . . ] ] [ having condition [, . . .] ] [{union | intersect | except [all] } select ] [ order by expression [ asc | desc | using operator] [, . . . ] ] [ for update [ of class_name [, . . . ] ] ] [ limit { count | all } [ { offset | , } start ] ] 再舉例說(shuō)明一下Select的復(fù)雜用法,下表為一個(gè)氣象表,該表記錄了全國(guó)各主要城市每天的氣溫情況,表的名字為weather,表中有很多記錄。 全國(guó)各城市氣象數(shù)據(jù)記錄表 City | Temp_lo | Temp_hi | Prcp | Date | 北京 | -10 | -1 | 0.1 | 2012-8-20 | 北京 | -11 | 1 | 0.15 | 2012-8-21 | . . . | . . . | . . . | . . . | . . . | 天津 | -8 | 0 | 0.05 | 2012-8-20 | 天津 | -9 | 2 | 0.1 | 2012-8-21 | . . . | . . . | . . . | . . . | . . . | 可以用下面的語(yǔ)句找出氣象表中的最高溫度發(fā)生在哪一天哪個(gè)城市 Select city,temp_hi,date From weather Where temp_hi=(select max(temp_hi) From weather); 這樣的語(yǔ)句返回一個(gè)記錄,包括3個(gè)字段,即城市名、最高程度、發(fā)生日期??赡艿慕Y(jié)果如下所示?! ity Temp_hi Date 天津 2 2012-8-21 也可以用下面語(yǔ)句獲取在每個(gè)城市觀察到的最高溫度的最高值 Select city, max(temp_hi) From weather Group By city; 返回的記錄數(shù)和表中的城市數(shù)一樣多,每個(gè)城市一條記錄,每記錄兩個(gè)字段?! 倪@兩個(gè)例子中,可以看出搜QL語(yǔ)言查詢功能的強(qiáng)大,在用對(duì)象墨香編程的時(shí)候,OpenRecordset語(yǔ)句的參數(shù)和其他有關(guān)記錄集生成的語(yǔ)句中,可以直接運(yùn)用SQL的Select語(yǔ)句,這會(huì)給編程帶來(lái)極大的方便?! ∪绻麆偨佑|SQL,直接寫一定會(huì)出現(xiàn)不少錯(cuò)誤,給程序的調(diào)試帶來(lái)麻煩,可以在VisData中直接使用SQL進(jìn)行各種操作,成功后再寫到程序中,每當(dāng)打開(kāi)一個(gè)數(shù)據(jù)庫(kù),VisData就會(huì)出現(xiàn)SQL Statement窗口,直接在其中寫上SQL語(yǔ)句,然后單擊“Execute”命令按鈕即可執(zhí)行。
|