計(jì)算機(jī)基礎(chǔ)vfp第5章數(shù)據(jù)排序檢索統(tǒng)計(jì)和多表操作_第1頁
計(jì)算機(jī)基礎(chǔ)vfp第5章數(shù)據(jù)排序檢索統(tǒng)計(jì)和多表操作_第2頁
計(jì)算機(jī)基礎(chǔ)vfp第5章數(shù)據(jù)排序檢索統(tǒng)計(jì)和多表操作_第3頁
計(jì)算機(jī)基礎(chǔ)vfp第5章數(shù)據(jù)排序檢索統(tǒng)計(jì)和多表操作_第4頁
計(jì)算機(jī)基礎(chǔ)vfp第5章數(shù)據(jù)排序檢索統(tǒng)計(jì)和多表操作_第5頁
已閱讀5頁,還剩55頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第五章 數(shù)據(jù)排序、檢索、統(tǒng)計(jì)和多表操作本章知識(shí)點(diǎn): 1、記錄的分類排序和索引排序 2、數(shù)據(jù)的查詢 3、多工作區(qū)操作與表之間的關(guān)聯(lián)5.1 分類排序 一、表的排序 表文件中的記錄順序是按照記錄輸入的先后順序排列的,我們可以按照數(shù)據(jù)處理的需要,按照字段值的大小對(duì)記錄進(jìn)行重新排列。VFP提供了分類排序和索引排序兩種方法,分類排序是把排序結(jié)果放到一個(gè)新的表中,索引排序不產(chǎn)生新表,而是產(chǎn)生索引文件來表示記錄的排序。 1、排序命令SORT TO ON /A|D|C , /A|D|C FIELDS FOR|WHILENote: /A:升序(默認(rèn)) /D:降序 /C:不區(qū)分字母的大小寫。 多個(gè)關(guān)鍵字段要用“,”

2、隔開,第一個(gè)為主關(guān)鍵字段。 為排序后生成的新文件,狀態(tài)是關(guān)閉的。 不能對(duì)備注和通用字段排序。 帶刪除標(biāo)記的記錄不參加排序。 2、應(yīng)用舉例例1:對(duì)學(xué)生表按入校總分的升序排序,結(jié)果存入“有序 表1.dbf ”,然后查看排序效果。例2:對(duì)學(xué)生表中所有男同學(xué)記錄的入??偡职唇敌蚺?列,結(jié)果表“有序表2.dbf ”中只包含姓名、性別、 入??偡肿侄?。5.2 索引排序用SORT命令排序產(chǎn)生的問題: 1.分類排序產(chǎn)生的新表浪費(fèi)磁盤空間。 2.對(duì).DBF表文件的查詢速度慢。索引文件能很好地解決以上問題: 1.索引創(chuàng)建的文件不是表,而是索引文件,索引文件中存放的只是記錄號(hào)和排序字段,節(jié)省了空間。 2.VFP提供

3、了索引查詢方式,有很快的查詢速度。 1.索引的概念索引文件:就是按照索引關(guān)鍵字將文件中的記錄進(jìn)行邏輯上排序而生成的一個(gè)特殊的文件。此文件不可顯示,它主要包含一張表(或稱對(duì)應(yīng)關(guān)系),由兩部分組成:索引關(guān)鍵字表達(dá)式(索引項(xiàng))和指向原數(shù)據(jù)庫中與關(guān)鍵字相對(duì)應(yīng)的記錄號(hào)。 2.索引的分類Foxpro提供了單索引與復(fù)合索引兩種索引文件。 單索引文件:按照一個(gè)關(guān)鍵字表達(dá)式建立的索引文件,擴(kuò)展 名.IDX。復(fù)合索引文件:可以包含多個(gè)索引項(xiàng)(或索引表達(dá)式)的索引文件,擴(kuò)展名.CDX。每一個(gè)索引項(xiàng)稱為一個(gè)標(biāo)記(TAG)。其中復(fù)合索引又有以下四種:復(fù)合索引的四種類型: 主索引:不允許字段值重復(fù),它僅適用于數(shù)據(jù)庫表。

4、候選索引:不允許字段值重復(fù)。 普通索引:允許字段值重復(fù)。表中可以有多個(gè)普通索引。 惟一索引:允許字段值重復(fù),但出現(xiàn)重復(fù)值時(shí),只輸出其 中的第一個(gè)記錄。1)表設(shè)計(jì)器法 步驟:打開表“顯示”表設(shè)計(jì)器 3.索引的建立2)命令法 index on 索引表達(dá)式 to 單索引文件名 index on 索引表達(dá)式 tag 復(fù)合索引標(biāo)記 Note: 、索引關(guān)鍵字不能是M、G型。 、索引不能以/A/D表升降序,可以用ASCE表升序,復(fù)合索引還可用DESC表降序。 、索引關(guān)鍵字組合中,多個(gè)關(guān)鍵字必須為相同類型,且主關(guān)鍵字在前。演示舉例:(單索引與復(fù)合索引)例1:對(duì)學(xué)生表按入校總分建立索引。例2:對(duì)學(xué)生表按姓名建立

5、索引,當(dāng)姓名相同時(shí)按出生日期排列。例3:對(duì)選課表建立索引,要求記錄按學(xué)號(hào)升序排列,學(xué)號(hào)相同時(shí)按成績升序排列。 4. 主控索引 一個(gè)表可創(chuàng)建多個(gè)單索引文件和一個(gè)復(fù)合索引文件,而后者可以又可以有多個(gè)排序索引項(xiàng)(即多個(gè)索引標(biāo)記),如何確定現(xiàn)在的記錄究竟按哪個(gè)字段順序排列,需要設(shè)置主控索引。主控索引就是從多個(gè)索引項(xiàng)中選擇當(dāng)前排序的字段。SET ORDER TO 數(shù)值|TAG標(biāo)記名|單索引名 注意:1. 用索引命令最后創(chuàng)建的索引是默認(rèn)主控索引。2. 用SET ORDER TO 或SET ORDER TO 0 關(guān)閉 主控索引。 5.索引的打開與關(guān)閉 索引主要用于快速查詢及建立表間的關(guān)聯(lián)。在使用索引前必須打

6、開表、打開索引文件、確定主控索引。 創(chuàng)建索引文件就同時(shí)打開索引文件。 結(jié)構(gòu)復(fù)合索引隨著表文件的打開而自動(dòng)打開。 用命令的方法與表一起或分別打開。用命令打開索引:方法1:USE 表名|INDEX 索引名表|ORDER 數(shù)值|單 索引名|TAG 標(biāo)記方法2:SET INDEX TO 索引文件名表ORDE 數(shù)值| 單索引名|TAG 標(biāo)記索引文件的關(guān)閉CLOSE INDEXSET INDEX TO關(guān)閉表文件的同時(shí)也關(guān)閉此表的所有索引。索引文件的更新 REINDEX 功能:對(duì)關(guān)閉的索引文件,按照修改后的數(shù)據(jù)重新索引。 6.索引的更新和刪除索引的刪除方法1:表設(shè)計(jì)器法方法2:命令法 Delete tag

7、all |索引標(biāo)識(shí)1,索引標(biāo)識(shí)25.3 數(shù)據(jù)檢索 數(shù)據(jù)的檢索就是從數(shù)據(jù)表中查詢出所需的記錄,即查詢。它是按給定條件查找符合條件的記錄。分為順序查詢和索引查詢。 1.順序查詢從指定范圍的第1個(gè)記錄開始依次查詢符合條件的記錄。 (1)查找第一條符合條件的記錄 命令格式:Locate 范圍 for 說明:不必對(duì)表文件進(jìn)行索引。 (2)繼續(xù)順序查找符合上述條件的下一記錄 命令格式:Continue 說明:該命令不能單獨(dú)使用。例:在表中查找平均成績=80的男生Locate for 平均成績=80.and.性別男Continue 索引查詢又稱快速查詢,是按照表記錄的邏輯位置查詢。因此,索引查詢要求被查詢表

8、文件建立并打開索引。(1)查找第一個(gè)符合條件的記錄 Find |& 說明:在該命令中,字串常量省略定界符。 Seek 說明:在該命令中,字串常量不可省略定界符。 (2)繼續(xù)查找符合上述條件的記錄 命令格式:Skip 2.索引查詢Note: 在進(jìn)行索引查詢時(shí),必須要打開相應(yīng)的索引文件并使其成為主控索引; 當(dāng)記錄的索引表達(dá)式值與Find或Seek命令后的查詢值相等時(shí)則認(rèn)為條件相符,則通過found( )測試的結(jié)果為真。例1:在“學(xué)生.dbf”中查找“張建國”Xm= “張建國”Seek xm 或 find &xm例2:在“學(xué)生.dbf”表中查找“李華明”Use 學(xué)生Index on 姓名 to xm

9、Seek “李華明” 或 find 李華明If found( ) dispElse ?”李華明不在學(xué)生表中!”EndifUse 1、求記錄個(gè)數(shù) Count 范圍 for to Note:、若省略范圍和條件則計(jì)算所有記錄。、在set delete on下,作過刪除標(biāo)記的記錄將不被統(tǒng)計(jì)。、用于存放統(tǒng)計(jì)結(jié)果。例:在成績表中統(tǒng)計(jì)平均成績大于或等于80的女生人數(shù)nv。 Use 成績 Count for .not.性別 .and. 平均成績=80 to nv ?nv use問:此例中性別字段是什么類型?5.4 數(shù)據(jù) 統(tǒng)計(jì)2、求和 Sum 范圍 N型字段表 for to |arrayNote:、若省略范圍和

10、條件則對(duì)所有記錄的數(shù)值字段分別求和。、只能對(duì)N型字段求和。例:在成績表中計(jì)算總平均成績zpj。 Use 成績 sum 平均成績 to zpj ?zpj Use3、求平均值 Average 范圍 N型字段表 for to |array Note: 、若省略范圍和條件則對(duì)所有記錄的數(shù)值字段求平均值。 、只能對(duì)N型字段求平均值。 例:在成績表中計(jì)算班機(jī)平均分pjf。 Use 成績 average 平均成績 to pjf ?pjf Use4、分類匯總 Total to on 范圍 fields for Note: 、若省略范圍和條件則對(duì)所有記錄分類匯總。 、只對(duì)N型字段分類匯總。 、使用該命令前,必須

11、按關(guān)鍵字段進(jìn)行索引或排序。例:在學(xué)生表中按性別分類匯總。 Use 學(xué)生 index on 性別 to xb total to toxb on 性別 fields pjcj use toxb list Use書名銷售量單價(jià)合計(jì)微機(jī)原理21020Foxpro166數(shù)據(jù)結(jié)構(gòu)3721Foxpro2612Foxpro166數(shù)據(jù)結(jié)構(gòu)2714例:某書店有如下書籍銷售情況表XS.DBF,試按書名對(duì)其分類匯總。書名銷售量合計(jì)Foxpro424數(shù)據(jù)結(jié)構(gòu)535微機(jī)原理220Use xsIndex to sm on 書名Total to xs0 on 書名 fields 書名,銷售量,合計(jì)Use xs0List us

12、e5、計(jì)算命令(財(cái)務(wù)統(tǒng)計(jì)) Calculate 范圍for to |arrayNote:若省略范圍和條件則對(duì)所有記錄進(jìn)行統(tǒng)計(jì)。例:在成績.dbf中統(tǒng)計(jì)最高分和最低分 Use 成績 calculate max(平均成績),min(平均成績) to ma,mi ? ma,mi use 常用函數(shù): count()按列值統(tǒng)計(jì)個(gè)數(shù) sum()按列計(jì)算值的總和 avg()按列計(jì)算平均值 max()求列中最大值 min()求列中最小值5.5 多個(gè)表的操作1、多區(qū)操作的特點(diǎn) (1)每個(gè)工作區(qū)只能打開一個(gè)表文件,一個(gè)表文件也不能在一個(gè)以上的工作區(qū)中同時(shí)打開。 (2)用戶能直接操作的工作區(qū)稱為當(dāng)前工作區(qū)(只能有一

13、個(gè)工作區(qū)成為當(dāng)前工作區(qū)),當(dāng)前工作區(qū)中的表成為當(dāng)前表;在啟動(dòng)FoxPro后,系統(tǒng)自動(dòng)將1號(hào)工作區(qū)設(shè)為當(dāng)前工作區(qū)。 (3)系統(tǒng)為每個(gè)工作區(qū)中打開的表設(shè)置一個(gè)記錄指針,一般情況下,它們各自獨(dú)立、互不干擾。一、多工作區(qū)的設(shè)置2、工作區(qū) (1) 工作區(qū)編號(hào):132767 (2) 工作區(qū)別名:AJ(或 aj),分別表示110號(hào)工作區(qū)。 (3) 若未選擇工作區(qū),系統(tǒng)默認(rèn)在1號(hào)工作區(qū)打開表。3、工作區(qū)的選擇 (1)選擇指定工作區(qū)為當(dāng)前工作區(qū) Select 說明:表別名由命令指定:use 表名 alisa 別名 Select 0 選擇未使用的編號(hào)最小的工作區(qū)。 (2)在指定工作區(qū)中打開表文件 Use in 說

14、明:該命令不改變當(dāng)前工作區(qū)。例:進(jìn)行下列操作后,當(dāng)前工作區(qū)是多少? Select 1 Select 3 Select 2 Select 1 Use D:qudeningchj_jl Use D:qudeningchj_jl1 in 2 List當(dāng)前工作區(qū)是 1當(dāng)前工作區(qū)是 2答: chj_jl.DBF 在第二例中,將列出哪個(gè)表的內(nèi)容?4、工作區(qū)的訪問 (1)當(dāng)前工作區(qū)中字段的引用:直接使用字段名 (2)非當(dāng)前工作區(qū)中字段的引用 格式1:工作區(qū)別名.字段名|表別名.字段名 格式2:工作區(qū)別名-字段名|表別名-字段名說明:不能在字段名前使用工作區(qū)編號(hào)1、2 、3; 當(dāng)前工作區(qū)中的字段也可使用上述兩

15、種進(jìn)行引用。例:教材P88例5-15。 選擇具有相同值的字段作為關(guān)鍵字,用命令建立關(guān)聯(lián),能使當(dāng)前工作區(qū)表的記錄指針移動(dòng)時(shí),帶動(dòng)被訪問工作區(qū)中表的記錄指針按照關(guān)鍵字值作同步移動(dòng),保證了所操作的不同表中是同一對(duì)象的數(shù)據(jù)。 根據(jù)父表與子表關(guān)聯(lián)字段的聯(lián)系,表之間記錄的關(guān)聯(lián)有四種方式:一對(duì)一、一對(duì)多、多對(duì)一、多對(duì)多。二、關(guān)聯(lián)的建立1、關(guān)聯(lián)命令(邏輯連接:多對(duì)一的關(guān)系)Set relation to into additiveNote:、別名工作區(qū)中的表文件必須按公共關(guān)鍵字段索引,并成為主 控索引。、若省略additive,則在建立關(guān)聯(lián)時(shí)將關(guān)閉當(dāng)前表以前的關(guān)聯(lián)。、關(guān)聯(lián)后,子表指針指向關(guān)鍵字段值與父表相同的

16、第一條記錄 上。若子表中沒有這樣的記錄,則指向文件尾。 當(dāng)前表文件:父表(主動(dòng))關(guān)系 別名表文件:子表(被動(dòng))2、一對(duì)多關(guān)系的說明 set skip to 工作區(qū)別名3、撤消關(guān)聯(lián) Set relation to說明:關(guān)閉當(dāng)前表的所有關(guān)聯(lián)。三、兩表關(guān)聯(lián)多對(duì)一以學(xué)生表、選課表和課程表為例,通過數(shù)據(jù)記錄分析三表的關(guān)系:多對(duì)一例5-18(教材P90)在學(xué)生表、選課表中顯示各個(gè)同 學(xué)的選課情況。 分析:學(xué)號(hào)為公有關(guān)鍵字,且學(xué)生表的學(xué)號(hào)是唯一的,選課表的學(xué)號(hào)有重復(fù),現(xiàn)將學(xué)生.dbf作為父表,建立與選課.dbf的關(guān)聯(lián),顯然是一對(duì)多的關(guān)系。 命令序列為:多對(duì)一Sele 1Use 選課Inde on 學(xué)號(hào) ta

17、g xhSele 2Use 學(xué)生Set rela to 學(xué)號(hào) into aSet skip to aList all fiel 姓名,a.課程號(hào),a.成績Close allcancel 多對(duì)一選課學(xué)生課程多一多一多多三表關(guān)系:1、子表(學(xué)生、課程)并列并聯(lián)四、三表關(guān)聯(lián)多對(duì)一選課學(xué)生課程學(xué)號(hào)課程號(hào)參考代碼如下:多對(duì)一Close allClearUse 學(xué)生Index on 學(xué)號(hào) tag xhSele 2Use 課程Index on 課程號(hào) to kchSele 3Use 選課Set rela to 學(xué)號(hào) into a Set rela to 課程號(hào) into b addilist a.姓名,b.

18、課程名,成績Close tablescancel查看運(yùn)行效果2、子表(選課、課程)相連串聯(lián)學(xué)生選課課程學(xué)號(hào)課程號(hào)請(qǐng)看如下程序:ClearClose allUse 選課Index on 學(xué)號(hào) tag xhSele 2Use 課程Index on 課程號(hào) tag kchSele 3Use 學(xué)生Set rela to 學(xué)號(hào) into a Sele 1Set rela to 課程號(hào) into b addisele 3List 姓名,b.課程名,a.成績Close tablesCancel查看效果分析兩種關(guān)聯(lián)結(jié)果不同的原因,缺少一對(duì)多的說明:Set skip to 工作區(qū)別名注意: 兩表關(guān)聯(lián)后,當(dāng)父表指

19、針移動(dòng)時(shí),子表的記錄指針將定位在滿足條件的第1個(gè)記錄上。由此產(chǎn)生兩個(gè)結(jié)論: 由父表指針帶動(dòng)子表指針移動(dòng),不能相反。 當(dāng)建立關(guān)聯(lián)的父表與子表為一對(duì)多關(guān)系時(shí),必須用命令:set skip to 子表別名,以便實(shí)現(xiàn)子表中多記錄的操作與顯示,否則將只顯示多方表中的第1條。正確的串聯(lián)程序:ClearClose allUse 選課Index on 學(xué)號(hào) tag xhSele 2Use 課程Index on 課程號(hào) tag kchSele 3Use 學(xué)生Set rela to 學(xué)號(hào) into a Set skip to a Sele 1Set rela to 課程號(hào) into b addisele 3lis

20、t 姓名,b.課程名,a.成績Close tablesCancel查看效果結(jié)論: 無論采用何種方式關(guān)聯(lián)表,只要正確使用set skip to 命令,其結(jié)果都一樣。 表的數(shù)據(jù)更新是指在多個(gè)工作區(qū)打開多個(gè)表后,無須建立關(guān)聯(lián),用一個(gè)表的數(shù)據(jù)修改另一個(gè)表的數(shù)據(jù)。UPDATE ON FROM REPLACE WITH , WITH RANDOMNote:當(dāng)前表文件與別名表文件必須按公共關(guān)鍵字段索引,若加上RANDOM則可不對(duì)別名表文件進(jìn)行索引。 當(dāng)前表文件:(被動(dòng))關(guān)系 別名表文件:(主動(dòng))五、數(shù)據(jù)更新130微機(jī)原理65數(shù)據(jù)結(jié)構(gòu)100FoxPro60Basic庫存量書名KC.DBF30Basic10微機(jī)

21、原理15數(shù)據(jù)結(jié)構(gòu)0FoxPro庫存量書名JH.DBF30Basic120微機(jī)原理50數(shù)據(jù)結(jié)構(gòu)100FoxPro進(jìn)貨量書名KC.DBFSelect 1Use kcIndex to sm1 on 書名Select 2Use jhIndex to sm2 on 書名Select 1Update on 書名 from b replace 庫存量 with 庫存量+b.進(jìn)貨量130微機(jī)原理65數(shù)據(jù)結(jié)構(gòu)100FoxPro60Basic庫存量書名KC.DBF30Basic10微機(jī)原理15數(shù)據(jù)結(jié)構(gòu)0FoxPro庫存量書名JH.DBF30Basic120微機(jī)原理50數(shù)據(jù)結(jié)構(gòu)100FoxPro進(jìn)貨量書名KC.DBFJoin with to fields for Note:1)橫向連接表文件,并將連接的結(jié)果存入新 的表文件中。2)該命令不必對(duì)當(dāng)前表文件和別名表文件進(jìn) 行索引。六、表文件的連接3)FOR 是必選項(xiàng), 兩個(gè)表必須按條件的要求進(jìn)行連接,連接中最常用的是等值連接,即連接條件為兩個(gè)表中公共字段值應(yīng)相等。4)如

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論