5.1 SQL概述
考點(diǎn)1 概述
1概念 SQL是結(jié)構(gòu)化查詢語(yǔ)言Structured Query Language的縮寫(xiě)。它包括數(shù)據(jù)查詢、數(shù)據(jù)定義、數(shù)據(jù)操縱和數(shù)據(jù)控制4部分。Visual FoxPro在SQL方面支持?jǐn)?shù)據(jù)定義、數(shù)據(jù)查詢和數(shù)據(jù)操縱功能。另外,由于Visual FoxPro自身在安全控制方面的缺陷,所以它沒(méi)有提供數(shù)據(jù)控制功能。 2 SQL語(yǔ)言的特點(diǎn) (1)一種一體化的語(yǔ)言。 (2)一種高度非過(guò)程化的語(yǔ)言。 (3)語(yǔ)言非常簡(jiǎn)潔。 (4)可以直接以命令方式交互使用,也可以以程序方式使用。
5.2 查詢功能
SQL的核心是查詢,基本形式由SELECT-FROM-WHERE查詢塊組成,多個(gè)查詢塊可嵌套執(zhí)行,如表5-1所示。
 表5-1 SQL命令動(dòng)詞
考點(diǎn)2 簡(jiǎn)單查詢
1簡(jiǎn)單查詢 簡(jiǎn)單查詢是由SELECT和FROM短語(yǔ)構(gòu)成的無(wú)條件查詢,或由SELECT,F(xiàn)ROM和WHERE短語(yǔ)構(gòu)成的條件查詢。 2簡(jiǎn)單的連接查詢 連接是關(guān)系的基本操作之一,連接查詢是一種基于多個(gè)關(guān)系的查詢。 3嵌套查詢 嵌套查詢所要求的結(jié)果出自一個(gè)關(guān)系,但關(guān)系的條件卻涉及多個(gè)關(guān)系。其內(nèi)層基本上也是一個(gè)SELECT-FROM-WHERE查詢語(yǔ)句。這種簡(jiǎn)單嵌套查詢,可使用謂詞IN或NOT IN來(lái)判斷在外層的查詢條件中是否包含內(nèi)層查詢的結(jié)果。
考點(diǎn)3 特殊運(yùn)算符號(hào)
1 BETWEEN…AND… 含義:該查詢的條件是在……范圍之內(nèi),相當(dāng)于用AND連接的一個(gè)邏輯表達(dá)式。 2 LIKE 含義:它是一個(gè)字符串匹配運(yùn)算符,與之搭配使用的通配符包括“*”和“?”。
考點(diǎn)4 排序
使用SQL SELECT可以將查詢結(jié)果進(jìn)行排序,排序的短語(yǔ)是ORDER BY。 格式:ORDER BY Order_Item[ASCIDESC][,Order_Item[ASC|DESC]…] 說(shuō)明:可以按升序(ASC)或降序(DESC)排序,允許按一列或多列排序。
考點(diǎn)5 計(jì)算查詢
1簡(jiǎn)單的計(jì)算查詢 SQL不僅具有一般的檢索能力,而且還有計(jì)算方式的檢索,用于計(jì)算檢索的函數(shù)有:COUNT(計(jì)數(shù))、SUM(求和)、AVG(計(jì)算平均值)、MAX(求最大值)及MIN(求最小值)。 2分組與計(jì)算查詢 在SQL SELECT中可以利用GROUP BY子句進(jìn)行分組計(jì)算查詢。 格式:GROUP BY GroupColumn[,GroupColumn…][HAVING FilterCondition] 說(shuō)明:可以按一列或多列分組,還可以用HAVING子句進(jìn)一步限定分組的條件。它必須跟在GROUP BY子句之后,不可單獨(dú)使用,與WHERE子句并不矛盾。
考點(diǎn)6 別名和自連接查詢
(1)SQL語(yǔ)句允許在二OM短語(yǔ)中為關(guān)系定義別名,格式為:一 <關(guān)系名><別名> (2) SQL不僅可以對(duì)多個(gè)關(guān)系進(jìn)行連接操作,也可以將同一關(guān)系與其自身進(jìn)行連接,這種連接就稱為自連接。在關(guān)系的自連接操作中,別名是必不可少的。
考點(diǎn)7 使用量詞和謂詞的查詢
與嵌套查詢或子查詢有關(guān)的運(yùn)算符,除了IN和NOT IN運(yùn)算符外,還有兩類與子查詢有關(guān)的運(yùn)算符,它們有以下兩種格式。 (1)<表達(dá)式><比較運(yùn)算符>[ANY I ALL | SOME](子查詢) (2)[NOT]EXISTS(子查詢) EXISTS是謂詞,EXISTS或NOT EXISTS是用來(lái)檢查在子查詢中是否有結(jié)果返回,即存在元組或不存在元組。其本身并沒(méi)有進(jìn)行任何運(yùn)算或比較,只用來(lái)返回子查詢結(jié)果。
考點(diǎn)8 超鏈接查詢
(1)在新的SQL標(biāo)準(zhǔn)中支持兩個(gè)新的關(guān)系連接運(yùn)算符,這兩個(gè)新的連接運(yùn)算是左連接(*=)和右連接=*):首先保證一個(gè)表中滿足條件的元組都在結(jié)果表中,然后將滿足連接條件的元組與另一個(gè)表的元組進(jìn)行連接,不滿足連接條件的則應(yīng)將來(lái)自另一個(gè)表的屬性值置為空值。在一般SQL中超鏈接運(yùn)算符是“*=”(左連接)和“=*”(右連接)。 (2)在Visual FoxPro中不支持超鏈接運(yùn)算符“*=”和“=*”,Visual FoxPro有專門(mén)的連接運(yùn)算。下面拼出SQL中超鏈接的部分語(yǔ)句格式: SELECT… FROM Table INNER|LEFT|RIGHT|FULL JOIN Table ON JoinCondition WHERE…
考點(diǎn)9 Visual FoxPro中SQL SELECT的幾個(gè)特殊選項(xiàng)
(l)顯示部分結(jié)果,格式為: TOP nExpr[PERCENT] (2)將查詢結(jié)果存放到數(shù)組中,格式為: INTO ARRAY ArrayName (3)將查詢結(jié)果存放到臨時(shí)文件中,格式為: INTO CURSOR CursorName (4)將查詢結(jié)果存放到永久表中,格式為: INTO DBF|TABLE TableName (5)將查詢結(jié)果存放到文本文件中,格式為: TO FILE FileName[ADDITIVE] (6)將查詢結(jié)果直接輸出到打印機(jī),格式為: TO PRINTER[PROMPT]
5.3 操作功能
考點(diǎn)10 插入
Visual FoxPro支持兩種SQL插入命令的格式,一種是標(biāo)準(zhǔn)格式,另一種是特殊格式。 1標(biāo)準(zhǔn)格式 INSERT INTO dbf name[(frame 1[,fname2,…])] VALUES(eExpressionl[,eExpression2,…]) 2特殊格式 INSERT INTO dbf _name FROM ARRAY ArrayName|FROM MEMVAR
考點(diǎn)11 更新
SQL的數(shù)據(jù)更新命令格式如下: UPDATE TableName SET Column_Namel=eEpressionl[,Column_Name2=eExpression2…] WHERE Condition 說(shuō)明:利用WHERE字句指定條件,以更新滿足條件的一些記錄的字段值,并巨一次可更新多個(gè)字段;如果不使用WHERE子句,則更新全部記錄。
考點(diǎn)12 刪除
SQL從表中刪除數(shù)據(jù)的命令格式如下: DELETE FROM TableName[WHERE Condition] 說(shuō)明:FROM指定從哪個(gè)表中刪除記錄,WHERE指定被刪除的記錄所滿足的條件,如果不使用WHERE子句,則刪除該表中的全部記錄。
小提示: 當(dāng)一個(gè)表定義一個(gè)主索引或候選索引后,由于相應(yīng)的字段具有關(guān)鍵字的特性,即不能為空,所以只能用此命令插入記錄、)APPEND和INSERT都是插入一條空白記錄再輸入各字段的值,故不能用它們來(lái)插入記錄。
5.4 定義功能
考點(diǎn)13 表的定義
利用SQL命令建立的數(shù)據(jù)表同樣可以完成在表設(shè)計(jì)器中設(shè)計(jì)表的所有功能。 格式:CREATE TABLE I DBF TableNamel[NAME LongTableName][FREE] (FieldNarnel FieldType[(nFieldWidth[,nPrecision])][NULL |NOT NULL] [CHECK IExpressionl [ERROR cMessageTextl]] [DEFAULT eExpressionl] [PRIMARY KEY I UNIQUE] [PEFERENCES TableName2[AG TagName1]] [NOCPTRANS] [,F(xiàn)ieldName2…] [,PRIMARY KEY eEpression2 TAG TagName2|, UNIQUE eExpression3 TAG TagName3] [,F(xiàn)OREIGN KEY eExpression4 TagName4[NODUP] REFERENCES TableName3 [TAG TagName5]] [,CHECK lExpression2[ERROR cMessageText2]]) |FROM ARRAY ArravNasne 說(shuō)明:此命令除了建立表的基本功能外,還包括滿足實(shí)體完整性的主關(guān)鍵字(主索引)PRIMARY KEY、定義域完整性的CHECK約束及出錯(cuò)提示信息ERROR、定義默認(rèn)值DEFAULT等,另外還有描述表之間聯(lián)系的FOREIGN KEY和REFERENCES等。
考點(diǎn)14 表的刪除
利用SQL命令刪除表,可直接使用語(yǔ)句,格式為: DROP TABLE Table_name 說(shuō)明:如果刪除的是自由表,則應(yīng)該將當(dāng)前打開(kāi)的數(shù)據(jù)庫(kù)先關(guān)閉,才能進(jìn)行刪除。如果刪除數(shù)據(jù)庫(kù)表,則要先打開(kāi)數(shù)據(jù)庫(kù),在數(shù)據(jù)庫(kù)中進(jìn)行操作二否則,即使刪除了數(shù)據(jù)庫(kù)表,但記錄在數(shù)據(jù)庫(kù)中的信息并沒(méi)有被刪除,此后會(huì)出現(xiàn)錯(cuò)誤提示。
考點(diǎn)15 表結(jié)構(gòu)的修改
修改表結(jié)構(gòu)的命令是ALTER TABLE,該命令有3種格式。 (1)ALTER TABLE TableNamel ADD| ALTER[COLUMN]FieldNamel FieldTvpe[(nFieldWidth[,nPrecision])][NULL |NOT NULL] [CHECK lExpressionl[ERROR cMessageTextl ]][DEFAULT eExpressionl] [PRIMARY KEY |UNIQUE] [REFERENCES TableName2[TAG TagNamel〕] (2)ALTER TABLE TableNamel ALTER[COLUMN]FieldName2[NULL|NOT NULL] [SET EFAULTeExpression2][SET CHECK lExpression2[ERROR cMessageText2] [DROP DEFAULT][DROP CHECK] (3)ALTER TABLE TableName1[DROP [COLUMN]FieldName3] [SET CHECK lExpression3[ERROR cMessageText3] [DROP CHECK] [ADD PRIMARY KEY eExpression3 TAG TagName2[FOR lExpression4]] [DROP PRIMARY KEY〕 [ADD UNIQUE eExpression4[TAG TagName3[FOR lExpression5]]] [DROP UNIQUE TAG TagName4] [ADD FOREIGN KEY[eExpression5] TAG TagName4[FOR lExpression6] REFERENCES TableName2[TAG TagName5]] [DROP FOREIGN KEY TAG TagName6[SAVE]] [RENAME COLUMN FieldName4 TO FieldName5]
考點(diǎn)16 視圖的定義
1視圖的概念及其定義 (l)視圖的概念。 Visual FoxPro中視圖是一個(gè)虛擬的表,可以是本地的、遠(yuǎn)程的或帶參數(shù)的。 (2)視圖的定義,格式為: CREATE VIEW view name[(column_name[,column_name]…)] AS select_statement 2從單個(gè)表派生出來(lái)的視圖 視圖一經(jīng)定義,就可以和基本表一樣進(jìn)行各種查詢,也可以進(jìn)行一些修改操作。對(duì)于最終用戶來(lái)說(shuō),有時(shí)并不需要知道操作的是基本表還是視圖。 3從多個(gè)表派生出來(lái)的視圖 視圖一方面可以限定對(duì)數(shù)據(jù)的訪問(wèn),另一方面又可以簡(jiǎn)化對(duì)數(shù)據(jù)的訪問(wèn)。 4視圖的刪除 視圖由于是從表派生出來(lái)的,所以不存在修改結(jié)構(gòu)的問(wèn)題,但是視圖可以刪除。 格式:DROP VIEW<視圖名> 5關(guān)于視圖的說(shuō)明 在關(guān)系數(shù)據(jù)庫(kù)中,視圖始終不真正含有數(shù)據(jù),它總是原有表的一個(gè)窗口。所以,雖然視圖可以像表一樣進(jìn)行各種查詢,但是插入、更新和刪除操作在視圖上卻有一定限制。在一般情況下,當(dāng)一個(gè)視圖是由單個(gè)表導(dǎo)出時(shí)可以進(jìn)行插入和更新操作,但不能進(jìn)行刪除操作;當(dāng)視圖是從多個(gè)表導(dǎo)出時(shí),插入、更新和刪除操作都不允許進(jìn)行。這種限制是很有必要的,它可以避免一些潛在問(wèn)題的發(fā)生。 |