第三章查詢與統(tǒng)計(jì)---Visual Foxpro 程序設(shè)計(jì)教案_第1頁
第三章查詢與統(tǒng)計(jì)---Visual Foxpro 程序設(shè)計(jì)教案_第2頁
第三章查詢與統(tǒng)計(jì)---Visual Foxpro 程序設(shè)計(jì)教案_第3頁
第三章查詢與統(tǒng)計(jì)---Visual Foxpro 程序設(shè)計(jì)教案_第4頁
第三章查詢與統(tǒng)計(jì)---Visual Foxpro 程序設(shè)計(jì)教案_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、Visual Foxpro 程序設(shè)計(jì)教案第三章 查詢與統(tǒng)計(jì)n 教學(xué)目的與要求 掌握表記錄數(shù)據(jù)排序和索引的方法,熟練使用數(shù)據(jù)工作期,掌握數(shù)據(jù)記錄的統(tǒng)計(jì)命令和SELECT-SQL查詢命令的使用,會(huì)建立數(shù)據(jù)庫的視圖。n 教學(xué)內(nèi)容 記錄的排序和索引;統(tǒng)計(jì)和查詢命令;數(shù)據(jù)工作期;視圖。n 教學(xué)重點(diǎn)與難點(diǎn)統(tǒng)計(jì)和查詢命令;數(shù)據(jù)工作期。3.1 排序和索引排序和索引都是改變記錄的輸出位置,其中索引還決定記錄的存取順序。3.1.1 排序排序:就是根據(jù)表中的某些字段重排記錄。排序后產(chǎn)生一個(gè)新表(排序表),其記錄按新的順序排列,但原文件不變。命令格式:sort to on /A | /D /C , /A | /D /

2、C for while fields | fields like | fields except 說明:(1) on子句的字段名表示排序字段;/A:表示升序(默認(rèn))/D:表示降序;/C:表示大小寫字母等同。(2)可在on子句中設(shè)置多個(gè)排序字段。(3)缺省、for和while表示所有記錄排序。(4)fields子句指定新表應(yīng)包含的字段,默認(rèn)包含原表的所有字段。例3-1:use sbsort to rqx on 啟用日期/D fields 編號(hào),名稱,啟用日期 for not 主要設(shè)備use rqxlistuse sbsort to bmx on 部門/D,價(jià)格 for 主要設(shè)備use bmxli

3、st3.1.2 索引一、索引的概念1、記錄的物理順序和邏輯順序物理順序:文件中的記錄一般按其在磁盤中的存儲(chǔ)位置輸出,這種位置稱為物理順序。排序后產(chǎn)生一個(gè)新的物理排序文件,而索引文件在不改變記錄物理順序的基礎(chǔ)上,只含有關(guān)鍵字和記錄號(hào),因而要比排序文件小的多!2、索引的種類(1)按擴(kuò)展名劃分VFP中的索引有單索引(*.IDX)和復(fù)合索引(*.CDX)兩類。單索引(*.IDX):僅僅是為了和Foxbase進(jìn)行兼容而引入的。復(fù)合索引(*.CDX):一個(gè)復(fù)合索引文件可以包含多個(gè)索引,每個(gè)索引有一個(gè)標(biāo)識(shí),以壓縮方式存儲(chǔ),減少了存儲(chǔ)空間。有結(jié)構(gòu)復(fù)合索引和非結(jié)構(gòu)復(fù)合索引兩類: 結(jié)構(gòu)復(fù)合索引文件:主名與表名相同

4、,隨表的打開而打開,在記錄改動(dòng)時(shí)自動(dòng)維護(hù)。 非結(jié)構(gòu)復(fù)合索引文件:主名與表名不同,用戶自己定義;索引文件的打開用命令set index或use 命令中的index子句。(2)按功能來分索引類型關(guān)鍵字重復(fù)值說明創(chuàng)建修改命令索引個(gè)數(shù)普通索引允許可作為一對(duì)多永久關(guān)系中的“多方”index允許多個(gè)唯一索引允許,但輸出無重復(fù)值為與以前版本兼容而設(shè)候選索引不允許,輸入重復(fù)值將禁止存盤可用作主關(guān)鍵字,可用在永久關(guān)系中建立參照完整性indexcreate tablealter table主索引僅適用數(shù)據(jù)庫表,可用于在永久關(guān)系中建立參照完整性create tablealter table僅可1個(gè)說明:(1)主關(guān)鍵

5、字是能唯一標(biāo)識(shí)記錄的索引關(guān)鍵字,它能排除關(guān)鍵字重復(fù)值。(2)唯一索引型索引文件,對(duì)于關(guān)鍵字值相同的里微 ,索引中只列入其中的第一個(gè)記錄。二、索引的建立命令格式:index on to | of for compact ascending | descending unique | candidate additive功能:建立索引文件或增加索引標(biāo)識(shí)。說明:關(guān)鍵字可用表達(dá)式表示。(1)to子句適用于建立單索引文件,其主名由指出,tag子句用于建立復(fù)合索引文件和索引標(biāo)識(shí),或增加索引標(biāo)識(shí),索引標(biāo)識(shí)由該子句的指出。命令默認(rèn)建立普通索引型索引文件;unique表示建立唯一索引型索引文件;candidat

6、e表示索引文件是候選索引型,但需與tag子句同時(shí)使用。例3-2:use sbindex on 名稱 to mcidxlistindex on 價(jià)格 to jgidx uniquelist(2)compact選項(xiàng)用來指定單索引文件為壓縮的。(3)of 選項(xiàng)的用于指定非結(jié)構(gòu)復(fù)合索引文件的名字,缺省則表示建立結(jié)構(gòu)復(fù)合索引文件。(4)記錄邏輯順序默認(rèn)為升序,也可用ascending表示升序,descending表示降序。(5)additive表示建立本索引文件時(shí)并不關(guān)閉先前打開的索引文件。例3-3:為表sb.dbf建立一個(gè)結(jié)構(gòu)復(fù)合索引文件,其中包含3個(gè)索引:(1)記錄以價(jià)格降序排列,索引標(biāo)識(shí)為普通索引

7、型。(2)記錄以部門升序排列,部門相同的按價(jià)格升序排序,索引標(biāo)識(shí)為普通索引型。(3)記錄以部門升序排列,部門相同時(shí)則按價(jià)格降序排列,索引標(biāo)識(shí)為候選索引型。use sbindex on 價(jià)格 tag jg descendinglistindex on 部門+str(價(jià)格,9,2) tag bmjglistindex on val(部門)-價(jià)格/1000000 tag bmjg1 candidatelist注:主索引只能在數(shù)據(jù)庫表中才能設(shè)置,自由表不允許設(shè)置。用表設(shè)計(jì)器建立和修改索引的兩種方法:(1)在字段選項(xiàng)卡索引列選定。(2)使用索引選項(xiàng)卡設(shè)置。可以利用表達(dá)式生成器生成索引的表達(dá)式。三、索引的

8、使用利用索引的前提條件:同時(shí)打開表文件和索引文件(一個(gè)表可以打開多個(gè)索引文件,同一個(gè)復(fù)合索引文件可以包含多個(gè)索引標(biāo)識(shí),但當(dāng)前只有一個(gè)索引文件能起作用,在復(fù)合索引文件中也只有一個(gè)索引標(biāo)識(shí)能起作用)實(shí)現(xiàn)索引文件的步驟:打開表;建立索引;打開表;打開索引文件;確定主控索引文件;對(duì)于復(fù)合索引文件要確定主控索引;瀏覽或打印索引結(jié)果。1、打開和關(guān)閉索引文件(1)若當(dāng)前只有一個(gè)索引文件被打開,則該索引文件就是主控索引文件;索引剛建立時(shí)呈打開狀態(tài)且成為主控索引文件。若當(dāng)前打開了多個(gè)索引文件,可利用set index to 命令來確定主控索引文件。(2)除結(jié)構(gòu)復(fù)合索引能隨著表的打開而打開外,其它的索引文件必須用

9、命令顯示打開。(3)表關(guān)閉時(shí)索引文件就隨之關(guān)閉。命令格式:set index to additive功能:打開當(dāng)前表的一個(gè)或多個(gè)索引文件并確定主控索引文件。說明:(1)中的第一個(gè)索引為主控索引文件。例:use sbset index to jgidx,mcidxlist(2)若缺省所有選項(xiàng),僅用set index to 將關(guān)閉當(dāng)前工作區(qū)中除結(jié)構(gòu)復(fù)合索引文件外的所有索引文件,同時(shí)取消主控索引。(3)若取消additive選項(xiàng),則在用本命令打開索引文件時(shí),除結(jié)構(gòu)索引文件外的索引文件均被關(guān)閉。(4)命令”use index ”也可在打開表的同時(shí)打開索引文件,并確定中的第一個(gè)索引文件為主控索引文件。2

10、、確定主控索引 復(fù)合索引文件中新建的索引標(biāo)識(shí)自動(dòng)成為主控索引;需注意:表重新打開后盡管結(jié)構(gòu)型復(fù)合索引文件已自動(dòng)打開,還必須確定主控索引。命令格式:set order to | | tag ascending | descending說明:(1)表示已打開索引的序號(hào),該序號(hào)用來指定主控索引文件和主控索引。系統(tǒng)先為各單索引文件編號(hào),故結(jié)構(gòu)復(fù)合索引文件的索引標(biāo)識(shí)的編號(hào)比單索引文件編號(hào)要大。(2)指定該單索引文件為主控索引文件。(3)指定該索引標(biāo)識(shí)為主控索引。(4)set order to 或set order to 0命令取消主控索引文件及主控索引,表中記錄將按物理順序輸出。例3-4:use sb

11、index mcidx,jgidxlistset order to tag jg &價(jià)格listset order to 1 listset order to list set order to 3listset index tolist3、刪除索引(1)刪除索引文件遵循“先關(guān)閉后刪除”的原則。使用命令:erase | delete file *.idx / *.cdx(2)刪除索引標(biāo)識(shí)命令格式:delete tag all | ,功能:刪除打開的結(jié)構(gòu)復(fù)合索引文件的索引標(biāo)識(shí)。說明:all子句用于刪除結(jié)構(gòu)復(fù)合索引文件的所有索引標(biāo)識(shí)。若某索引文件的所有索引標(biāo)識(shí)都被刪除,則該索引文件也已刪除。例:u

12、se sbdelete tag bmjg1 & index on val(部門)-價(jià)格/1000000 tag bmjg1 candidate四、索引的更新1、自動(dòng)更新表中的數(shù)據(jù)發(fā)生變化時(shí),所有已經(jīng)打開的索引都會(huì)自動(dòng)的更新。2、重新索引若未確定主控索引文件和主控索引,修改表的記錄時(shí)就不會(huì)自動(dòng)更新。如果要維持記錄的邏輯順序必須進(jìn)行重新索引:reindex compact 也可以用index on命令再次建立索引。3.2 查詢命令查詢:即按指定條件在表中查找所需的記錄。有順序查詢和索引查詢兩種。3.2.1 順序查詢命令命令格式:locate for whilecontinue功能:搜尋滿足條件的第

13、一個(gè)記錄。若找到,記錄指針就指向該記錄;若表中無此記錄,搜索后主屏幕將顯示“已到定位范圍末尾”表示記錄指針指向文件結(jié)束處。說明:(1)缺省表示all。(2)查到記錄后,要繼續(xù)往下查找滿足的記錄必須用continue命令。例3-5:在sb.dbf中查詢價(jià)格小于15000元的非主要設(shè)備。use sblocate for 價(jià)格15000 and not 主要設(shè)備display continue?recno()continue?recno()?eof()3.2.2 索引查詢命令對(duì)表進(jìn)行索引查詢的前提條件:事先對(duì)表進(jìn)行了索引或排序。seek和find(主要是與舊版本兼容)命令。命令格式:seek 功能:

14、在已經(jīng)確定主控索引的表中按索引關(guān)鍵字搜索滿足值的第一個(gè)記錄。若找到,記錄指針就指向該記錄;找不到該記錄則在主屏幕的狀態(tài)條中顯示“沒有找到”。例3-6:use sbindex on 編號(hào) tag bhseek “038-1”?recno()index on 啟用日期 tag qyrqseek 3/5/90?recno()index on 價(jià)格 tag jgseek 1000.00?recno(),found() &函數(shù)found( )檢查是否找到滿足條件的記錄字符表達(dá)式的模糊查詢(只要字符表達(dá)式值與索引關(guān)鍵字值左子串相同即可)。命令:set exact on | off on 用于完全匹配,of

15、f用于模糊匹配,系統(tǒng)默認(rèn)是off。例3-7:use sbset order to tag bhseek “03”?recno(),found()set exact onseek “03”?found()set exact off3.3 數(shù)據(jù)工作期數(shù)據(jù)工作期:設(shè)置數(shù)據(jù)工作環(huán)境(表的打開、索引,多表之間的關(guān)聯(lián)等)的交互式操作窗口。優(yōu)點(diǎn):(1) 具有向?qū)ё饔?,比命令形式要方便、簡單。?) 可以將數(shù)據(jù)環(huán)境用視圖文件(*.vue)的形式保存起來,便于以后使用。3.3.1 多工作區(qū)的查詢一、設(shè)備管理使用的4個(gè)表(P78)sb.dbf dx.dbf bmdm.dbf(部門代碼表) zz.dbf(增值表)二

16、、工作區(qū)1、 工作區(qū)號(hào)VFP提供了32767個(gè)工作區(qū),編號(hào)從1到32767。 每個(gè)工作區(qū)只允許打開一個(gè)表,在同一個(gè)工作區(qū)打開另一個(gè)表時(shí),以前打開的表會(huì)自動(dòng)關(guān)閉。 一個(gè)表只能在一個(gè)工作區(qū)打開,在未關(guān)閉時(shí)若試圖在其他的工作區(qū)打開,則系統(tǒng)顯示“文件正在使用”。2、別名前10個(gè)工作區(qū)系統(tǒng)別名:A,B,C,D,E,F,G,H,I,Ju 表的別名:表在打開時(shí)可以確定其別名命令格式:use alias 如:use sb alias shebein 注:若未給表確定別名,則系統(tǒng)默認(rèn)表的別名與表的主名相同。3、選擇工作區(qū)命令格式:select |功能:選定某個(gè)工作區(qū),用于打開一個(gè)表。說明:(1)用select命

17、令選定工作區(qū)為當(dāng)前工作區(qū),系統(tǒng)默認(rèn)1號(hào)工作區(qū)為當(dāng)前工作區(qū)。函數(shù)select( )能返回當(dāng)前工作區(qū)的區(qū)號(hào)。u 注意:引用非當(dāng)前工作區(qū)表的字符必須冠以別名引用格式為:別名.字段名例:close all?sele( )use bmdm3?名稱sele 2use sb?名稱,bmdm.名稱(3) 命令”select 0”表示選定當(dāng)前尚未使用的最小工作區(qū)號(hào)的工作區(qū)。在select命令中使用表的別名便可。注意:只有已打開的表方可在select命令中使用別名。例3-8:通過多區(qū)操作從部門代碼中查出部門名close allselect 0use sbgo 3select 0use bmdmindex on 代

18、碼 tag dmseek sb.部門?sb.編號(hào),b.名稱,名稱sele sb?編號(hào),名稱,bmdm.名稱(3)命令”use in |”能在指定的工作區(qū)打開表,但不改變當(dāng)前工作區(qū),要改變還要借助于select命令。3.3.2 數(shù)據(jù)工作期窗口菜單操作方式命令工作方式其他方法打開選定窗口菜單的數(shù)據(jù)工作期命令set或set view on關(guān)閉選定文件菜單中的關(guān)閉命令set view off雙擊窗口控制菜單(1)屬性按鈕:“修改”按鈕:能打開表設(shè)計(jì)器,修改表的結(jié)構(gòu)和建立、修改索引?!八饕樞颉保嚎稍O(shè)置主控索引?!白侄魏Y選”和“數(shù)據(jù)過濾器”:可設(shè)置篩選和過濾條件。(2)瀏覽按鈕:瀏覽和編輯數(shù)據(jù)。(3)打

19、開按鈕(4)關(guān)閉按鈕(5)關(guān)系按鈕:以當(dāng)前表為父表建立關(guān)聯(lián)。(6)一對(duì)多按鈕:系統(tǒng)默認(rèn)為多對(duì)一,相當(dāng)于命令:set skip to例3-9:數(shù)據(jù)工作期窗口操作示例,要求:(1)同時(shí)打開sb.dbf和bmdm.dbf。(2)為sb.dbf設(shè)置包括編號(hào)、名稱、部門等字段的字段表,并以編號(hào)大于03為條件設(shè)置過濾器,隨后打開瀏覽窗口。操作步驟:(1)打開數(shù)據(jù)工作期(2)打開表(3)設(shè)置字段表和過濾器(4)打開瀏覽窗口進(jìn)行瀏覽3.3.3 視圖文件一、視圖文件(*.vue)的建立1、菜單操作數(shù)據(jù)工作期在未關(guān)閉時(shí),文件菜單“另存為”建立視圖文件.vue注意:若瀏覽窗口打開,則“另存為”命令以淡色顯示而無效。

20、2、 命令操作命令格式:create view &在當(dāng)前打開一個(gè)數(shù)據(jù)庫時(shí)功能:為VFP當(dāng)前的數(shù)據(jù)工作環(huán)境建立一個(gè)視圖文件。二、視圖文件的打開1、文件菜單2、命令:set view to *.vue3.3.4 表的關(guān)聯(lián)一、關(guān)聯(lián)的概念所謂關(guān)聯(lián),就是令不同工作區(qū)的記錄指針建立一種臨時(shí)的聯(lián)動(dòng)關(guān)系,使一個(gè)表的記錄指針移動(dòng)時(shí)另一個(gè)表的記錄指針能隨之移動(dòng)。1、關(guān)聯(lián)的條件建立關(guān)聯(lián)的兩個(gè)表:父表(sb)和子表(bmdm) 使得父表記錄指針的移動(dòng),會(huì)使子表記錄指針自動(dòng)移到滿足關(guān)聯(lián)條件的記錄上。條件:(1)先為子表的字段表達(dá)式建立索引。 (2)在關(guān)聯(lián)命令中指明父表和子表應(yīng)該相等的字段表達(dá)式。2、多一關(guān)系(父表中的多

21、條記錄對(duì)應(yīng)子表中的一條記錄)例如:sb表中的部門字段對(duì)應(yīng)bmdm表中的代碼字段值。3、 一多關(guān)系(父表中的一條記錄對(duì)應(yīng)子表中的多條記錄)例如:bmdm表中的代碼字段值對(duì)應(yīng)sb表中的部門字段。二、在數(shù)據(jù)工作期窗口建立關(guān)系一般步驟:(1)打開需建立關(guān)聯(lián)的表。(2)為子表按關(guān)聯(lián)的關(guān)鍵字建立索引或確定主控索引(3)選定父表工作區(qū)為當(dāng)前工作區(qū),并與一個(gè)或多個(gè)子表建立關(guān)聯(lián)。(4)說明建立的關(guān)聯(lián)為一多關(guān)系,缺省本步驟默認(rèn)為多一關(guān)系。例3-10 查詢1992年起啟用的設(shè)備,要求顯示查到的設(shè)備編號(hào)、名稱、啟用日期和部門名。解一:以sb.dbf為父表,bmdm.dbf為子表建立多一關(guān)系(1)打開表(2)為子表建立

22、索引(3)建立多一關(guān)聯(lián)(4)建立視圖文件 & 視圖文件sbbm.view(5)顯示結(jié)果set strictdate to 0browse fields bmdm.名稱:H=部門名,sb.編號(hào),sb.名稱:H=設(shè)備名,sb.啟用日期 for sb.啟用日期=01/01/92u “H=”將字段顯示名變得更易理解。解二:以bmdm.dbf為父表,sb.dbf為子表建立一多關(guān)系(1)打開表(2)為子表sb.dbf建立索引(3)以bmdm.dbf為父表建立關(guān)聯(lián)(4)說明一多關(guān)系(5)顯示結(jié)果:browse fields bmdm.名稱:H=部門名,sb.編號(hào),sb.名稱:H=設(shè)備名,sb.啟用日期 fo

23、r sb.啟用日期=01/01/92三、用命令來建立關(guān)聯(lián)1、建立關(guān)聯(lián)命令命令格式:set relation to into , into additive功能:以當(dāng)前表為父表與其它一個(gè)或多個(gè)子表建立關(guān)聯(lián)。說明:(1)用來指定父表的字段表達(dá)式,其值將與子表的索引關(guān)鍵字值對(duì)照,看二者是否相同。表示子表或其所在的工作區(qū)。(2)additive 保證在建立關(guān)聯(lián)時(shí)不取消以前建立的關(guān)聯(lián)。例3-10:sele 2use bmdmindex on 代碼 tag 代碼 additivesele 1use sbset relation to sb.部門 into bmdm additive(3)命令“set re

24、lation to”解除關(guān)聯(lián)。2、說明一多關(guān)系的命令命令格式:set skip to ,功能:在set relation 命令之后,說明已建的關(guān)聯(lián)的性質(zhì)為一多關(guān)系。說明:(1)表示在一多關(guān)系中位于多方的子表或其所在的工作區(qū)。(2)不帶可選項(xiàng)的命令“set skip to”用于取消一多關(guān)系,但set relation命令建立的多一關(guān)聯(lián)仍然繼續(xù)存在。例3-11 列出所有設(shè)備的價(jià)格、增值和部門名,試寫出命令序列。close allsele 2use bmdmset order to tag 代碼sele 3use zzindex on 編號(hào) tag bhsele 1use sbset relatio

25、n to sb.部門 into bmdmset relation to sb.編號(hào) into zz additiveset skip to zzbrowse fields 編號(hào),價(jià)格,zz.增值,bmdm.名稱:H=部門名3.4 統(tǒng)計(jì)命令3.4.1 統(tǒng)計(jì)命令命令格式:count for while to 功能:計(jì)算指定范圍內(nèi)滿足條件的記錄數(shù)。(1)記錄數(shù)顯示在窗口的狀態(tài)欄中,也可以to 內(nèi)存變量。(2)卻省范圍是指所有表記錄。例3-12 統(tǒng)計(jì)設(shè)備科擁有的設(shè)備臺(tái)數(shù)set view to sbbmlocate for bmdm.名稱=設(shè)備科dm=bmdm.代碼count for sb.部門=dm

26、to ts?設(shè)備科設(shè)備臺(tái)數(shù):,ts3.4.2 求和命令命令格式:sum for while to |array 功能:在打開的表中,對(duì)的各個(gè)表達(dá)式分別求和。說明:(1)中各表達(dá)式的和數(shù)可依次存入或數(shù)組。若缺省表達(dá)式表,則對(duì)當(dāng)前表所有的數(shù)值表達(dá)式分別求和。(2)缺省指表中的所有記錄。例3-13 根據(jù)sb.dbf與zz.dbf求各設(shè)備的價(jià)格和與增值和。close alluse sb in 0sum 價(jià)格 to mjgsele 0use zzsum zz.增值 to mzz?價(jià)格和,增值和:,mjg,mzz3.4.3 求平均值命令命令格式:average for while to |array 例:

27、close allsele 0use sbaverage 價(jià)格 to jg?jg功能:在打開的表中,對(duì)中的各個(gè)表達(dá)式分別求平均值。3.4.4 計(jì)算命令命令格式:calculate for while to |array 功能:在打開的表中,分別計(jì)算的表達(dá)式。注意:表達(dá)式中至少要包含系統(tǒng)規(guī)定的8個(gè)函數(shù)之一。avg( ) cnt( ) max( ) min( ) sum( ) npv( ) std( ) var( )例3-14 求所有設(shè)備價(jià)格與增值的總和close alluse sb in 0calculate sum(價(jià)格) to jghsele 0use zzcalculate sum(增值)

28、 to zzh?價(jià)格與增值總和:,jgh + zzh3.4.5 匯總命令(分類匯總)命令格式:total to on fields for 說明:一組關(guān)鍵字相同的在新表中只產(chǎn)生一條記錄;非數(shù)值型字段,只將關(guān)鍵字相同的第一個(gè)記錄的字段值放入該記錄。例3-15 在dx.dbf中按設(shè)備的編號(hào)來匯總大修費(fèi)用use dxindex on 編號(hào) tag bhtotal on 編號(hào) to jghz fields 費(fèi)用use jghzbrowse fields 編號(hào),費(fèi)用 title 大修費(fèi)用匯總表3.5 SELECT-SQL查詢SQL(結(jié)構(gòu)化查詢語言)是一種十分重要的標(biāo)準(zhǔn)數(shù)據(jù)庫語言,它是集數(shù)據(jù)定義、數(shù)據(jù)查詢

29、、數(shù)據(jù)操縱和數(shù)據(jù)控制功能于一體的語言。與VFP不同,它不是一種數(shù)據(jù)庫管理系統(tǒng)(DBMS),因?yàn)樗鼉H用于對(duì)數(shù)據(jù)庫數(shù)據(jù)的操作。命令格式: select all|distinct .as 1, .as 2.from 本地別名1 inner|leftouter|rightouter|fullouter join ,本地別名2 on into | to file additive | to printerprompt| to screenpreference nonconsoleplainnowaitwhere andand|orand|or group by , .having union allor

30、der by |列序號(hào)1 asc|desc, |列序號(hào)2asc|desctop percent說明:(1) slelect 子句:all表示選出的記錄包含重復(fù)記錄,缺省。distinct表示不包含重復(fù)記錄。.as 1: 可以是字段名,也可以自己定義的函數(shù)和系統(tǒng)函數(shù)。是字段所在的表名,1用于指定輸出時(shí)使用的列標(biāo)題,可以用不同于字段名。當(dāng)select 表達(dá)式包含上面函數(shù)時(shí),輸出行數(shù)不一定與表的記錄數(shù)相同。例如:select 編號(hào),價(jià)格*0.17 as 增值稅 from sb &查詢窗口每個(gè)記錄顯示一行數(shù)據(jù)select avg(價(jià)格)*0.17 as 增值稅均值 from sb &查詢窗口只顯示一行

31、平均值數(shù)據(jù)表1.3 常用的系統(tǒng)函數(shù)P92 注:select 可用*表示指定所有的字段。(2)from子句及其選項(xiàng):用于指定查詢的表和聯(lián)接類型。join 關(guān)鍵字:用于聯(lián)接左右兩個(gè)所指的表。on 子句:用于指定聯(lián)接條件。froce子句:嚴(yán)格按指定的聯(lián)接條件來聯(lián)接表,避免VFP因進(jìn)行聯(lián)接優(yōu)化而降低查詢速度。(3)into與to 子句:用于指定查詢結(jié)果的輸出去向,默認(rèn)是瀏覽窗口。into 子句中的:array cursor dbfto file用于指定輸出到指定的文本文件,并取代原文件,additive則是追加。to printer:表示輸出到打印機(jī),prompt打開確認(rèn)框。to screen:表示輸

32、出到屏幕。如:select avg(價(jià)格)*0.17 as 增值稅均值 from sb to screen(4)preference子句:用于記載瀏覽窗口的配置參數(shù),再次使用該子句時(shí)可用引用此設(shè)置。(5)noconsole子句:禁止將輸出送往屏幕。若指定過into子句則忽略它的設(shè)置。(6)plain子句:輸出時(shí)省略字段名。(7)nowait子句:顯示瀏覽窗口后程序繼續(xù)往下執(zhí)行。(8)where子句:若已經(jīng)使用了on 子句指定了連接條件,where子句中只能指定篩選條件,表示在已按連接條件產(chǎn)生的記錄中篩選記錄??墒∪oin,一次性在where中指定連接條件和篩選條件。例如:查詢大修過的設(shè)備的編

33、號(hào),名稱和部門:select dx.編號(hào),sb.名稱,bmdm.名稱 as 部門號(hào) from sb,dx,bmdm ;where dx.編號(hào)=sb.編號(hào) and bmdm.代碼=sb.部門(9)group by 子句:對(duì)記錄按值分組,常用于分組統(tǒng)計(jì)。(10)having 子句:當(dāng)含有g(shù)roup子句時(shí),having子句可用于作記錄查詢的限制條件;無group子句時(shí)having 子句如同where子句。(11)union子句:在select-sql命令中嵌入另一個(gè)select-sql命令,使這兩個(gè)命令的查詢結(jié)果合并輸出,但輸出字段的類型和寬度必須一致。例如:執(zhí)行下面的命令將首先顯示所有設(shè)備的編號(hào),

34、接著顯示經(jīng)過增值設(shè)備的編號(hào):select sb.編號(hào) from sb union all select zz.編號(hào) from zz(12)order by子句:指定查詢結(jié)果中記錄按排序,默認(rèn)升序。只可以是字段,或表示查詢結(jié)果中列的數(shù)字。選項(xiàng)ASC表示升序,DESC表示降序。例如:將sb.dbf的記錄按部門升序排列,部門相同時(shí)按價(jià)格降序排序。select 編號(hào),名稱,部門,價(jià)格from sb order by 部門,價(jià)格 DESC (13)top 子句:必須與order by子句同時(shí)使用。表示在符合條件的記錄中選取的記錄數(shù),范圍132767,排序后并列的若干記錄只計(jì)一個(gè)。含percent選項(xiàng)時(shí),

35、表示百分比,記錄數(shù)為小數(shù)時(shí)自動(dòng)取整,范圍0.0199.99。例如在上例命令中若增加子句“top 50 percent”,表示在符合條件的記錄中選取50%個(gè)記錄。二、join命令用于實(shí)現(xiàn)兩個(gè)表的聯(lián)接。1、四種專門的關(guān)系運(yùn)算符關(guān)系數(shù)據(jù)庫的創(chuàng)始人E.F.Codd提出的4種關(guān)系運(yùn)算:選擇、投影、聯(lián)接和除法。VFP支持前3種?!斑x擇” for 或 while “投影” fields 或 set filter to 或 set fields to 2、JOIN命令的格式:命令格式:join with | to for fields nooptimize功能:按聯(lián)接條件,將當(dāng)前工作區(qū)中的表與另一個(gè)表進(jìn)行聯(lián)接

36、,產(chǎn)生一個(gè)新表。例:close allselect 1use zzselect 2use sbjoin with zz to zzsb fields 編號(hào),名稱,zz.增值 for 編號(hào)=zz.編號(hào)use zzsbbrow3、select-sql命令的join子句join命令在VFP中可以由select-sql命令來代替。三、select-sql命令查詢示例select-sql命令的基本形式:select-from-where再加上子句:group by, order by , having, to|into 1. 單表查詢示例例3-16 查詢大修過的所有設(shè)備select distinct 編

37、號(hào) from dx查詢結(jié)果在瀏覽窗口中顯示,改用all參數(shù)有何不同?例3-17 求出每一設(shè)備的增值金額,并送至打印機(jī)打印。select 編號(hào),sum(增值) from zz group by 編號(hào) to printer例3-18 找出大修費(fèi)用已超過5000元的設(shè)備,并將結(jié)果存入數(shù)組ADXselect 編號(hào) from dx group by 編號(hào) having sum(費(fèi)用)5000 into array adx循環(huán)結(jié)構(gòu),程序設(shè)計(jì)部分內(nèi)容for i=1 to alen(adx) &函數(shù)alen返回?cái)?shù)組元素的個(gè)數(shù) ?adx(i)next?adx(1)?adx(2)例3-19 求價(jià)格低于20000元

38、的設(shè)備名稱、啟用日期與部門,并按啟用日期升序排序。select 名稱,啟用日期,部門 from sb where 價(jià)格20000 order by 啟用日期 asc2. 多表查詢示例通過公共字段將若干個(gè)表兩兩地“聯(lián)接”起來,使它們象一個(gè)表那樣接受檢查。例3-20 查詢增值設(shè)備的編號(hào)、名稱及每次增值的金額。解一:select sb.編號(hào),sb.名稱,zz.增值 from sb inner join zz on sb.編號(hào)=zz.編號(hào)解二:select sb.編號(hào),sb.名稱,zz.增值 from sb,zz where sb.編號(hào)=zz.編號(hào)例3-21 試匯總設(shè)備的大修費(fèi)用,要求:(1)sb.編

39、號(hào)頭3位小于038。(2)顯示設(shè)備名稱與大修費(fèi)用小計(jì)。(3)顯示結(jié)果按大修費(fèi)用小計(jì)降序排列。解一:select sb.名稱,sum(dx.費(fèi)用) from sb inner join dx on sb.編號(hào)=dx.編號(hào);where left(sb.編號(hào),3)”038”;group by dx.編號(hào);order by 2 descending解二:select sb.名稱,sum(dx.費(fèi)用) from sb,dx; where sb.編號(hào)=dx.編號(hào) and left(sb.編號(hào),3)”038”;group by dx.編號(hào);order by 2 descending例3-22 找出增值設(shè)備的

40、名稱,所屬部門和累計(jì)增值金額select sb.名稱 as 設(shè)備名,bmdm.名稱 as 部門名,sum(zz.增值) as 累計(jì)增值額;from sb,bmdm,zz;where sb.編號(hào)=zz.編號(hào) and sb.部門=bmdm.代碼 group by zz.編號(hào)3.5.2 用查詢設(shè)計(jì)器建立查詢優(yōu)點(diǎn):能以查詢文件(*.qpr)的形式保存查詢。一、查詢設(shè)計(jì)器的操作步驟基本步驟:打開查詢設(shè)計(jì)器-進(jìn)行查詢設(shè)置,即設(shè)置被查詢的表、聯(lián)接條件、字段等輸出要求和查詢結(jié)果去向-執(zhí)行查詢-保存查詢設(shè)置。例3-23 查詢要求同例3-20,查詢增值設(shè)備的編號(hào)、名稱及每次增值的金額。試用查詢設(shè)計(jì)器來顯示設(shè)備的編

41、號(hào)、名稱和增值。操作步驟:(1)打開查詢設(shè)計(jì)器窗口: 菜單:“文件”“新建”“查詢” 命令:modify query (2)確定要查詢的表sb.dbf和zz.dbf: “打開”對(duì)話框“添加表或視圖”“其他” “查詢”菜單“添加表”(3)設(shè)置聯(lián)接條件:系統(tǒng)自動(dòng)聯(lián)接,用戶也可以修改或刪除連接條件。 修改:在連線上雙擊;或下窗口的“聯(lián)接”條件 刪除:選中連線后按Del鍵;或選中連線后單擊下窗口的“移去”按鈕(4)選取輸出字段:說明:允許不設(shè)置連接條件,但一定要選取輸出字段,否則,查詢不能進(jìn)行。(5)執(zhí)行查詢:“查詢”菜單“運(yùn)行查詢”其他的3種方法:方法一:查詢設(shè)計(jì)器窗口右鍵單擊,選定運(yùn)行運(yùn)行查詢命令

42、。方法二:“程序”菜單“運(yùn)行”選定某一查詢文件“運(yùn)行”方法三:執(zhí)行“do ”,注意:要寫出擴(kuò)展名(.qpr)。(6)查詢的保存方法:方法一:Ctrl+W方法二:“關(guān)閉按鈕”或“控制菜單”方法三:“文件”“保存”(Ctrl+S)二、查詢設(shè)計(jì)器的界面組成1上部窗格 表添入的方法:“查詢”菜單“添加表” 查詢設(shè)計(jì)器工具欄“添加表”按鈕說明:系統(tǒng)自動(dòng)設(shè)置連接條件兩個(gè)表之間的連線;用戶可以修改和編輯;還可以拖動(dòng)已索引的字段來創(chuàng)建聯(lián)接,雙擊連線修改和編輯連接條件2下部窗格(1)“字段”選項(xiàng)卡 可用字段:列出已打開表的所有字段。 “函數(shù)和表達(dá)式”文本框:可以直接鍵入,也可以用表達(dá)式生成器生成。 添加按鈕:用

43、于在選定所需字段。 選定字段列表框:用來列出輸出表達(dá)式。拖動(dòng)可以改變輸出的順序。注意:排序依據(jù)或分組依據(jù)選項(xiàng)卡中使用的所有表達(dá)式,均須預(yù)先在字段選項(xiàng)卡中設(shè)置為輸出表達(dá)式。(2)聯(lián)接選項(xiàng)卡 “類型”列:指定聯(lián)接的類型左 表右 表記 錄aaaabb11cc聯(lián)接類型意 義查詢結(jié)果inner join(內(nèi)部聯(lián)接)只有滿足聯(lián)接條件的記錄包含在結(jié)果中aa aaleft outer join(左聯(lián)接)用左表的記錄與右表進(jìn)行聯(lián)接匹配,不滿足條件的產(chǎn)生一個(gè)含NULL值的記錄。直至左表所有的記錄都比較完。aa aabb NULLcc NULLright outer join(右聯(lián)接)用右表的記錄與左表進(jìn)行匹配。N

44、ULL 11aa aafull join(完全聯(lián)接)先按右聯(lián)接比較字段值,再按左聯(lián)接比較字段值。不列入重復(fù)記錄。NULL 11aa aabb NULL cc NULL “字段名”列:用于指定聯(lián)接條件的第一個(gè)字段。 “條件”列:用于指定比較類型。除關(guān)系運(yùn)算符(and or not)外還可以使用3種條件:between: 函數(shù)between(,)功能:即值在低值與高值之間返回.T.in: 函數(shù)inlist(,)功能:與其它表達(dá)式之一值相等就返回.T.is NULL: 表示可包含null值?!胺瘛绷校罕硎救∩鲜鰲l件之反?!爸怠绷校褐付?lián)接條件中另一個(gè)表的字段?!斑壿嫛绷校簝H當(dāng)本行和下面的行條件組合成

45、復(fù)合條件時(shí)使用。“插入”按鈕:在所選條件的上方插入一個(gè)空白條件行?!耙迫ァ卑粹o:刪除查詢條件。(3)“篩選”選項(xiàng)卡指定記錄的篩選條件(4)“排序依據(jù)”選項(xiàng)卡用來指定多個(gè)排序字段或排序表達(dá)式(必須先在字段選項(xiàng)卡中設(shè)置好!)(5)“分組依據(jù)”選項(xiàng)卡用來指定分組的字段或分組的表達(dá)式。滿足條件按鈕:用于為分好的記錄組設(shè)置選擇記錄的條件。(6)“雜項(xiàng)選”項(xiàng)卡指定是否對(duì)重復(fù)記錄進(jìn)行查詢,是否需要對(duì)記錄進(jìn)行限制,包括返回記錄的最多個(gè)數(shù)或最大百分比等。例3-24 試通過查詢設(shè)計(jì)器查詢操作步驟:(1)打開查詢設(shè)計(jì)器:輸入命令 modify query fyhz(2)確定表sb和dx(3)設(shè)置聯(lián)接條件“dx.編號(hào)

46、=sb.編號(hào)”(4)設(shè)置篩選條件“l(fā)eft(sb.編號(hào),3)”038”(5)設(shè)置輸出表達(dá)式sb.名稱和sum(dx.費(fèi)用)(6)設(shè)置按表達(dá)式sum(dx.費(fèi)用)降序輸出(7)按字段dx.編號(hào)分組(8)執(zhí)行查詢(9)保存查詢:Ctrl+W fyhz.qpr3. 查詢菜單的菜單命令(1)運(yùn)行查詢(2)查看sql:能對(duì)照學(xué)習(xí)SQL語言。(3)查詢?nèi)ハ?瀏覽按鈕 臨時(shí)表按鈕 表按鈕 圖形按鈕 屏幕按鈕 報(bào)表按鈕 標(biāo)簽按鈕3.5.3 查詢結(jié)果的圖形處理 例3-25 將查詢結(jié)果以柱形圖輸出(1)在命令窗口輸入:_gengraph=”c:vfpwizardswzgraph.app” & VFP系統(tǒng)所在的路徑

47、執(zhí)行后能使“查詢?nèi)ハ颉睂?duì)話框中的“圖形”按鈕變成可用。(2)打開查詢設(shè)計(jì)器:modify query fyhz(3)確定輸出類型:“查詢”“輸出去向”“圖形”按鈕“確定”(4)圖形設(shè)置:“查詢”“運(yùn)行”在可用字段列將“sum_費(fèi)用”拖放到數(shù)據(jù)系列列表框中,將“名稱”拖放到顯示“坐標(biāo)軸”字樣的矩形框中。 標(biāo)題:“大修費(fèi)用匯總圖” “另存為”:fyhz.scx(5)運(yùn)行表單文件:do form fyhz3.6 數(shù)據(jù)庫與視圖視圖(*.vue)是在數(shù)據(jù)庫表(不是自由表)的基礎(chǔ)上創(chuàng)建的一種虛擬表。3.6.1 數(shù)據(jù)庫表一、數(shù)據(jù)庫的基本概念數(shù)據(jù)庫:就是存放數(shù)據(jù)庫表等數(shù)據(jù)對(duì)象及它們之間關(guān)系的“容器”。數(shù)據(jù)庫表

48、:屬于某一個(gè)數(shù)據(jù)庫的表。與自由表的區(qū)別。二、用數(shù)據(jù)庫設(shè)計(jì)器設(shè)計(jì)數(shù)據(jù)庫1、數(shù)據(jù)庫設(shè)計(jì)器一種進(jìn)行數(shù)據(jù)庫管理的輔助設(shè)計(jì)窗口,能顯示數(shù)據(jù)庫中表、視圖和關(guān)系。說明:使用“數(shù)據(jù)庫”菜單中的屬性命令能顯示和隱藏其中的對(duì)象。2、數(shù)據(jù)庫文件(*.DBC)的創(chuàng)建例3-26 創(chuàng)建數(shù)據(jù)庫sbsj,要求包含sb,bmdm,dx,zz四個(gè)表。方法一:“文件”“新建”方法二:create database crea database sbsjcreate table dx2(編號(hào) c(5),年月 c(4),費(fèi)用 n(6,1)3、數(shù)據(jù)庫的關(guān)閉和刪除關(guān)閉命令:close datebase all 關(guān)閉所有的數(shù)據(jù)庫刪除命令:delete database deletetables注意:若要?jiǎng)h除數(shù)據(jù)庫必須先關(guān)閉它。數(shù)據(jù)庫表的移去命令:remove tables4、數(shù)據(jù)庫文件(*.dbc)數(shù)據(jù)庫文件本身也是一個(gè)表。其中記載了它的所有表的參數(shù),及索引、關(guān)聯(lián)等有關(guān)參數(shù)。例:close database alluse sbsj.dbcbrowse三、用項(xiàng)目管理器管理數(shù)據(jù)項(xiàng)目管理器:用于組織和管理項(xiàng)目中的文件,即建立、修改和查看這些文件,可作為應(yīng)用開發(fā)系統(tǒng)開發(fā)維護(hù)的控制中心。例3-27 創(chuàng)建項(xiàng)目管理器sbgl,要求添入數(shù)據(jù)庫sbsj,并查看該數(shù)據(jù)庫。略3.6.2 數(shù)據(jù)詞(字)典數(shù)據(jù)詞典:用于保存對(duì)數(shù)據(jù)庫中各種數(shù)

溫馨提示

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

評(píng)論

0/150

提交評(píng)論