結(jié)構(gòu)化查詢語(yǔ)言SQL和報(bào)表.ppt_第1頁(yè)
結(jié)構(gòu)化查詢語(yǔ)言SQL和報(bào)表.ppt_第2頁(yè)
結(jié)構(gòu)化查詢語(yǔ)言SQL和報(bào)表.ppt_第3頁(yè)
結(jié)構(gòu)化查詢語(yǔ)言SQL和報(bào)表.ppt_第4頁(yè)
結(jié)構(gòu)化查詢語(yǔ)言SQL和報(bào)表.ppt_第5頁(yè)
已閱讀5頁(yè),還剩110頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

2019/6/30,1,第4章 結(jié)構(gòu)化查詢語(yǔ)言SQL和報(bào)表,SQL語(yǔ)言的基本概述 數(shù)據(jù)定義語(yǔ)言DDL 數(shù)據(jù)操縱語(yǔ)言DML 查詢和SELECT 命令 報(bào)表和標(biāo)簽 小結(jié),2019/6/30,2,4.1 SQL語(yǔ)言的基本概述,結(jié)構(gòu)化查詢語(yǔ)言(Structured Query Language,簡(jiǎn)稱SQL) SQL是用于對(duì)存放在計(jì)算機(jī)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行組織、管理和檢索的工具,是一種用于和數(shù)據(jù)庫(kù)進(jìn)行交互通信的計(jì)算機(jī)語(yǔ)言。SQL是1974年由Boyce和Chamberlin提出的,并在IBM公司研制的System R上首次實(shí)現(xiàn)了這種語(yǔ)言,由于它的功能豐富,使用方式靈活和語(yǔ)言簡(jiǎn)潔易學(xué)等突出特點(diǎn),很受計(jì)算機(jī)界的歡迎?,F(xiàn)在SQL語(yǔ)言已成為關(guān)系型數(shù)據(jù)庫(kù)操縱語(yǔ)言的國(guó)際標(biāo)準(zhǔn)。 VFP 提供了SQL 語(yǔ)言支持,2019/6/30,3,4.1.1 SQL語(yǔ)言的基本概念,SQL語(yǔ)言支持關(guān)系型數(shù)據(jù)庫(kù)的三級(jí)模式結(jié)構(gòu),其中外模式對(duì)應(yīng)于視圖和部分基本表,模式對(duì)應(yīng)于基本表,內(nèi)模式對(duì)應(yīng)于存儲(chǔ)文件。 在SQL語(yǔ)言中,一個(gè)關(guān)系就對(duì)應(yīng)于一個(gè)表,基本表本身是獨(dú)立存在的表,對(duì)應(yīng)一個(gè)存儲(chǔ)文件;存儲(chǔ)文件的邏輯結(jié)構(gòu)組成了關(guān)系型數(shù)據(jù)庫(kù)的內(nèi)模式。 視圖是從基本表或其他視圖導(dǎo)出的表,視圖只是一個(gè)虛表。 在用戶看來(lái),視圖和基本表都是關(guān)系,而存儲(chǔ)文件對(duì)用戶是透明的。,2019/6/30,4,4.1.2 SQL的基本功能,SQL語(yǔ)言由3部分組成: 數(shù)據(jù)定義語(yǔ)言DDL(Date Definition Language)。 數(shù)據(jù)操縱語(yǔ)言DML(Date Manipulation Language)。 數(shù)據(jù)控制語(yǔ)言DCL(Date Control Language)。 其主要命令如表4-1所示。,其中,數(shù)據(jù)定義語(yǔ)言DDL提供了完整的定義數(shù)據(jù)庫(kù)所必需的語(yǔ)言工具,用來(lái) 創(chuàng)建、修改、刪除數(shù)據(jù)庫(kù)對(duì)象;數(shù)據(jù)操縱語(yǔ)言DML用于查詢或者修改數(shù)據(jù); 數(shù)據(jù)控制語(yǔ)言DCL用來(lái)管理用戶的訪問(wèn)權(quán)限,由于VFP 沒(méi)有權(quán)限管理功能, 所以不支持DCL命令。,2019/6/30,5,4.2 數(shù)據(jù)定義語(yǔ)言DDL,數(shù)據(jù)定義語(yǔ)言是對(duì)關(guān)系模式的一級(jí)定義,用來(lái)定義被存放數(shù)據(jù)的結(jié)構(gòu)和組織,以及數(shù)據(jù)項(xiàng)之間的關(guān)系。SQL數(shù)據(jù)定義語(yǔ)言可以用來(lái)定義數(shù)據(jù)表、視圖和索引。 Create語(yǔ)句:用于定義和生成數(shù)據(jù)對(duì)象,比如創(chuàng)建表、視圖和索引。 Drop語(yǔ)句:用于刪除一個(gè)現(xiàn)有的數(shù)據(jù)對(duì)象,比如視圖、表、索引。 Alter語(yǔ)句:用于改變一個(gè)數(shù)據(jù)庫(kù)對(duì)象。比如對(duì)一個(gè)表的字段進(jìn)行刪除、添加和修改,或者修改表的結(jié)構(gòu)。,2019/6/30,6,4.2.1 用Create語(yǔ)句創(chuàng)建基本表,命令格式: CREATE TABLE 表名 FREE ( (寬度, 小數(shù)) NULLNOT NULL CHECKERROR DEFAULT PRIMARY KEY /UNIQUE , ) 命令功能:創(chuàng)建數(shù)據(jù)表的結(jié)構(gòu)。,2019/6/30,7,4.2.1 用Create語(yǔ)句創(chuàng)建基本表(續(xù)),命令說(shuō)明: CREATE TABLE表名:指定創(chuàng)建表文件名。 FREE:在數(shù)據(jù)庫(kù)打開(kāi)的情況下創(chuàng)建的是自由表。默認(rèn)在數(shù)據(jù)庫(kù)未打開(kāi)時(shí)創(chuàng)建的是自由表,在數(shù)據(jù)庫(kù)打開(kāi)時(shí)創(chuàng)建的是數(shù)據(jù)庫(kù)表。 CHECK:為字段值指定約束條件; ERROR:用來(lái)指定當(dāng)不滿足約束條件時(shí)顯示的出錯(cuò)信息。 DFAULT:指定默認(rèn)的字段值。 PRIMARY KEY:指定當(dāng)前字段為主索引關(guān)鍵字;UNIQUE:指定當(dāng)前字段為候選索引關(guān)鍵字。 NULL/NOT NULL:表示該字段是否可以為空。,2019/6/30,8,4.2.1 用Create語(yǔ)句創(chuàng)建基本表(續(xù)),【例4.1】在圖書(shū)館管理系統(tǒng)中創(chuàng)建dzzl(讀者種類)表,包含zlbh(種類編號(hào))、zlmc(種類名稱)、jssl(借書(shū)數(shù)量)、jsqx(借書(shū)期限)、bz(備注)幾個(gè)字段。 OPEN DATABASE 圖書(shū)館管理 CTEATE TABLE dzzl(zlbh c(10) not null, zlmc c(10) not null, jssl c(8), jsqx c(8), Bz c(20),若在命令窗口執(zhí)行 MODIFY STRUCTURE 命令,就可以在彈出的 對(duì)話框中見(jiàn)到dzzl表結(jié) 構(gòu),如圖4-2所示。,圖4-2 創(chuàng)建的dzzl表結(jié)構(gòu),2019/6/30,9,4.2.1 用Create語(yǔ)句創(chuàng)建基本表(續(xù)),【例4.2】創(chuàng)建一個(gè)名為“通訊錄”的自由表,包含姓名、工作單位、電話號(hào)碼、家庭住址4個(gè)字段,所得的表預(yù)覽如圖4-3所示。 CREATE TABLE 通訊錄 FREE(姓名C(10),工作單位C(20), 電話號(hào)碼C(12), 家庭住址C(20) BROWSE 由于沒(méi)有向表中添加任何記錄,所以在預(yù)覽時(shí)看不見(jiàn)任何的記錄。,圖4-3 創(chuàng)建的通訊錄表,2019/6/30,10,4.2.1 用Create語(yǔ)句創(chuàng)建基本表(續(xù)),【例4.3】創(chuàng)建一個(gè)“圖書(shū)訂單”的數(shù)據(jù)庫(kù),并在此數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)“圖書(shū)”表,圖書(shū)表含有訂單號(hào)、圖書(shū)編號(hào)、書(shū)名、單價(jià)、數(shù)量等字段。 CREATE DATEBASE 圖書(shū)訂單 CREATE TABLE 圖書(shū)( 訂單號(hào) C(10); DEFAULT “10001“, 圖書(shū)編號(hào) C(10) PRIMARY KEY,; 書(shū)名C(10), 單價(jià) N(8, 2); 數(shù)量 N(6) CHECK 數(shù)量=100 AND 數(shù)量=1000; ERROR “數(shù)量范圍在100和1000之間“),圖4-4 圖書(shū)表的索引圖,預(yù)覽此表的設(shè)計(jì)器可 以看見(jiàn)“圖書(shū)編號(hào)”已 經(jīng)被設(shè)為主索引,如 圖4-4所示。,2019/6/30,11,4.2.1 用Create語(yǔ)句創(chuàng)建基本表(續(xù)),【例4.4】在圖書(shū)訂單數(shù)據(jù)庫(kù)中建立一個(gè)新表“訂單”表,含有訂單編號(hào)、圖書(shū)編號(hào)、客戶編號(hào)、訂貨日期、發(fā)貨日期幾個(gè)字段。 OPEN DATABASE 圖書(shū)訂單 CREATE TABLE 訂單( 訂單編號(hào) C(10) PRIMARY KEY,; 客戶編號(hào) C(10), 訂貨日期 D, 發(fā)貨日期D; 圖書(shū)編號(hào)C(10), FOREIGN KEY 圖書(shū)編號(hào); TAG 圖書(shū)編號(hào) REFERENCES 圖書(shū)),圖4-5 圖書(shū)表和訂單表之間的關(guān)系,在命令窗口中輸入 “MODIFY DATABASE 訂數(shù)訂單” 命令,可在彈出的“數(shù)據(jù)庫(kù)設(shè)計(jì)器” 窗口中見(jiàn)到圖書(shū)表和訂單表之間已 建立的關(guān)系,如圖4-5所示。,2019/6/30,12,4.2.2 用Alter修改基本表,命令格式1: ALTER TABLE ADD/ALTERCOLUMN (字段寬度,小數(shù)位數(shù)) NULLNOT NULL CHECKERROR DEFAULT PRIMARY KEY/UNIQUE REFERENCESTAG 命令功能:修改表中原有的字段,或者在表中增加新的字段。,2019/6/30,13,4.2.2 用Alter修改基本表(續(xù)),命令說(shuō)明: ADD COLUMN(字段寬度,小數(shù)位數(shù)):增加新字段,并指定新增字段的名稱、類型、字段寬度及小數(shù)位數(shù)。 NULLNOT NULL:指定新字段是否接受空值。 ALTER COLUMN (字段寬度,小數(shù)位數(shù)):修改原有字段,并指定修改后的字段名稱、類型、字段寬度及小數(shù)位數(shù)。 其他的參數(shù)含義同 CREATE TABLE。,2019/6/30,14,4.2.2 用Alter修改基本表(續(xù)),【例4.5】修改在例4.2中創(chuàng)建的通訊錄表,增加一個(gè)“性別”字段,SQL 命令如下: ALTER TABLE 通訊錄 ADD COLUMN 性別 C(10) 再把表中字段“家庭住址”修改為“工作地址”,SQL命令如下: ALTER TABLE 通訊錄 RENAME COLUMN 家庭住址 TO 工作地址 預(yù)覽修改后的表如圖4-6所示,與圖4-3對(duì)比就可以發(fā)現(xiàn)多出了一個(gè)字段“性別”,字段“家庭住址”改為了“工作地址”。,圖4-6 修改后的通訊錄表,2019/6/30,15,4.2.2 用Alter修改基本表(續(xù)),【例4.6】修改例4.3中創(chuàng)建的圖書(shū)表,將“書(shū)名”字段的寬度改為20且不準(zhǔn)為空值。SQL命令如下: OPEN DATABASE 圖書(shū)訂單 ALTER TABLE 圖書(shū) ALTER 書(shū)名 C(20) NOT NULL 命令格式2: ALTER TABLE ALTER COLUMN NULLNOT NULL SET CHECKERROR SET DEFAULT DROP CHECK DROP DEFAULT,2019/6/30,16,4.2.2 用Alter修改基本表(續(xù)),命令功能:刪除或者設(shè)置字段的默認(rèn)值或約束條件。 命令說(shuō)明: SET CHECKERROR:為字段設(shè)置約束條件。 SET DEFAULT:設(shè)置默認(rèn)值。 DROP DEFAULT:刪除默認(rèn)值。 DROP CHECK:刪除約束條件。,2019/6/30,17,4.2.2 用Alter修改基本表(續(xù)),【例4.7】在例4.3創(chuàng)建的圖書(shū)表中,為“圖書(shū)編號(hào)”字段設(shè)置一個(gè)默認(rèn)值200601并刪除數(shù)量的約束條件,SQL命令如下: ALTER TABLE 圖書(shū) ALTER 圖書(shū)編號(hào) SET DEFAULT 200601 ALTER TABLE 圖書(shū) ALTER 數(shù)量 DROP CHECK,2019/6/30,18,4.2.2 用Alter修改基本表(續(xù)),命令格式3: ALTER TABLE DROP COLUMN ADD PRIMARY KEY TAG DROP PRIMARY KEY ADD UNIQUE TAG DROP UNIQUE TAG SET CHECK ERROR DROP CHECK ADD FOREIGN KEYTAG REFERENCESTAG DROP FOREIGN KEY TAG SAVE RENAME COLUMN TO,2019/6/30,19,4.2.2 用Alter修改基本表(續(xù)),命令功能:刪除表中的字段、設(shè)置或刪除表的主索引、候選索引、對(duì)字段重新命名或者刪除指定的字段的約束條件。 命令說(shuō)明: DROP COLUMN:刪除指定的字段。 ADD PRIMARY KEY TAG:建立主索引。 DROP PRIMARY KEY:刪除主索引。 ADD UNIQUE TAG :建立候選索引。 DROP UNIQUE TAG:刪除候選索引。 ADD FOREIGN KEYTAG:建立外索引。 REFERENCESTAG:指定建立關(guān)聯(lián)的父表。 DROP FOREIGN KEY TAG SAVE:刪除外索引。 RENAME COLUMN TO:對(duì)字段重新命名。,2019/6/30,20,4.2.2 用Alter修改基本表(續(xù)),【例4.8】在例4.3創(chuàng)建的圖書(shū)表中,為“書(shū)名”創(chuàng)建一個(gè)候選索引,并且刪除“數(shù)量”字段,如圖4-7所示。SQL語(yǔ)句如下: ALTER TABLE 圖書(shū) ADD UNIQUE 書(shū)名; ALTER TABLE 圖書(shū) DROP COLUMN 數(shù)量,圖4-7 例4.8圖,在圖4-7中,字段“數(shù)量”被刪除, 并創(chuàng)建候選索引“書(shū)名”。,2019/6/30,21,4.2.2 用Alter修改基本表(續(xù)),【例4.9】在第1章創(chuàng)建的“圖書(shū)管理系統(tǒng)”的dzzl中,為jssl創(chuàng)建一個(gè)默認(rèn)值15,當(dāng)輸入有錯(cuò)誤時(shí)就會(huì)顯示“值為15”,刪除表中的候選索引。SQL語(yǔ)句如下: ALETER TABLE dzzl ALTER jssl SET DEFAULT 15; ERROR“值為15”; ALETER TABLE dzzl DROP UNIQUE TAG zlbh,2019/6/30,22,4.2.3 用DROP 命令刪除一個(gè)表,隨著數(shù)據(jù)庫(kù)設(shè)計(jì)的變化,數(shù)據(jù)庫(kù)的結(jié)構(gòu)也在不斷的變化,新建的表就會(huì)不斷地代替舊表,這時(shí)某些舊表就不再需要了,可以用DROP TABLE 命令刪除它。 命令格式: DROP TABLE 命令功能:刪除一個(gè)表,包括在這個(gè)表上建立的索引。 命令說(shuō)明:指定被刪除的表。 【例4.10】刪除在例4.2中創(chuàng)建的通訊錄表,SQL 命令如下: DROP TABLE 通訊錄,2019/6/30,23,4.3 數(shù)據(jù)操縱語(yǔ)言DML,數(shù)據(jù)操縱實(shí)際上就是管理數(shù)據(jù),這也是創(chuàng)建表的基本目的,主要是對(duì)關(guān)系中的具體數(shù)據(jù)進(jìn)行查詢、更新、刪除和插入,但不能夠改變數(shù)據(jù)的結(jié)構(gòu)。 DML命令如表4-2所示。,表4-2 DML的命令及功能,2019/6/30,24,4.3.1 INSERT 命令,用CREATE TABLE 命令創(chuàng)建一個(gè)表后,創(chuàng)建的表中沒(méi)有具體的數(shù)據(jù),可以用INSERT命令向表中插入數(shù)據(jù)。 命令格式: INSERT INTO 表名 (列名1, 列名2, )VALUES( , ,) 命令說(shuō)明: INTO 表名:指定接受新數(shù)據(jù)的目標(biāo)表。 VALUES:指明增加記錄的字段值。 向表中添加的數(shù)據(jù)必須與指定字段名的類型相匹配。 字符串要用單引號(hào)或者雙引號(hào)括起來(lái),日期型可用CTOD函數(shù)處理或者直接引用。,2019/6/30,25,4.3.1 INSERT 命令(續(xù)),【例4.11】在例4.4創(chuàng)建的訂單表中插入一個(gè)新的記錄: 訂單編號(hào):200601 讀者編號(hào):10001 訂貨日期:2006-02-1 發(fā)貨日期:2006-02-10 圖書(shū)編號(hào):100012 使用INSERT 語(yǔ)句把該記錄插入到訂單表中,SQL語(yǔ)句如下: INSERT INTO 訂單(訂單編號(hào), 讀者編號(hào), 訂貨日期, 發(fā)貨日期, 圖書(shū)編號(hào)); VALUES (“200601“, “10001“, CTOD(“02-1-06“), CTOD(“02-10-06“),“100012“),2019/6/30,26,4.3.2 UPDATE命令,UPDATE語(yǔ)句用來(lái)更新表中的記錄。 命令格式: UPDATE SET =,= WHERE 命令說(shuō)明: UPDATE:指明要修改的記錄的表的名稱。 SET:指明更新的字段名和字段值。 WHERE:限定要修改的行,如果沒(méi)有WHERE子句,該字段下的所有字段值都將被新值替換。,2019/6/30,27,4.3.2 UPDATE命令(續(xù)),【例4.12】把第1章中創(chuàng)建的SJ表中“價(jià)格”大于30元且“頁(yè)數(shù)”大于300的圖書(shū)的“備注”改為“珍貴圖書(shū)”,SQL命令如下: UPDATE SJ SET BZ=“珍貴圖書(shū)“ WHERE JG30 AND YS300 若把價(jià)格大于30元的或頁(yè)數(shù)大于300頁(yè)的圖書(shū)的備注(bz)改為珍貴圖書(shū),SQL命令如下: UPDATE SJ SET BZ=“珍貴圖書(shū)“ WHERE JG30 OR YS300,2019/6/30,28,4.3.3 DELETE 命令,DELETE 命令用來(lái)刪除一行或者多行記錄。 命令格式: DELETE FROM WHERE 命令說(shuō)明: FROM 子句:指出將刪除的目標(biāo)表。 WHERE :指明被刪除的記錄滿足的條件,若沒(méi)有WHERE子句則刪除所有記錄。 【例4.13】在第1章創(chuàng)建的SJ表中,把“價(jià)格”大于30元且“頁(yè)數(shù)”大于300的圖書(shū)記錄刪掉,SQL語(yǔ)句如下: DELETE FROM SJ WHERE JG30 AND YS300,2019/6/30,29,4.4 查詢和SELECT 命令,SELECT 是數(shù)據(jù)查詢命令。SELECT命令雖然屬于數(shù)據(jù)操縱范圍,但它是SQL的核心,在SQL命令中使用的是最多的,我們將它和查詢單獨(dú)作為一節(jié)。 VFP 6.0的查詢?cè)O(shè)計(jì)器或SELECT-SQL語(yǔ)句可用來(lái)方便地檢索存儲(chǔ)在表或者視圖中的信息。 利用查詢?cè)O(shè)計(jì)器可以搜索滿足條件的記錄,并且可將查詢保存在.qpr文件中。,2019/6/30,30,4.4.1 創(chuàng)建和添加查詢,1啟動(dòng)查詢?cè)O(shè)計(jì)器 若要打開(kāi)查詢?cè)O(shè)計(jì)器,應(yīng)首先打開(kāi)一個(gè)要查詢的數(shù)據(jù)庫(kù),然后采用以下方式之一: (1)“文件”菜單啟動(dòng)查詢?cè)O(shè)計(jì)器 (2)從“工具”菜單啟動(dòng)查詢?cè)O(shè)計(jì)器 (3)使用CREATE QUERY命令打開(kāi)查詢?cè)O(shè)計(jì)器,2019/6/30,31,(1)“文件”菜單啟動(dòng)查詢?cè)O(shè)計(jì)器,從“文件”菜單中選擇“打開(kāi)”命令,啟動(dòng)“打開(kāi)”對(duì)話框,并在對(duì)話框的“文件類型”中選擇“項(xiàng)目”類型,再選取要打開(kāi)的項(xiàng)目名稱,最后單擊“確定”按鈕,出現(xiàn)項(xiàng)目管理器對(duì)話框。 在項(xiàng)目管理器中選擇“數(shù)據(jù)”選項(xiàng)卡,再選取“查詢”選項(xiàng)。 單擊“新建”按鈕,此時(shí)出現(xiàn)“添加表或視圖”對(duì)話框,然后從數(shù)據(jù)庫(kù)下拉列表框中選擇待查詢的數(shù)據(jù)庫(kù)名稱。再?gòu)摹斑x定”欄中選擇“表”或“視圖”,本例選擇了“表”。 從“數(shù)據(jù)庫(kù)中的表”列表框中選擇要添加的表。重復(fù)這一步驟,直到選取了所需要的全部表。 單擊“關(guān)閉”按鈕,返回“查詢?cè)O(shè)計(jì)器”窗口,如圖4-8所示。,2019/6/30,32,(1)“文件”菜單啟動(dòng)查詢?cè)O(shè)計(jì)器(續(xù)),圖4-8 查詢?cè)O(shè)計(jì)器,2019/6/30,33,(2)從“工具”菜單啟動(dòng)查詢?cè)O(shè)計(jì)器,在VFP 6.0主菜單中,選擇“工具”,指向“向?qū)А?,選擇“查詢”,彈出“向?qū)нx取”對(duì)話框,再選擇“查詢向?qū)А保筛鶕?jù)查詢向?qū)У奶崾緞?chuàng)建查詢。 (3)使用CREATE QUERY命令打開(kāi)查詢?cè)O(shè)計(jì)器 在命令窗口中輸入CREATE QUERY即可打開(kāi)查詢?cè)O(shè)計(jì)器。,2019/6/30,34,2創(chuàng)建查詢,(1)查詢?cè)O(shè)計(jì)器 查詢?cè)O(shè)計(jì)器的窗口如圖4-8所示。 在查詢?cè)O(shè)計(jì)器上半部分的窗口中,列出用戶已選定的要查詢的表或視圖。 表或視圖之間的連線表示表之間的連接關(guān)系。 查詢?cè)O(shè)計(jì)器下半部分的窗口中有6個(gè)選項(xiàng)卡: “字段”:選定包含在查詢結(jié)果中的字段。 “聯(lián)接”:確定各數(shù)據(jù)表或視圖之間的連接關(guān)系。 “篩選”:相當(dāng)于命令SET FILTER TO,利用過(guò)濾的方法查找一個(gè)特定的數(shù)據(jù)子集。 “排序依據(jù)”:決定查詢結(jié)果輸出中記錄或行的排列順序 “分組依據(jù)”:所謂分組就是將一組類似的記錄壓縮成一個(gè)結(jié)果記錄,這樣就可以完成基于一組的計(jì)算。 “雜項(xiàng)”:指定是否要對(duì)重復(fù)記錄進(jìn)行檢索,同時(shí)是否對(duì)記錄(返回記錄的最大數(shù)目或最大百分比)做限制。,2019/6/30,35,(2)創(chuàng)建查詢的步驟,1)按上面介紹的方法打開(kāi)查詢?cè)O(shè)計(jì)器。 2)添加出現(xiàn)在查詢結(jié)果中的表或視圖。如本例已打開(kāi)“圖書(shū)館管理”數(shù)據(jù)庫(kù),并已選擇添加了Dz.dbf、Jy.dbf和Sj.dbf三個(gè)表。 3)選定要包含在查詢結(jié)果中的字段。在“字段”選項(xiàng)卡中,從可用字段列表框中選擇需要的字段,即單擊需要的字段,再單擊“添加”按鈕;或者雙擊需要的字段。 4)如果要“可用字段”列表框中的全部字段都包含在查詢結(jié)果中,可單擊“全部添加”按鈕;單擊“全部移去”按鈕,則將已選定的字段(列于選定字段列表框中)全部作廢。此時(shí)單擊“運(yùn)行”按鈕即可看到查詢結(jié)果。 5)保存查詢。從“文件”菜單中選擇“保存”命令,打開(kāi)如圖4-9所示的“另存為”對(duì)話框中,在“保存類型”下拉框中選擇“查詢”類型,在“保存文檔為:”文本框中輸入查詢文件名,本例取名為“讀者借閱”,然后單擊“保存”按鈕即可。,2019/6/30,36,(2)創(chuàng)建查詢的步驟(續(xù)),圖4-9 “另存為”對(duì)話框,2019/6/30,37,(2)創(chuàng)建查詢的步驟(續(xù)),【例4.14】查詢書(shū)籍表中的部分信息。 將Sj.dbf表添加到查詢?cè)O(shè)計(jì)器中,即只對(duì)Sj.dbf表操作。操作如下: 1)首先打開(kāi)“圖書(shū)館管理”數(shù)據(jù)庫(kù),然后打開(kāi)查詢?cè)O(shè)計(jì)器,添加表Sj.dbf。 2)選定要包含在查詢結(jié)果中的字段。方法是在“字段”選項(xiàng)卡中,從可用字段列表框中選擇需要的字段,即單擊需要的字段,再單擊“添加”按鈕;或者雙擊需要的字段。圖4-10列出了本例選擇的全部字段。 3)單擊“運(yùn)行”按鈕得到查詢結(jié)果,如圖4-11所示。,2019/6/30,38,(2)創(chuàng)建查詢的步驟(續(xù)),4)保存查詢結(jié)果。單擊“文件”菜單的“保存”命令,打開(kāi)“保存”對(duì)話框,將查詢結(jié)果保存。,圖4-10 例4.14圖,圖4-11 例4.14的查詢結(jié)果,2019/6/30,39,(2)創(chuàng)建查詢的步驟(續(xù)),【例4.15】統(tǒng)計(jì)表Sj.dbf中記錄書(shū)籍的價(jià)格、頁(yè)數(shù)和書(shū)名等信息。 為完成統(tǒng)計(jì)所有書(shū)籍的價(jià)格和頁(yè)數(shù)的查詢,應(yīng)將Sj.dbf表添加到查詢?cè)O(shè)計(jì)器中。 由于本例只要求統(tǒng)計(jì)所有書(shū)籍的價(jià)格和頁(yè)數(shù),因此只需要選擇書(shū)籍名稱、價(jià)格和頁(yè)數(shù)三個(gè)字段即可。 選擇所需的字段后,單擊“查詢”按鈕即可看到查詢結(jié)果,如圖4-12所示。,圖4-12 例4.15 的“書(shū)籍價(jià)格” 查詢結(jié)果,2019/6/30,40,3創(chuàng)建SELECT-SQL語(yǔ)句,(1)認(rèn)識(shí)SELECT-SQL語(yǔ)句 利用查詢?cè)O(shè)計(jì)器可以方便地創(chuàng)建查詢 而SELECT-SQL則是一個(gè)功能更強(qiáng)大的查詢工具,它可直接從一個(gè)或多個(gè)表中檢索數(shù)據(jù),其查詢結(jié)果可用于創(chuàng)建報(bào)表、BROWSE或新的數(shù)據(jù)庫(kù)表或是臨時(shí)表,并且SELECT-SQL語(yǔ)句可直接加入到程序中。 利用查詢?cè)O(shè)計(jì)器創(chuàng)建查詢時(shí),系統(tǒng)會(huì)自動(dòng)創(chuàng)建相應(yīng)的SQL查詢語(yǔ)句。 單擊“查詢?cè)O(shè)計(jì)器工具欄”上的“顯示SQL窗口”按鈕,如圖4-13所示,可打開(kāi)SQL窗口,窗口中所列出的語(yǔ)句就是剛剛利用查詢?cè)O(shè)計(jì)器創(chuàng)建的與查詢相對(duì)應(yīng)的SQL語(yǔ)句。,2019/6/30,41,3創(chuàng)建SELECT-SQL語(yǔ)句(續(xù)),表4-3所列是上兩例使用查詢?cè)O(shè)計(jì)器創(chuàng)建查詢得到的SQL語(yǔ)句。 在命令窗口中鍵入MODIFY COMMAND example命令,打開(kāi)程序編輯窗口,再輸入下述命令,可得到與使用查詢?cè)O(shè)計(jì)器相同的查詢結(jié)果。 1)在命令窗口中輸入任一SELECT-SQL語(yǔ)句,然后按Ctrl+W鍵保存所輸入的內(nèi)容。 2)DO example,表4-3 查詢?cè)O(shè)計(jì)器創(chuàng)建的SELECT SQL語(yǔ)句,圖4-13 查詢?cè)O(shè)計(jì)器 工具欄,2019/6/30,42,(2)SELECT-SQL語(yǔ)句的語(yǔ)法格式,SELECT ALL | DISTINCT TOP nExpr PERCENT Alias. Select_Item AS Column_Name , Alias. Select_Item AS Column_Name . FROM FORCE DatabaseName!Table AS Local_Alias INNER | LEFT OUTER | RIGHT OUTER | FULL OUTER JOIN DatabaseName!Table AS Local_Alias ON JoinCondition INTO Destination | TO FILE FileName ADDITIVE | TO PRINTER PROMPT | TO SCREEN PREFERENCE PreferenceName NOCONSOLE PLAIN NOWAIT WHERE JoinCondition AND JoinCondition . AND | OR FilterCondition AND | OR FilterCondition . GROUP BY GroupColumn , GroupColumn . HAVING FilterCondition UNION ALL SELECTCommand ORDER BY Order_Item ASC | DESC , Order_Item ASC | DESC .,2019/6/30,43,(2)SELECT-SQL語(yǔ)句的語(yǔ)法格式(續(xù)),SELECT-SQL語(yǔ)句相當(dāng)復(fù)雜,它既可以用于單表的查詢,也可以用于多表的查詢。 1)SELECT子句:在SELECT子句中指定在查詢結(jié)果中包含的字段、表達(dá)式。 2)FROM 子句:指定所有從中檢索數(shù)據(jù)的表。如果表沒(méi)有打開(kāi),VFP 6.0顯示“打開(kāi)”對(duì)話框,以便指定文件位置。表打開(kāi)以后,直到查詢結(jié)束時(shí)才關(guān)閉。 如果包含F(xiàn)ORCE關(guān)鍵字,則在建立查詢時(shí)會(huì)嚴(yán)格按照FROM子句中描述的順序連接表;若不包含F(xiàn)ORCE關(guān)鍵字,則對(duì)查詢進(jìn)行優(yōu)化。使用FORCE關(guān)鍵字,可加快查詢速度。 DatabaseName!用來(lái)指定數(shù)據(jù)的名稱。當(dāng)包含表的數(shù)據(jù)庫(kù)不是當(dāng)前數(shù)據(jù)庫(kù)時(shí),必須指定數(shù)據(jù)庫(kù)名稱,并且應(yīng)在數(shù)據(jù)庫(kù)名稱之后表名之前加上感嘆號(hào)(!)分隔符。 例如,“圖書(shū)館管理!sj”表示數(shù)據(jù)管理數(shù)據(jù)庫(kù)的sj表。,2019/6/30,44,(2)SELECT-SQL語(yǔ)句的語(yǔ)法格式(續(xù)),【例4-16】對(duì)圖書(shū)館管理數(shù)據(jù)庫(kù),使用FROM子句,查看所有讀者的編號(hào)、姓名和性別。 其中,SELECT子句指定要查詢的字段名稱,dz.dzbh、dz.dzxm和dz.dzxb分別對(duì)應(yīng)dz表中的編號(hào)、姓名和性別。FROM子句表示要查詢的字段來(lái)自“圖書(shū)館管理”數(shù)據(jù)庫(kù)的dz表。 SELECT dz.dzbh, dz.dzxm, dz.dzxb; FROM dz 注意:下面的SELECT語(yǔ)句和上面的語(yǔ)句具有相同的效果: SELECT dz.dzbh, dz.dzxm, dz.dzxb; FROM 圖書(shū)館管理!dz,2019/6/30,45,4. 定義查詢結(jié)果,(1)使用排序選項(xiàng) 排序能決定查詢輸出結(jié)果中記錄或行的順序。 例如,可按書(shū)籍的價(jià)格以升序或降序方式對(duì)書(shū)籍記錄進(jìn)行排序。 利用排序依據(jù)選項(xiàng)卡可設(shè)置查詢的排序次序。 在“排序依據(jù)”選項(xiàng)卡中,“選定字段”可選擇要用來(lái)排序的關(guān)鍵字段。選定后,添加到“排序條件”框,“排序條件”框中字段的次序決定了查詢結(jié)果排序時(shí)的條件,第一個(gè)字段決定了主排序次序,其余字段決定了第二排序次序。 例如,在“排序條件”框中的字段順序是sj.jg、sj.ys,則查詢結(jié)果將首先按sj.jg進(jìn)行排序,如果sj表中有一個(gè)以上的記錄具有同樣的jg字段值,這些記錄則再按ys進(jìn)行排序。,2019/6/30,46,4. 定義查詢結(jié)果(續(xù)),【例4.17】建立查詢按書(shū)籍價(jià)格從低到高排序。 觀察例4.15的查詢結(jié)果,可以發(fā)現(xiàn)其結(jié)果并沒(méi)有完全按書(shū)籍價(jià)格的高低輸出,若要使輸出按書(shū)籍價(jià)格從低到高排列,可按以下步驟操作: 1)打開(kāi)查詢?cè)O(shè)計(jì)器,首先選擇“排序依據(jù)”選項(xiàng)卡。其中,“選定字段”列出了可用來(lái)排序的字段,供用戶選擇,“排序條件”是用戶已選擇好的用來(lái)排序的字段。 2)從“選定字段”框中選定用來(lái)排序的字段,由于本例要按書(shū)籍價(jià)格從小到大的順序排序,所以應(yīng)選擇字段sj.jg,然后單擊“添加”按鈕,把它移到“排序條件”框中。 3)從“排序選項(xiàng)”的兩個(gè)單選按鈕“升序”和“降序”中選擇一個(gè),本例選擇“升序”。 4)單擊常用工具欄中的“運(yùn)行”按鈕。將查詢結(jié)果同例4.15比較。,2019/6/30,47,4. 定義查詢結(jié)果(續(xù)),對(duì)查詢結(jié)果進(jìn)行排序時(shí),在對(duì)應(yīng)的SELECT-SQL命令中可包括ORDER BY子句,它的格式如下: ORDER BY Order_itemASC|DESC 其中,Order_item是排序條件框中選定的排序字段,字段間用逗號(hào)(,)分隔。另外,Order_item也可以是一個(gè)數(shù)字表達(dá)式,表示查詢結(jié)果中列的位置(最左邊列的編號(hào)為1)。ASC指定查詢結(jié)果根據(jù)排序以升序排序,DESC指定以降序排列,缺省時(shí)為升序。 如果不使用ORDER BY子句指定查詢結(jié)果的排列順序,則查詢結(jié)果不排序。 例4.17對(duì)應(yīng)的SELECT-SQL語(yǔ)句如下: SELECT sj.sjmc, sj.jg, sj.ys; FROM 圖書(shū)館管理!sj ORDER BY sj.jg,2019/6/30,48,(2)給字段添加說(shuō)明標(biāo)題,為使查詢結(jié)果易于閱讀和理解,可以給字段添加說(shuō)明標(biāo)題,又稱別名。 給前面設(shè)計(jì)的“書(shū)籍價(jià)格”添加說(shuō)明標(biāo)題,操作步驟如下: 1)打開(kāi)“書(shū)籍價(jià)格”查詢。 2)在“函數(shù)和表達(dá)式”文本框中鍵入字段名,接著輸入AS和說(shuō)明標(biāo)題,如下所示: sj.sjmc AS 書(shū)籍名稱 3)單擊“添加”按鈕,在“選定字段”框中放置帶有別名的字段。 4)重復(fù)步驟2)、3),分別給sj.jg和sj.ys添加說(shuō)明標(biāo)題“書(shū)籍價(jià)格”和“書(shū)籍頁(yè)數(shù)”。 5)單擊“運(yùn)行”按鈕,查詢結(jié)果中各字段名稱已變成相應(yīng)的漢字說(shuō)明。 對(duì)應(yīng)的SELECT語(yǔ)句如下: SELECT sj.sjbh AS 書(shū)籍編號(hào), sj.jg AS 書(shū)籍價(jià)格, sj.ys AS 書(shū)籍頁(yè)數(shù); FROM 圖書(shū)館管理!sj,2019/6/30,49,(3)使用選擇條件,選擇數(shù)據(jù)庫(kù)或表中符合條件的一部分記錄而不是全部記錄是查詢的重要任務(wù)。 例如,要查詢一定日期范圍內(nèi)的借書(shū)記錄、查詢所有女性讀者的基本情況等。 在查詢?cè)O(shè)計(jì)器中,“篩選”選項(xiàng)卡可確定用于選擇記錄的字段和比較準(zhǔn)則,以及輸入與該字段進(jìn)行比較的示例值。 設(shè)置篩選條件是指設(shè)置篩選的邏輯表達(dá)式,這個(gè)表達(dá)式由字段、操作符和數(shù)值組成。邏輯表達(dá)式主要有下述形式: 字段 操作符 表達(dá)式 其中,字段是要查詢的表中的字段。操作符的含義及使用示例如表4-4所示。,2019/6/30,50,(3)使用選擇條件(續(xù)),在表4-4中,Like篩選操作符的含義是查找每個(gè)與字符表達(dá)式相匹配的字段。在字符串表達(dá)式中可使用百分號(hào)“%”和下劃線“_”通配符,下劃線表示字符串中的任意一個(gè)字符,百分號(hào)表示任意長(zhǎng)度的字符串。,表4-4 操作符及其舉例,2019/6/30,51,(3)使用選擇條件(續(xù)),在“實(shí)例”文本框中,輸入比較條件時(shí)需要注意以下幾點(diǎn): 1)僅當(dāng)字符串與待查詢表中字段名相同時(shí),用引號(hào)括起字符串;否則,無(wú)需用引號(hào)括起字符串。 2)日期也不必用花括號(hào)括起來(lái)。 3)邏輯值的前后必須使用句點(diǎn)號(hào),如.T.。 4)若輸入查詢中表的字段名,VFP就將它識(shí)別為一個(gè)字段。 在搜索字符型數(shù)據(jù)時(shí),如果想忽略大小寫(xiě)匹配,應(yīng)選擇“大小寫(xiě)”下面的按鈕。 當(dāng)需要多個(gè)篩選條件時(shí),需要在“篩選”卡中加進(jìn)多個(gè)語(yǔ)句(多個(gè)行)。各個(gè)篩選條件之間使用.AND.和.OR.連接,即“篩選”選項(xiàng)卡中的“邏輯”下拉列表。 當(dāng)有多個(gè)篩選條件且“邏輯”選項(xiàng)設(shè)置為“無(wú)”時(shí),系統(tǒng)自動(dòng)加入.AND.值。 當(dāng)想否定設(shè)置的篩選條件時(shí),選擇“否”按鈕。 例如,篩選條件 sj.jg = 30,選擇“否”按鈕后,變?yōu)閟j.jg 30。,2019/6/30,52,(3)使用選擇條件(續(xù)),【例4.18】在例4.15的“書(shū)籍價(jià)格”查詢中,篩選出價(jià)格在30元以上的書(shū)籍。 1)打開(kāi)“書(shū)籍價(jià)格”查詢,并選擇“篩選”選項(xiàng)卡。 2)在“字段”下拉列表中選擇sj.jg 字段。 3)在“條件”下拉列表中選擇=操作符。 4)在“實(shí)例”文本框中輸入30。 對(duì)應(yīng)的SELECT語(yǔ)句如下: SELECT sj.sjmc AS 書(shū)籍名稱, sj.jg AS 書(shū)籍價(jià)格, sj.ys AS 書(shū)籍頁(yè)數(shù); FROM 圖書(shū)館管理!sj ; WHERE sj.jg= 30,2019/6/30,53,(3)使用選擇條件(續(xù)),【例4.19】在例4.15創(chuàng)建的“書(shū)籍價(jià)格”查詢中,使用LIKE操作符,篩選出書(shū)籍名為軟件工程的記錄。 1)打開(kāi)“統(tǒng)計(jì)學(xué)生成績(jī)”查詢,并選擇“篩選”選項(xiàng)卡。 2)在“字段”下拉列表中選擇sj.sjmc字段。 3)在“條件”下拉列表中選擇LIKE操作符。 4)在“實(shí)例”文本框中輸入“軟件工程”。 對(duì)應(yīng)的SELECT語(yǔ)句如下: SELECT sj.sjmc, sj.jg, sj.ys; FROM 圖書(shū)館管理!sj WHERE sj.sjmc LIKE “軟件工程“,2019/6/30,54,(4)多個(gè)篩選條件的組合使用,實(shí)際使用中,經(jīng)常需要查詢某一范圍內(nèi)的記錄。 例如,書(shū)籍價(jià)格在30元以下或者50元以上的所有書(shū)籍,或者書(shū)籍頁(yè)數(shù)在300頁(yè)以上且價(jià)格在40元以上的書(shū)籍等。 由于可能同時(shí)需要輸入兩個(gè)篩選條件,因此需要考慮篩選條件之間的關(guān)系問(wèn)題。 在VFP中,篩選條件間共有三種關(guān)系,即與(and)、或(or)和否(not)。 例如,“書(shū)籍價(jià)格在30元以下或者50元以上”可寫(xiě)成sj.jg=50,而“書(shū)籍頁(yè)數(shù)在300頁(yè)以上且價(jià)格在40元以上的書(shū)籍”可寫(xiě)成sj.ys=300 and sj.jg=40。 在“篩選”選項(xiàng)卡中,可同時(shí)輸入多個(gè)篩選條件,每一個(gè)篩選條件占一行,行與行之間的缺省邏輯關(guān)系是“與”(AND),當(dāng)選擇其他關(guān)系時(shí),可通過(guò)邏輯項(xiàng)對(duì)應(yīng)行的列表來(lái)選擇。,2019/6/30,55,(4)多個(gè)篩選條件的組合使用(續(xù)),【例4.20】設(shè)置“與”篩選條件。前面已經(jīng)分析過(guò),“書(shū)籍頁(yè)數(shù)在300頁(yè)以上且價(jià)格在40元以上的書(shū)籍”,可看成兩個(gè)篩選條件的組合,即sj.ys=300 and sj.jg=40。 首先建立篩選條件sj.ys=300,然后再建立另一個(gè)篩選條件sj.jg=40。由于兩個(gè)篩選條件之間是“與”的關(guān)系,因此不用設(shè)置“邏輯”選項(xiàng)。 對(duì)應(yīng)的SELECT語(yǔ)句如下: SELECT sj.sjmc, sj.jg, sj.ys; FROM 圖書(shū)館管理!sj WHERE sj.ys=300 and sj.jg=40,2019/6/30,56,(4)多個(gè)篩選條件的組合使用(續(xù)),【例4.21】設(shè)置“或”(OR)篩選條件。統(tǒng)計(jì)“書(shū)籍價(jià)格在30元以下或者50元以上”的所有書(shū)籍,其篩選條件可寫(xiě)成sj.jg=50。 在“篩選”選項(xiàng)卡中首先建立兩個(gè)篩選條件,第一個(gè)是sj.jg=50。 由于兩個(gè)篩選條件是“或”關(guān)系,因此,還要在第一個(gè)篩選條件對(duì)應(yīng)的“邏輯”下拉列表中選擇OR運(yùn)算符。 對(duì)應(yīng)的SELECT語(yǔ)句如下: SELECT sj.sjmc, sj.jg, sj.ys; FROM 圖書(shū)館管理!sj WHERE sj.jg=50,2019/6/30,57,(4)多個(gè)篩選條件的組合使用(續(xù)),【例4.22】設(shè)置“非”(NOT)篩選條件。查詢“所有書(shū)名不是軟件工程的書(shū)籍”。 考察“所有書(shū)名不是軟件工程的書(shū)籍”和“所有書(shū)名是軟件工程的書(shū)籍”是互為否定的。 “所有書(shū)名是軟件工程的書(shū)籍”可寫(xiě)成“LIKE”軟件工程“”,可先設(shè)置篩選條件“LIKE”軟件工程“”,然后單擊該篩選條件行對(duì)應(yīng)的“否”按鈕。 對(duì)應(yīng)的SELECT語(yǔ)句是: SELECT sj.sjmc, sj.jg, sj.ys; FROM 圖書(shū)館管理!sj WHERE sj.sjmc NOT like “軟件工程“,2019/6/30,58,5定向輸出查詢結(jié)果,VFP允許查詢結(jié)果以不同的形式輸出。 例如,可輸出到文件、打印機(jī)、臨時(shí)表和屏幕等。缺省形式是將查詢結(jié)果顯示在瀏覽窗口中。 選擇查詢結(jié)果輸出形式的方法是: (1)從“查詢”菜單中選擇“查詢?nèi)ハ颉泵?,打開(kāi)“查詢?nèi)ハ颉睂?duì)話框,如圖4-14所示。打開(kāi)該對(duì)話框的另一個(gè)方法是在“查詢?cè)O(shè)計(jì)器”工具欄中單擊“查詢?nèi)ハ颉卑粹o。 (2)“查詢?nèi)ハ颉睂?duì)話框中列出了7個(gè)查詢結(jié)果的輸出形式,且均以按鈕形式給出。選擇需要的按鈕,并單擊“確定”按鈕即可。,圖4-14 “查詢?nèi)ハ颉睂?duì)話框,2019/6/30,59,5定向輸出查詢結(jié)果(續(xù)),定向輸出對(duì)應(yīng)的SELECT子句是INTO Destination子句。表4-5為該子句常用格式。 如輸出到臨時(shí)表“學(xué)生成績(jī)清單”中可寫(xiě)成“INTO CURSOR 學(xué)生成績(jī)清單”,輸出到活動(dòng)窗口中,可寫(xiě)成TO SCREEN。 如果只想暫時(shí)保存結(jié)果,可將它們發(fā)送到數(shù)組或臨時(shí)表中。 若要永久保存結(jié)果,將它發(fā)送到一個(gè)表中。,表4-5 定向輸出查詢結(jié)果子句形式,2019/6/30,60,4.4.2 運(yùn)行查詢,1運(yùn)行查詢 在完成了查詢?cè)O(shè)計(jì)并指定了輸出目的地后,可以單擊“運(yùn)行”按鈕啟動(dòng)該查詢,也可以在命令窗口使用DO命令。 例如,運(yùn)行“數(shù)籍價(jià)格”查詢,可在命令窗口輸入: DO 書(shū)籍價(jià)格.qpr,2019/6/30,61,2分組查詢,(1)分組查詢。所謂分組就是將一組類似的記錄壓縮成一個(gè)結(jié)果記錄,這樣就可以完成基于一組記錄的計(jì)算。 【例4.23】將讀者按家庭住址分組。操作步驟如下: 1)新建一個(gè)“按讀者住址查詢”,選擇讀者表的所有字段。 2)選擇“分組依據(jù)”選項(xiàng)卡,選擇dz.jtzz,并單擊“添加”按鈕。 3)為保證分組正確,在“排序依據(jù)”選項(xiàng)卡中設(shè)置排序條件。例如dz.dzbh。 4)運(yùn)行查詢,結(jié)果如圖4-15所示。,2019/6/30,62,(1)分組查詢(續(xù)),【例4.24】統(tǒng)計(jì)在書(shū)籍表中每個(gè)出版社出版的書(shū)籍的數(shù)目。操作步驟如下: 1)建立一個(gè)查詢,選擇sj表中的所有字段,在“分組依據(jù)”選項(xiàng)卡中選擇sj.cbs,在“排序依據(jù)”選項(xiàng)卡中選擇sj.sjbh。 2)在“字段”選項(xiàng)卡中,在“函數(shù)和表達(dá)式”框中輸入“count(sj.cbs) as 數(shù)量”,并單擊“添加”按鈕。 3)運(yùn)行查詢,其結(jié)果如圖4-16所示。,圖4-16 統(tǒng)計(jì)出版社的出版數(shù)量,2019/6/30,63,(2)為查詢?cè)黾佑?jì)算字段,【例4.25】統(tǒng)計(jì)每個(gè)出版社的所出書(shū)中價(jià)格最低的書(shū)籍,可按如下步驟操作: 1)創(chuàng)建一個(gè)查詢,選擇書(shū)籍表中的sj.sjmc、sj.sjzz、sj.jg, sj.ys。 2)選擇“字段”選項(xiàng)卡,在“函數(shù)和表達(dá)式”文本框中輸入“MIN(sj.jg) AS最便宜的圖書(shū)”。 3)單擊“添加”按鈕。 4)選擇“分組依據(jù)”選項(xiàng)卡,選擇sj.cbs,并單擊“添加”按鈕。 5)若需要排序,此時(shí)可在“排序依據(jù)”選項(xiàng)卡中設(shè)置排序條件,如sj.ys。 “MIN(sj.jg) AS 最便宜的圖書(shū)”是一個(gè)函數(shù)表達(dá)式,在查詢結(jié)果中以“最便宜的圖書(shū)”名稱給出。 此列不是表中原有的字段,而是在生成查詢的過(guò)程中經(jīng)過(guò)計(jì)算得到的,又稱為計(jì)算列或計(jì)算字段。,2019/6/30,64,(2)為查詢?cè)黾佑?jì)算字段(續(xù)),VFP提供了“字符串、數(shù)學(xué)、邏輯和日期”4類函數(shù)。 表4-6列出了在SELECT-SQL中經(jīng)常使用的列函數(shù)。 列函數(shù)均產(chǎn)生一個(gè)單值,因此以下查詢求出所有圖書(shū)的總價(jià)格。 SELECT sj.mc sj.jg sj.sjbh SUM(sj.jg) AS 總價(jià)格; FROM sj,表4-6 常用列函數(shù),2019/6/30,65,(2)為查詢?cè)黾佑?jì)算字段(續(xù)),在“函數(shù)和表達(dá)式”文本框中輸入函數(shù)可以使用表達(dá)式生成器,單擊“函數(shù)和表達(dá)式”文本框旁的“.”按鈕可啟動(dòng)表達(dá)式生成器,如圖4-17所示。 在表達(dá)式生成器中,有“字符串、數(shù)學(xué)、邏輯和日期”4類函數(shù),每一類函數(shù)對(duì)應(yīng)一個(gè)下拉列表,在列表中可選擇相應(yīng)的函數(shù),然后再輸入相應(yīng)的變量。,圖4-17 表達(dá)式生成器,2019/6/30,66,(2)為查詢?cè)黾佑?jì)算字段(續(xù)),例,“SUM (sj.jg) AS 總價(jià)格”函數(shù)的輸入方法如下: 1)在“數(shù)學(xué)”下拉列表中選擇SUM函數(shù),表達(dá)式文本框中出現(xiàn)SUM(expN)。 2)選取expN。 3)在“字段”列表框中選擇需要的字段變量或從鍵盤輸入相應(yīng)的表達(dá)式,例如si.jg以便代替expN。 4)在“表達(dá)式”文本框的SUM函數(shù)后添加“AS 總價(jià)格”,將表達(dá)式修改成“SUM(sj.jg) AS 總價(jià)格”。 5)單擊“檢驗(yàn)”按鈕可檢驗(yàn)輸入的表達(dá)式的正確性,若正確無(wú)誤后,可單擊“確定”按鈕,返回查詢?cè)O(shè)計(jì)器。此時(shí)在“函數(shù)和表達(dá)式”框中出現(xiàn)“SUM(sj.jg) AS 總成績(jī)”。 6)單擊“添加”按鈕,“總成績(jī)”項(xiàng)將出現(xiàn)在查詢結(jié)果中。,2019/6/30,67,(2)為查詢?cè)黾佑?jì)算字段(續(xù)),【例4.26】已知sj表,可以使用AVG()列函數(shù)求每個(gè)出版社的書(shū)籍的平均價(jià)格。下面給出SELECT語(yǔ)句: SELECT sj.mc,sj.jg, sj.ys, sj.sjzz,; AVG(sj.jg) AS 平均價(jià)格; FROM sj; GROUP BY sj.cbs; ORDER BY sj.sjbh 【例4.27】在“統(tǒng)計(jì)平均價(jià)格”查詢中,添加“總價(jià)格”列。相應(yīng)的SELECT語(yǔ)句如下: SELECT sj.mc,sj.jg, sj.ys, sj.sjzz,; AVG(sj.jg) AS 平均價(jià)格, SUM(sj.jg); FROM sj; GROUP BY sj.cbs; ORDER BY sj.sjbh,2019/6/30,68,3篩選分組,WHERE、HAVING子句都能為查詢提供過(guò)濾條件。 一般來(lái)說(shuō),HAVING子句用來(lái)過(guò)濾GROUP BY后的分組結(jié)果,用WHERE子句過(guò)濾一般表的元組。 下面SELECT語(yǔ)句輸出家住在北京且讀者編號(hào)小于2006005的讀者記錄。 SELECT Dz.dzbh, Dz.dzxm, Dz.jtzz, Dz.dznl; FROM 圖書(shū)館管理!dz; WHERE Dz.jtzz = “北京“ AND Dz.dzbh “20060005“; GROUP BY Dz.dzbh; ORDER BY Dz.dzbh 如果要查詢年齡小于等于30的讀者,可繼續(xù)修改SELECT語(yǔ)句: SELECT Dz.dzbh, Dz.dzxm, Dz.jtzz, Dz.dznl; FROM 圖書(shū)館管理!dz; WHERE Dz.jtzz = “北京“ AND Dz.dzbh “20060005“; GROUP BY Dz.dzbh; ORDER BY Dz.dzbh; HAVING Dz.dznl=30,2019/6/30,69,4查詢多個(gè)表,數(shù)據(jù)庫(kù)中的表之間的關(guān)系可由表間的公共字段體現(xiàn)。 例如,“圖書(shū)館管理”數(shù)據(jù)庫(kù)中,表dz.dbf、jy.dbf和sj.dbf、dz.dbf 和jy.dbf之間由公共字段dzbh相連接,jy.dbf和sj.dbf之間由公共字段sjbh相連接。 當(dāng)需要獲取存儲(chǔ)在兩個(gè)或更多表或視圖中的信息時(shí),需要指出這些表或視圖之間的連接關(guān)系。 使用SELECT-SQL的INNER JOIN子句可完成表間的連接。,2019/6/30,70,4查詢多個(gè)表(續(xù)),在VFP中,表之間的連接有4種類型,如表4-8所示。,表4-8 表間聯(lián)接類型及使用條件,2019/6/30,71,4查詢多個(gè)表(續(xù)),在多表間建立查詢和單表基本相同,惟一不同的是要指明表間的關(guān)系。 【例4.28】統(tǒng)計(jì)借書(shū)的讀者和他們所借的書(shū)籍,要求包括“讀者姓名”和“書(shū)籍名稱”等字段。 1)首先打開(kāi)“圖書(shū)館管理”數(shù)據(jù)庫(kù),然后打開(kāi)查詢?cè)O(shè)計(jì)器。因?yàn)楸纠蟀白x者姓名”和“書(shū)籍名稱”,故需添加dz.dbf、sj.dbf和jy.dbf三個(gè)表。 2)選定要包含在查詢結(jié)果中的字段。在“字段”選項(xiàng)卡中,從“可用字段”列表框中選擇需要的字段,單擊這些字段,再單擊“添加”按鈕;或者雙擊需要的字段。相應(yīng)的SELECT語(yǔ)句是: SELECT Dz.dzxm, sj.sjmc, Jy.cjrq, Jy.sjbh; FROM 圖書(shū)館管理!dz INNER JOIN 圖書(shū)館管理!jy; INNER JOIN 圖書(shū)館管理!sj; ON sj.sjbh = Jy.sjbh; ON Dz.dzbh = Jy.dzbh,2019/6/30,72,4查詢多個(gè)表(續(xù)),圖4-18列出了上例選擇的全部字段。 單擊“運(yùn)行”按鈕可看到例4.28的查詢結(jié)果,如圖4-19所示。,圖4-18 例4.28選定的字段,圖4-19 例4.28查詢結(jié)果,2019/6/30,73,4.5 報(bào)表和標(biāo)簽,報(bào)表和標(biāo)簽是將需要的數(shù)據(jù)表格化的重要工具。 本節(jié)主要介紹如何快速創(chuàng)建報(bào)表,并將應(yīng)用程序有機(jī)地連接起來(lái)。,2019/6/30,74,4.5.1 Visual FoxPro的報(bào)表和標(biāo)簽,報(bào)表包括兩個(gè)基本組成部分:數(shù)據(jù)源和布局。數(shù)據(jù)源通

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論