版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、查詢、統(tǒng)計(jì)和多表操作表文件中記錄的順序通常是人們?cè)谳斎霐?shù)據(jù)時(shí)按輸入的先后次序存儲(chǔ)的,并以記錄號(hào)表示,這個(gè)順序只反映了存放數(shù)據(jù)的先后順序。但在數(shù)據(jù)處理實(shí)際應(yīng)用中,由于數(shù)據(jù)庫十分龐大,為了高效方便地處理數(shù)據(jù),常常需要對(duì)記錄位置進(jìn)行重新整理,并按某種指定的順序?qū)Ρ碛涗涍M(jìn)行處理。例如,對(duì)學(xué)生成績表按學(xué)號(hào)為序顯示輸出記錄,以便查找;或按總分高低為序輸出記錄,以便進(jìn)行比較等等。對(duì)記錄位置進(jìn)行重新整理通常有排序和索引兩種方法。排序是對(duì)表文件進(jìn)行物理位置的整理;索引是對(duì)表文件進(jìn)行邏輯位置的整理。一、 排 序表文件的排序操作就是根據(jù)表的某個(gè)關(guān)鍵字或關(guān)鍵字表達(dá)式重新排列表記錄的位置。執(zhí)行排序操作后將生成一個(gè)新的表
2、文件(稱為:排序文件)。新文件的結(jié)構(gòu)和數(shù)據(jù)可以與源文件完全相同,也可以只取源文件的部分字段。新文件不改變?cè)次募?nèi)容和記錄順序?!久睢?SORT TO<新文件名>ON <字段名1>/A /D /C ,<字段名2> /A /D /C ASCENDING|DESCENDING<范圍>FOR<條件>|WHILE<條件>FIELDS<字段名表>| FIELDS LIKE<通配符>|FIELDS EXCEPT<通配符>【功能】 對(duì)當(dāng)前表中指定范圍內(nèi)、滿足條件的記錄按
3、指定字段升序或降序重新排序,并將排序結(jié)果存入新文件名中?!菊f明】排序結(jié)果存入由TO <新文件名>指定的表文件中,系統(tǒng)默認(rèn)文件擴(kuò)展名為.DBF。在ON子句中的字段名表示排序的關(guān)鍵字段。當(dāng)使用一個(gè)關(guān)鍵字時(shí),叫“單重排序”;使用多個(gè)關(guān)鍵字時(shí),叫“多重排序”。在多重排序中,關(guān)鍵字有主次之分。主關(guān)鍵字是指能夠唯一標(biāo)識(shí)某個(gè)記錄的關(guān)鍵字;次關(guān)鍵字是指標(biāo)識(shí)具有某種相同屬性的某些記錄的關(guān)鍵字。在關(guān)鍵字表達(dá)式中,主關(guān)鍵字排在前面,次關(guān)鍵字排在后面。執(zhí)行排序操作時(shí),先按主關(guān)鍵字排列,當(dāng)在主關(guān)鍵字出現(xiàn)相同字段值時(shí),再按次關(guān)鍵字排序。關(guān)鍵字段可以是N型、C型或D型,但不能是L型、M型和G型數(shù)據(jù)。即不可選用備
4、注型或通用型字段來排序。其中:N型以數(shù)值大者為大;C型以拼音順序AZ;D型以后面的日期為大。參數(shù)/A或ASCENDING表示升序排序;/D或DESCENDING表示降序排序。省略時(shí),表示升序;/C只適用于C型數(shù)據(jù),選擇/C時(shí),不區(qū)分大小寫字母,省略/C時(shí),小寫字母大于大寫字母。省略<范圍>、FOR<條件>/WHILE<條件>等子句,則對(duì)所有記錄排序。FIELDS子句指新表中包含的字段,省略時(shí),默認(rèn)新表包含源表中所有字段。<字段名表>可以包含其他工作區(qū)中的表文件字段,但必須使用別名調(diào)用格式:工作區(qū)號(hào)->字段名;或:別名->字段名;或:別
5、名.字段名?!纠?-1】 對(duì)表文件“學(xué)生.DBF”中的男生按入??偡纸敌蚺判颍尚挛募叭胄?偡?DBF”,且新表中只包含學(xué)號(hào)、姓名、入校總分3個(gè)字段。USE 學(xué)生BROWSE && 顯示結(jié)果如圖5-1所示。圖5-1 學(xué)生.DBF顯示結(jié)果SORT TO 入??偡?ON 入??偡?D FIELDS 學(xué)號(hào),姓名,入??偡諹SE 入校總分BROWSE && 顯示結(jié)果如圖5-2所示。圖5-2 入校總分.DBF顯示結(jié)果【例5-2】 對(duì)“教師.DBF”記錄中享受政府津貼的教師按姓名升序排序,生成新文件“政府津貼.DBF”。USE 教師BROWSE && 顯
6、示結(jié)果如圖5-3所示。圖5-3 教師.DBF顯示結(jié)果SORT TO 政府津貼 ON 姓名 FOR 政府津貼USE 政府津貼BROWSE && 顯示結(jié)果如圖5-4所示。圖5-4 政府津貼.DBF顯示結(jié)果二、 索 引Visual FoxPro的索引文件由指向.DBF文件記錄的指針構(gòu)成,這些指針指向表文件中的記錄,在邏輯上按照指定索引關(guān)鍵字排序,索引并不改變表記錄的物理順序,只是與表記錄建立一種邏輯關(guān)系。索引和表(.DBF)分別存儲(chǔ)在兩個(gè)文件中。在索引文件中,只包含索引關(guān)鍵字和記錄號(hào)兩個(gè)字段,每個(gè)關(guān)鍵字值對(duì)應(yīng)表文件中的一個(gè)記錄號(hào),利用記錄指針的移動(dòng)確定記錄的邏輯順序。索引是一種不可顯
7、示文件。如果用戶希望按照某種特定順序查看和訪問表記錄,例如按總分從高到低的順序查看學(xué)生表中的記錄,可以按總分索引,然后根據(jù)這個(gè)索引關(guān)鍵字設(shè)置表中記錄的順序,并且按新的順序訪問表記錄。使用索引可以加速對(duì)表的查看和訪問操作,這類似于一本書按目錄快速查找內(nèi)容。1. 物理順序、邏輯順序與使用順序記錄儲(chǔ)存在表文件中的實(shí)際排列順序,稱為物理順序。執(zhí)行排序操作后,記錄在排序文件中形成的順序就是一種物理順序。按照某個(gè)關(guān)鍵字或關(guān)鍵字表達(dá)式在關(guān)鍵字與記錄號(hào)之間建立的一種邏輯上的順序,稱為邏輯順序。執(zhí)行索引操作后,索引關(guān)鍵字與記錄號(hào)建立的順序就是一種邏輯順序。實(shí)際操作的記錄順序,稱為使用順序。使用順序可以是物理順序
8、,也可以是邏輯順序。記錄指針在表記錄中的移動(dòng)是按使用順序進(jìn)行的。2. 索引的分類Visual FoxPro的索引分為單索引和復(fù)合索引。只包含一個(gè)索引項(xiàng)的索引文件,稱為單索引文件(又叫獨(dú)立索引文件)。單索引文件擴(kuò)展名為.IDX。包含有多個(gè)索引項(xiàng)的索引文件,稱為復(fù)合索引文件。在復(fù)合索引文件中每個(gè)索引項(xiàng)都有一個(gè)索引標(biāo)識(shí)(Index Tag),代表索引的名稱。復(fù)合索引文件自動(dòng)被壓縮,以壓縮方式儲(chǔ)存,占有較小空間。復(fù)合索引文件在使用時(shí)必須打開,而且在更新表文件數(shù)據(jù)時(shí),必須使其處于活動(dòng)狀態(tài)。復(fù)合索引文件擴(kuò)展名為.CDX。根據(jù)功能不同,復(fù)合索引可以分為主索引、候選索引、普通索引和唯一索引4種類型。(1)主索
9、引主索引是設(shè)定有主關(guān)鍵字的索引,主關(guān)鍵字能唯一確定記錄的順序,它不允許在指定字段中出現(xiàn)重復(fù)值。如果在任何已經(jīng)包含了重復(fù)數(shù)據(jù)的字段中指定主索引,Visual FoxPro 將返回一個(gè)錯(cuò)誤信息。例如,將姓名字段作為主索引關(guān)鍵字,若出現(xiàn)同名同姓人員,也即出現(xiàn)了關(guān)鍵字重復(fù)值,這樣的關(guān)鍵字就不是主關(guān)鍵字。主索引僅適用于表表,一個(gè)數(shù)據(jù)表只能創(chuàng)建一個(gè)主索引,自由表不能創(chuàng)建主索引。(2)候選索引像主索引一樣候選索引要求字段值的唯一性,它不包含 NULL值或重復(fù)值。如果在任何包括重復(fù)數(shù)據(jù)的字段中指定候選索引,Visual FoxPro 將返回一個(gè)錯(cuò)誤信息。一個(gè)數(shù)據(jù)表或自由表中都可以建立多個(gè)候選索引。(3)普通索
10、引普通索引不要求字段值具有唯一性,可以決定記錄的處理順序,且允許字段中出現(xiàn)重復(fù)值。一個(gè)數(shù)據(jù)表或自由表中可以有多個(gè)普通索引。(4)唯一索引不允許兩個(gè)記錄具有相同的字段值,對(duì)于關(guān)鍵字值相同的記錄,索引中只列入其中的第一個(gè)記錄。一個(gè)數(shù)據(jù)表或自由表中可以有多個(gè)普通索引。復(fù)合索引文件分為有結(jié)構(gòu)的結(jié)構(gòu)復(fù)合索引文件和無非結(jié)構(gòu)的獨(dú)立復(fù)合索引文件。結(jié)構(gòu)復(fù)合索引文件的由Visual FoxPro自動(dòng)命名,與表文件同名,它隨表文件的打開而打開,在對(duì)表增加或刪除記錄時(shí)系統(tǒng)會(huì)自動(dòng)維護(hù)。獨(dú)立復(fù)合索引文件與表文件不同名,且不隨表文件的打開而打開。打開獨(dú)立復(fù)合索引文件要使用SET INDEX命令。3. 永久關(guān)系與參照完整性主
11、索引用于表表中主表或“被引用”表,在一個(gè)永久關(guān)系中建立參照完整性。(1)永久關(guān)系指表中表之間的一種保存在數(shù)據(jù)表文件中的關(guān)系。在表設(shè)計(jì)器中可以看到連接兩個(gè)表索引之間的關(guān)系線。(2)參照完整性在永久關(guān)系的相關(guān)表中,如果只對(duì)其中的一個(gè)表進(jìn)行插入、更新或刪除操作,就會(huì)影響到數(shù)據(jù)的完整性。因此,參照完整性屬于表表間規(guī)則,用于控制數(shù)據(jù)的一致性。為了保持參照完整性,可以利用“參照完整性生成器”建立規(guī)則,控制記錄在相關(guān)表中的插入、更新或刪除。1. 命令方式【命令】 INDEX ON <索引關(guān)鍵字|索引關(guān)鍵字表達(dá)式> TO <單索引文件名> |T
12、AG<索引標(biāo)識(shí)名> OF <復(fù)合索引文件名> FOR<條件> COMPACT ASCENDING |DESCENDING UNIQUE | CANDIDATE ADDITIVE【功能】 對(duì)當(dāng)前表文件按指定關(guān)鍵字建立索引或增加索引標(biāo)識(shí)?!菊f明】<索引關(guān)鍵字|索引關(guān)鍵字表達(dá)式> :指定建立索引文件的關(guān)鍵字??梢允且粋€(gè)字段,也可以是多個(gè)字段組成的關(guān)鍵字表達(dá)式,多個(gè)字段之間用“十”或“一”連接,主關(guān)鍵字在最前面,且數(shù)據(jù)類型要相同。<索引關(guān)鍵字>可以是N型、C型、D型。TO 子句建立單索引(.IDX)。T
13、AG子句建立復(fù)合索引(.CDX)及索引標(biāo)識(shí)。選項(xiàng)COMPACT 指定單索引為壓縮文件。OF子句指定獨(dú)立復(fù)合索引文件名。缺省該子句表示建立結(jié)構(gòu)復(fù)合索引文件。FOR<條件> 對(duì)符合條件的記錄建立索引,缺省該條件則對(duì)所有記錄建立索引。ASCENDING表示升序索引;DESCENDING表示降序索引;UNIQUE表示建立唯一索引;TAG CANDIDATE表示候選索引。ADDITIVE表示建立索引文件時(shí),并不關(guān)閉先前的索引。索引文件不能單獨(dú)使用,必須同表文件一起使用。該命令默認(rèn)建立普通索引型索引文件?!纠?-3】 對(duì)學(xué)生.DBF按入校總分建立單索引文件。USE 學(xué)生INDEX ON 入???/p>
14、分 TO ZFLIST【例5-4】 學(xué)生.DBF建立復(fù)合索引,其中包含3個(gè)索引:(1)以姓名降序排列,索引標(biāo)識(shí)為普通索引。USE 學(xué)生INDEX ON 姓名 TAG xm DESCENDING*建立復(fù)合索引文件學(xué)生.CDX,xm為普通索引標(biāo)識(shí)LIST(2)以性別升序排列,性別相同時(shí)以入??偡稚蚺帕?,索引標(biāo)識(shí)為普通索引。INDEX ON 性別+STR(入??偡?3 TAG xbzfa*關(guān)鍵字為性別+STR(入??偡?3,普通索引標(biāo)識(shí)xbzfa加入學(xué)生.CDX中LIST(3)以性別升序排列,性別相同時(shí)以出生年月降序排列,索引標(biāo)識(shí)為候選索引
15、。INDEX ON 性別-DTOC(出生年月 TAG xbcsd CANDIDATE* xbcsd為候選索引型索引標(biāo)識(shí),索引標(biāo)識(shí)xbcsd加入學(xué)生.CDXLIST2. 菜單方式建立索引【菜單】 單擊“文件”菜單單擊“打開”命令選中“表”選項(xiàng)“顯示”菜單表設(shè)計(jì)器“索引” 選項(xiàng)卡“索引名”“排序”“類型”“表達(dá)式”單擊“確定”按鈕。如圖5-5所示。圖5-5 表設(shè)計(jì)器中”索引”選項(xiàng)卡【例5-5】 利用表設(shè)計(jì)器建立或修改索引。(1)選擇“文件”菜單中的“打開”命令,選擇表文件“學(xué)生.DBF”。(2)選擇“顯示”菜單中的表設(shè)計(jì)器,單擊“索引”選項(xiàng)卡,將“索引名”設(shè)為XBXHAD,單擊該表達(dá)式右側(cè)的按鈕,
16、彈出“表達(dá)式生成器”對(duì)話框,如圖5-6所示。在“字段”列表框中雙擊“性別”,在“數(shù)學(xué)”組合框中選定“+”號(hào),在“字段”列表框中雙擊“學(xué)號(hào)”,這時(shí),“表達(dá)式”列表框中顯示“性別+學(xué)號(hào)”。也可以在“表達(dá)式”列表框中直接輸入表達(dá)式“性別+學(xué)號(hào)”。圖5-6 表達(dá)式生成器(3)單擊“確定”按鈕,便完成建立工作。(4)利用“表設(shè)計(jì)器”對(duì)話框中的“插入”按鈕在當(dāng)前行前插入一個(gè)空行,可以建立新索引。利用“刪除”按鈕可以刪除選定的索引。使用索引查詢必須滿足以下條件:(1)打開表。(2)打開索引文件。(3)確定主控索引文件。(4)對(duì)于復(fù)合索引文件還需確定主控索引。1. 打開索引文件使用索引,必須同時(shí)打開表文件和索
17、引文件。打開索引文件就是把索引文件調(diào)入內(nèi)存,并對(duì)當(dāng)前相關(guān)表進(jìn)行排序。打開一個(gè)表文件時(shí),結(jié)構(gòu)化復(fù)合索引文件將隨著表文件的打開而打開,如果要使用其他索引文件,則要使用命令來打開索引文件。一個(gè)表文件可以打開多個(gè)索引文件,但任何時(shí)刻只有一個(gè)索引文件起作用,當(dāng)前起作用的索引文件稱為主控索引文件。只有主索引文件對(duì)表文件才有控制作用,記錄指針總是指向主索引文件關(guān)鍵字值的第一個(gè)記錄上。同一個(gè)復(fù)合索引文件可能包含多個(gè)索引標(biāo)識(shí),但任何時(shí)刻只有一個(gè)索引標(biāo)識(shí)起作用,當(dāng)前起作用的索引標(biāo)識(shí)稱為主控索引。打開索引文件有3種方法:(1)在建立索引文件的同時(shí),就打開了索引文件。(2)打開表文件的同時(shí)打開索引文件【命令】 USE
18、 <表文件名>|?INDEX <索引文件名表>|?ORDER <數(shù)值表達(dá)式>|<單索引文件名>|TAG<標(biāo)識(shí)名>OF <復(fù)合索引文件名> ASCENDING |DESCENDING【功能】 打開表文件的同時(shí)打開一個(gè)或多個(gè)索引文件?!菊f明】 INDEX <索引文件表>包括單索引或復(fù)合索引文件,其中第一個(gè)索引文件是主索引。選擇“?”將彈出多個(gè)表文件或索引文件,供選擇。ORDER <數(shù)值表達(dá)式>是將<索引文件名表>中的第幾個(gè)設(shè)置為主控索引。ORDER <單索引文件名>指定
19、<單索引文件名>為主控索引文件。ORDER TAG<標(biāo)識(shí)名>OF <復(fù)合索引文件名> 指定復(fù)合索引的<標(biāo)識(shí)名>為主控索引;不選擇OF <復(fù)合索引文件名> ,則打開結(jié)構(gòu)復(fù)合索引文件?!纠?-6】 應(yīng)用舉例。USE 學(xué)生 INDEX 學(xué)生 ORDER TAG xbxhaUSE 學(xué)生 INDEX 學(xué)生 ORDER TAG xm(3)打開表文件后再打開索引文件 【命令】 SET INDEX TO<索引文件名表> ADDITIVE 例如:USE 學(xué)生SET I
20、NDEX TO zf2. 設(shè)置主控索引如果只打開一個(gè)索引文件,它自然就是主控索引文件;如果打開了多個(gè)索引文件,可以利用設(shè)置主索引文件命令來改變主索引文件。【命令】 SET ORDER TO<數(shù)值表達(dá)式>|<單索引文件名>|TAG<索引標(biāo)識(shí)名>OF <復(fù)合索引文件名> ASCENDING|DESCENDING【功能】 對(duì)打開的索引文件中指定主控索引文件,或在打開的復(fù)合索引文件中設(shè)置主控索引。【說明】 SET ORDER TO 0 或SET ORDER
21、0;TO 都是取消主控索引文件或主控索引?!纠?-7】 為如圖5-7所示的復(fù)合索引文件學(xué)生.CDX設(shè)置主索引。圖5-7 復(fù)合索引文件學(xué)生.CDXUSE 學(xué)生SET ORDER TO 2 && 指定學(xué)生.CDX中的索引序號(hào)2(即xm)為主控索引。SET ORDER TO xbxha &&指定學(xué)生.CDX中的索引標(biāo)識(shí)xbxha為主控索引。SET ORDER TO zf &&指定單索引文件zf.IND為主控索引文件。3. 更新索引當(dāng)對(duì)表文件進(jìn)行追加、修改等操作后,對(duì)于打開的索引文件或隨著表文件打開而打開的復(fù)合索引文件,系統(tǒng)自動(dòng)將其更新,而對(duì)于那些沒有打
22、開的索引文件則變得無意義了。為了使這些索引文件仍然有效,可以利用重新索引命令,使其與修改后表文件保持一致?!久睢縍EINDEX COMPACT【功能】重新建立打開的索引文件?!菊f明】(1)在更新索引之前,應(yīng)打開表文件和相應(yīng)的索引文件。(2)選擇COMPACT,將非壓縮單索引文件轉(zhuǎn)換為壓縮單索引文件。【例5-8】更新索引舉例。USE 學(xué)生LIST && 顯示有10條記錄APPEND && 追加一條記錄USEUSE 學(xué)生 INDEX 學(xué)生 ORDER TAG xm &&打開主關(guān)鍵字為姓名的復(fù)合索引文件LIST && 顯示有11條記錄
23、被索引USE 學(xué)生SET INDEX TO ZF && 打開主關(guān)鍵字為入學(xué)總分的單索引文件LIST && 顯示只有10條記錄被索引REINDEXLIST && 顯示有11條記錄被索引4. 關(guān)閉索引文件關(guān)閉索引文件,就是取消索引文件對(duì)表文件的控制作用。關(guān)閉索引文件有三種方法:(1)關(guān)閉當(dāng)前索引文件:SET INDEX TO(2)關(guān)閉所有索引文件:CLOSE INDEX(3)關(guān)閉表文件的同時(shí),關(guān)閉索引文件:USE5. 刪除索引可以通過刪除復(fù)合索引文件中的索引標(biāo)識(shí)來刪除不再使用的索引,或者通過刪除單索引 文件本身來刪除獨(dú)立索引。刪除無用的索引標(biāo)識(shí)可以提
24、高數(shù)據(jù)處理性能,因?yàn)?Visual FoxPro 不必再去更新無用標(biāo)識(shí)來反映表中數(shù)據(jù)的變化。由于復(fù)合索引中包含由多個(gè)索引標(biāo)識(shí),所以應(yīng)采用刪除索引標(biāo)識(shí)的方法。【命令】 DELETE TAG ALL|<索引標(biāo)識(shí)1>,<索引標(biāo)識(shí)2>【菜單】 “文件”菜單“打開”命令“表”選項(xiàng)“顯示”菜單表設(shè)計(jì)器“索引”選項(xiàng)卡“索引名”“刪除”?!竟δ堋?從指定復(fù)合索引文件中刪除指定索引標(biāo)識(shí),或刪除所有索引標(biāo)識(shí)?!菊f明】 當(dāng)刪除指定復(fù)合索引文件中的全部標(biāo)識(shí)后,該復(fù)合索引文件將自動(dòng)被刪除。三、 查詢查詢就是按指定的查詢條件查找符合條件的記錄。排序和索引的主要目的也是為了對(duì)表文件快速查詢。Visu
25、al FoxPro提供了幾個(gè)與索引相關(guān)的函數(shù)FOUND()、RECNO()和三個(gè)檢索命令LOCATE與CONTINUE、SEEK|FIND、SQL語言的查詢命令:SELECT-SQL。1. 記錄找到否測(cè)試函數(shù)【命令】 FOUND(<工作區(qū)號(hào)>【功能】 判斷記錄是否找到?!菊f明】 如果記錄找到,則函數(shù)返回值為.T.;否則函數(shù)返回值為.F.。如果指定工作區(qū)中的表文件沒有打開,則函數(shù)返回值為假。2. 求得記錄號(hào)函數(shù)【命令】 RECNO(0【功能】 給出當(dāng)前正在使用的表文件的當(dāng)前記錄號(hào)?!菊f明】 若指定工作區(qū)中的表文件沒有打開,則函數(shù)返回值為0。順序查詢又叫直接查詢,是按照表記錄的物理位置
26、依次逐個(gè)查詢。1. 順序查詢命令(1)LOCATE命令【命令】 LOCATE范圍FOR<條件>|WHILE<條件>【功能】 從指定范圍內(nèi)查找滿足條件的第一個(gè)記錄,并將記錄指針定位在此?!菊f明】 省略范圍和FOR<條件>|WHILE<條件>,系統(tǒng)默認(rèn)為ALL。該命令一旦找到符合條件的第一個(gè)記錄,記錄指針立即指向該記錄,并且停止繼續(xù)查找,顯示其記錄號(hào),但不顯示記錄內(nèi)容;如果沒有找到,記錄指針則定位在范圍末尾,屏幕顯示“已到定位在范圍末尾”。2. CONTINUE命令【命令】 CONTINUE【功能】 與LOCATE命令連用,繼續(xù)查找LOCATE命令指
27、定條件的記錄?!菊f明】 CONTINUE命令必須用在LOCATE命令之后。每執(zhí)行一次CONTINUE命令,將繼續(xù)查找下一個(gè)符合條件的記錄?!纠?-9】 在“學(xué)生.DBF”中查找姓名為王小平的記錄。USE 學(xué)生LOCATE ALL FOR 姓名=“王小平”DISP CONTINUE && 屏幕顯示:已到定位在范圍末尾?!纠?-10】 在“教師.DBF”中查找職稱是教授的記錄。USE 教師LOCATE ALL FOR 職稱=“教授”DISPCONTINUEDISPCONTINUE && 屏幕顯示:已到定位在范圍末尾。索引查詢又叫快速查詢,是按照表記錄的邏輯
28、位置查詢。因此,索引查詢要求被查詢表文件建立并打開索引。1. FIND命令【命令】 FIND <字符型常量>|<數(shù)值型常量>【功能】 在打開的索引文件中查找索引關(guān)鍵字與<字符型常量>或<數(shù)值型常量>相匹配的第一個(gè)記錄,并將記錄指針定位在此?!菊f明】FIND命令只能對(duì)已建立并打開的索引文件進(jìn)行查詢。如果查找成功,記錄指針定位在符合條件的第一個(gè)記錄上,并停止繼續(xù)查找,F(xiàn)OUND(函數(shù)值為.T.;否則,屏幕顯示:“沒有找到?!保現(xiàn)OUND(函數(shù)值為.F.,EOF(函數(shù)值為.T.。FIND命令可以使用內(nèi)存變量,如果是C型內(nèi)存變量,必須宏代換:FIND &
29、amp; 型內(nèi)存變量 > ;如果是 N 型內(nèi)存變量,則先用 STR( 函數(shù)將其轉(zhuǎn)換為 C 型內(nèi)存變量后,再用宏代換。 FIND命令只查找符合條件的第一個(gè)記錄,與SKIP命令配套使用可以實(shí)現(xiàn)繼續(xù)查找。利用SET EXACT ON 命令可以實(shí)現(xiàn)對(duì)C型數(shù)據(jù)進(jìn)行精確查找,即要求C型數(shù)據(jù)精確匹配;利用SET EXACT OFF命令可以可以實(shí)現(xiàn)對(duì)C型數(shù)據(jù)進(jìn)行模糊查找,即不要求C型數(shù)據(jù)精確匹配。【例5-11】 在學(xué)生DBF中查找姓名為王小平的記錄。USE 學(xué)生INDEX ON 姓名TAG xmFIND 王小平DISP【例5-12】 在學(xué)生DBF中查找男同學(xué)的記錄。USE 學(xué)生INDEX ON 性別TA
30、G xbFIND 男LIST FOR 性別=“男”【例5-13】 使用內(nèi)存變量示例。tn=STR(595INDEX ON 入校總分 TAG rxzfFIND &tnDISP FIELDS 姓名,入校總分tm=“張 強(qiáng)”INDEX ON 姓名 TAG xmFIND &tmDISP FIELDS 姓名2. SEEK命令SEEK命令比FIND命令的功能更強(qiáng)。它不僅能夠查找C型和N型數(shù)據(jù),還能夠查找D型和L型數(shù)據(jù)?!久睢?SEEK<表達(dá)式>ORDER <索引號(hào)>|<單索引文件名>|TAG<索引標(biāo)識(shí)>【功能】 在打開的索引文件中查找主索引
31、關(guān)鍵字與<表達(dá)式>相匹配的第一個(gè)記錄,并將記錄指針定位在此。【說明】SEEK命令只能對(duì)已建立并打開的索引文件的表文件進(jìn)行檢索。如果查找成功,記錄指針定位在符合條件的第一個(gè)記錄上,并停止繼續(xù)查找,F(xiàn)OUND(函數(shù)值為.T.;否則,屏幕顯示:“沒有找到?!?,F(xiàn)OUND(函數(shù)值為.F.,EOF(函數(shù)值為.T.。SEEK命令可以查找C型、N型、D型、L型數(shù)據(jù)。如果查找C型常量,必須用定界符將C型常量引起來。SEEK命令只查找符合條件的第一個(gè)記錄,與SKIP命令配套使用可實(shí)現(xiàn)繼續(xù)查找。利用SET EXACT ON 命令可以實(shí)現(xiàn)對(duì)C型數(shù)據(jù)進(jìn)行精確查找,即要求C型數(shù)據(jù)精確匹配;利用SET EXA
32、CT OFF命令可以可以實(shí)現(xiàn)對(duì)C型數(shù)據(jù)進(jìn)行模糊查找,即不要求C型數(shù)據(jù)精確匹配?!纠?-14】 在“學(xué)生.DBF”中查找年齡為18歲的記錄和出生年月為1984年7月24號(hào)的記錄。USE 學(xué)生INDEX ON YEAR (DATE(-YEAR(出生年月 TAG njSEEK 18DISP ALL FOR YEAR (DATE(-YEAR(出生年月=18 INDEX ON 出生年月 TAG csSEEK1984/7/24DISP【例5-15】 在教師.DBF中查找享受政府津貼的教師。USE 教師INDEX ON 政府津貼 TAG zfjtSEEK .T.DISPSKIPDISPSKIP &&
33、amp;屏幕顯示:已到文件尾?!纠?-16】 精確查找和模糊查找舉例。USE 授課INDEX ON 課程號(hào) TAG kchSEEK“C16” ?FOUND( &&屏幕顯示:.T.SET EXACT ON &&設(shè)置精確配置SEEK“C16”?FOUND( &&屏幕顯示:.F.四、 統(tǒng)計(jì)對(duì)表文件進(jìn)行統(tǒng)計(jì)計(jì)算,包括計(jì)數(shù)、求和、求平均值、計(jì)算和匯總?!久睢?COUNT范圍FOR<條件>|WHIIE<條件>TO<內(nèi)存變量>【功能】 統(tǒng)計(jì)當(dāng)前表文件中指定范圍內(nèi)滿足條件的記錄個(gè)數(shù)?!菊f明】 省略全部選擇項(xiàng),則統(tǒng)計(jì)表文件中的
34、所有記錄;選擇TO<內(nèi)存變量>,將統(tǒng)計(jì)結(jié)果存入內(nèi)存變量中;否則,不保存統(tǒng)計(jì)結(jié)果,僅在屏幕上顯示?!纠?-17】 統(tǒng)計(jì)“學(xué)生.DBF”中學(xué)生總?cè)藬?shù)和女生總?cè)藬?shù)。USE 學(xué)生COUNT TO xszrsCOUNT FOR NOT 性別 TO nsrs?xszrs,nsrs &&屏幕顯示:10 4【命令】 SUM 范圍 型字段表達(dá)式表 >FOR< 條件 >|WHILE< 條件 >TO< 內(nèi)存變量表 >|ARRAY < 數(shù)組名 > 【功能】 在當(dāng)前表文件中,對(duì)指定范圍內(nèi)滿足條件的N型字段縱向求和。【說明】選擇 型字段表達(dá)
35、式表 > ,對(duì)表文件中指定 N 型字段求和,各字段間用逗號(hào)隔開。 求和結(jié)果存入內(nèi)存變量或數(shù)組,但數(shù)組必須已經(jīng)存在。省略所有選項(xiàng),則對(duì)表文件中所有N型字段求和?!纠?-18】 對(duì)學(xué)生.DBF求學(xué)生入??偡种?;對(duì)教師.DBF教師工資總和。USE 學(xué)生SUM 入??偡?TO rxzfSELECT 0USE 教師SUM 工資 TO gzzh?rxzf,gzzh &&屏幕顯示:5763.00 11000.00【命令】 AVERAGE 范圍 型表達(dá)式表 >FOR< 條件 >|WHILE< 條件 >TO< 內(nèi)存變量表 > |ARRAY <
36、; 數(shù)組 名 > 【功能】 在當(dāng)前打開表中,對(duì)指定范圍內(nèi)滿足條件的N型字段求縱向平均值?!菊f明】選擇 型字段表達(dá)式表 > ,對(duì)表文件中指定 N 型字段求平均,各字段之間用逗號(hào)隔開。 求平均結(jié)果存入內(nèi)存變量或數(shù)組,但數(shù)組必須已經(jīng)存在。省略所有選項(xiàng),則對(duì)表文件中所有N型字段求平均?!纠?-19】 求“學(xué)生.DBF”中學(xué)生的平均年齡。USE 學(xué)生AVER year(date(-year(出生年月 to nl ?nl &&屏幕顯示:18.10【命令】 CALCULATE 范圍<表達(dá)式表>FOR<條件>|WHILE<條件>TO<內(nèi)存變
37、量表> |ARRAY <數(shù)組名>【功能】 在當(dāng)前打開表中,分別計(jì)算<表達(dá)式表>的值?!菊f明】 <表達(dá)式表>由下列函數(shù)之一構(gòu)成:求算術(shù)平均值函數(shù)AVG(N型表達(dá)式);求記錄數(shù)函數(shù)CNT();求最大值函數(shù)MAX(<表達(dá)式>);求最小值函數(shù)MIN(<表達(dá)式>);求和函數(shù)SUM(N型表達(dá)式)?!纠?-20】 求“學(xué)生.DBF”中的入校總分最高分和最低分;求“教師.DBF”中的工資總和與平均工資。USE 學(xué)生CALCULATE MAX(入??偡? MIN(入校總分屏幕顯示:MAX(入??偡?MIN(入??偡?95 550SELECT 0U
38、SE 教師CALCULATE SUM(工資,AVG(工資屏幕顯示:SUM(工資 AVG(工資11000.00 2200.00【命令】 TOTAL ON<關(guān)鍵字段名>T0 匯總文件名范圍FOR<條件>|WHILE<條件>FIELDS 型字段名 > 【功能】 在當(dāng)前表中,對(duì)指定范圍內(nèi)滿足條件的記錄按關(guān)鍵字段名分類匯總求和,并生成一個(gè)新表文件(又叫匯總文件)。【說明】使用TOTAL之前,表文件必須按關(guān)鍵字排序或索引。選擇FIELDS 型字段名 > ,對(duì)指定 N 型字段分類求和;省略,則對(duì)所有 N 型字段分類求和。 <關(guān)鍵字段名>若為C型字段
39、時(shí),把與關(guān)鍵字相同的第一條記錄的字段值存入?yún)R總文件中;若為N型字段,則把與關(guān)鍵字值相同的記錄中該字段值求和后存入?yún)R總文件中。如果匯總文件的字段寬度容納不下匯總求和結(jié)果,系統(tǒng)將自動(dòng)新表文件的N型字段寬度以容納匯總結(jié)果。【例5-21】 對(duì)教師.DBF表文件按性別統(tǒng)計(jì)工資情況,按職稱統(tǒng)計(jì)工資情況。USE 教師 INDEX 教師 ORDER TAG xbTOTAL ON 性別 TO xbgz FIELDS 工資USE xbzgLISTUSE 教師 INDEX 教師 ORDER TAG zcLISTTOTAL ON 職稱 TO zcgz FIELDS 工資USE zcgzLIST五、 多工作區(qū)的操作在當(dāng)
40、前工作區(qū)內(nèi)對(duì)一個(gè)打開的表文件操作時(shí),如果再打開第二個(gè)表文件,系統(tǒng)將自動(dòng)關(guān)閉第一個(gè)表文件,這種只能對(duì)一個(gè)表進(jìn)行的操作稱為“單表操作”。在實(shí)際運(yùn)用中,常常需要對(duì)兩個(gè)或兩個(gè)以上的表文件進(jìn)行同時(shí)操作,這就涉及到多表操作問題。多表操作是以工作區(qū)為基礎(chǔ)的。1. 多工作區(qū)(1)工作區(qū)工作區(qū)是Visual FoxPro為當(dāng)前正在使用的數(shù)據(jù)表文件開辟的一個(gè)內(nèi)存區(qū)。在一個(gè)工作區(qū)內(nèi)只能打開一個(gè)表文件,如果欲在同一個(gè)工作區(qū)內(nèi)打開另一個(gè)表文件,系統(tǒng)將自動(dòng)關(guān)閉前一個(gè)表文件后再打開第二個(gè)表文件。一個(gè)表文件也只能在一個(gè)工作區(qū)內(nèi)打開。Visual FoxPro提供了32767個(gè)工作區(qū),各個(gè)工作區(qū)彼此獨(dú)立,數(shù)據(jù)互不干擾。在任何時(shí)
41、刻,操作對(duì)象只能占用一個(gè)工作區(qū),這個(gè)工作區(qū)稱為“當(dāng)前工作區(qū)”。啟動(dòng)Visual FoxPro 后,系統(tǒng)默認(rèn)1號(hào)工作區(qū)為當(dāng)前工作區(qū)。利用選擇工作區(qū)命令SELECT可以指定某個(gè)工作區(qū)為當(dāng)前工作區(qū)。每個(gè)工作區(qū)打開的表文件都有自己的記錄指針,在當(dāng)前工作區(qū)可以訪問其他工作區(qū)上已經(jīng)打開的表文件記錄,但不能改變其他工作區(qū)記錄指針和數(shù)據(jù)。利用以下命令,可以在指定工作區(qū)打開一個(gè)表文件:USE <表文件名> IN <工作區(qū)號(hào)>|<別名>(2)別名用戶在建立表文件時(shí)要為其命名,當(dāng)打開該文件后,還可以為它再取一個(gè)別的名字。別名可以代表工作區(qū)號(hào)或表文件名。系統(tǒng)定義前10個(gè)工作區(qū)的別名
42、分別為:A、B、C、D、E、F、G、H、I、J。因此,用戶不能把A、B、J這10個(gè)字母作為表文件名使用??梢岳靡韵旅顬楸砦募付▌e名:USE <表文件名> ALIAS <別名>例如:USE 學(xué)生 ALIAS xs && xs是學(xué)生.DBF的別名。如果沒有指定別名,系統(tǒng)默認(rèn)表文件的主文件名為別名。例如:USE 教師 && 教師也是教師.DBF的別名。在主工作區(qū)上訪問其他工作區(qū)上的數(shù)據(jù),是實(shí)現(xiàn)多表文件之間數(shù)據(jù)處理的有效手段。由于多表文件中可能存在同名字段,因此,在當(dāng)前工作區(qū)調(diào)用其它工作區(qū)中的表文件字段時(shí),必須在其它表文件的字段名前面使用別
43、名調(diào)用格式以示區(qū)別。別名調(diào)用格式:工作區(qū)號(hào)->字段名 或:別名->字段名 或:別名.字段名(3)選擇工作區(qū)命令【命令】 SELECT<工作區(qū)號(hào)>|<別名>【功能】 指定工作區(qū)為當(dāng)前工作區(qū)?!菊f明】函數(shù)SELECT()返回當(dāng)前工作區(qū)的區(qū)號(hào)。SELECT 0表示選當(dāng)前未使用過的最小工作區(qū)號(hào)為當(dāng)前工作區(qū)的區(qū)號(hào)。當(dāng)前正在操作的工作區(qū)為主工作區(qū),在主工作區(qū)上打開的表文件是主表。所有表文件操作命令都只能在當(dāng)前工作區(qū)內(nèi)進(jìn)行。表文件操作完畢,可以使用USE命令依次關(guān)閉當(dāng)前表文件;也可以使用CLOSE ALL命令關(guān)閉所有工作區(qū)的表文件。【例5-22】 工作區(qū)、別名示例。CLO
44、SE ALL && 關(guān)閉所有已經(jīng)打開表文件,回到1號(hào)工作區(qū)?SELECT( && 函數(shù)SELECT()返回當(dāng)前工作區(qū)號(hào)為1USE 學(xué)生 && 在1號(hào)工作區(qū)打開學(xué)生.DBFSELECT 2USE 教師 && 在2號(hào)工作區(qū)打開教師.DBFDISP A.姓名,A.性別,姓名 && 顯示1號(hào)工作區(qū)的姓名,性別和2號(hào)工作區(qū)的姓名SELECT 0USE 課程 && 在3號(hào)工作區(qū)打開課程.DBF2. 數(shù)據(jù)工作期數(shù)據(jù)工作期是一個(gè)用來設(shè)置數(shù)據(jù)工作環(huán)境的交互式窗口。每一個(gè)數(shù)據(jù)工作期中包含有打開的表、表索引和表之間的相互
45、關(guān)系等的一組工作區(qū)。通過在數(shù)據(jù)工作期窗口中選擇工作區(qū),就可以打開這些相關(guān)表,實(shí)現(xiàn)快速查找。利用數(shù)據(jù)工作期建立的工作環(huán)境可以保存在一個(gè)視圖文件中。需要時(shí),打開視圖文件就可以恢復(fù)已經(jīng)建立的工作環(huán)境。(1)數(shù)據(jù)工作期的組成數(shù)據(jù)工作期由別名列表框、關(guān)系列表框和6個(gè)按鈕組成。如圖5-8所示。圖5-8 數(shù)據(jù)工作期窗口別名列表框:用來顯示已經(jīng)打開的表文件,并可以從中選擇當(dāng)前表。關(guān)系列表框:用來顯示表文件之間的關(guān)聯(lián)狀態(tài)。6個(gè)按鈕:用來實(shí)現(xiàn)數(shù)據(jù)工作期的各種操作。(2)數(shù)據(jù)工作期的打開【命令】 SET VIEW ON【菜單】 選擇“窗口”菜單“數(shù)據(jù)工作期”。【功能】 打開已經(jīng)建立的數(shù)據(jù)工作期?!菊f明】 命令SET
46、 VIEW OFF表示關(guān)閉數(shù)據(jù)工作期。【例5-23】 利用數(shù)據(jù)工作期窗口對(duì)表文件“教師.DBF”、“學(xué)生.DBF”進(jìn)行查詢。(1)打開“窗口”“數(shù)據(jù)工作期”“打開”選擇數(shù)據(jù)庫中的表“教師”“確定”。(2)選擇“屬性”按鈕,“字段篩選”教師號(hào)、姓名、職稱“確定”。(3)選擇“數(shù)據(jù)過濾器”設(shè)置過濾條件:教師.職稱<>“講師” “確定”。(4)選擇“瀏覽”按鈕,即可顯示操作結(jié)果,如圖5-9所示。圖5-9 查詢結(jié)果之一(5)選擇數(shù)據(jù)庫中的表“學(xué)生”“確定”。(6)選擇“屬性”按鈕,“字段篩選”學(xué)號(hào)、姓名、入??偡帧按_定”。(7)選擇“數(shù)據(jù)過濾器”設(shè)置過濾條件:學(xué)生.入校總分=>580
47、“確定”。(8)選擇“瀏覽”按鈕,即可顯示操作結(jié)果,如圖5-10所示。圖5-10 查詢結(jié)果之二1. 表的關(guān)聯(lián)一般情況下,各個(gè)工作區(qū)表文件的記錄指針是彼此獨(dú)立,互不影響。關(guān)聯(lián)在兩個(gè)表文件的記錄指針之間建立一種臨時(shí)關(guān)系,當(dāng)一個(gè)表的記錄指針移動(dòng)時(shí),與之關(guān)聯(lián)的另一個(gè)表的記錄指針也作相應(yīng)的移動(dòng)。建立關(guān)聯(lián)的兩個(gè)表,一個(gè)是建立關(guān)聯(lián)的表,稱為父表,另一個(gè)是被關(guān)聯(lián)的表,稱為子表。關(guān)聯(lián)并不真正生成一個(gè)表文件,只是形成了一種聯(lián)系,與當(dāng)前表文件建立聯(lián)系的表由 <別名>指定。建立關(guān)聯(lián)后,在當(dāng)前工作區(qū)執(zhí)行了移動(dòng)記錄指針的命令后,如SKIP、GO、LIST、SEEK、FIND、LOCATE等,將引起多個(gè)工作區(qū)記
48、錄指針的移動(dòng),從而減低命令的執(zhí)行速度。因此,在沒有必要關(guān)聯(lián)時(shí),應(yīng)及時(shí)取消關(guān)聯(lián)。(1)關(guān)聯(lián)條件:建立關(guān)聯(lián)的條件是首先為子表按某個(gè)關(guān)鍵字建立索引,然后比較兩個(gè)表的兩個(gè)關(guān)鍵字段值是否相等。當(dāng)父表指針移動(dòng)時(shí),子表指針也會(huì)自動(dòng)移動(dòng)到滿足關(guān)聯(lián)條件的記錄上。(2)一對(duì)一關(guān)系:兩個(gè)表之間的一對(duì)一關(guān)系中,父表的一個(gè)記錄只能和子表的一個(gè)記錄相關(guān)聯(lián),子表的一個(gè)記錄也只能和父表的一個(gè)記錄相關(guān)聯(lián)。例如,一個(gè)職員有一個(gè)辦公桌并且每一個(gè)辦公桌被指定給一個(gè)職員。(3)一對(duì)多關(guān)系:兩個(gè)表之間的一對(duì)多關(guān)系中,父表的一個(gè)記錄可以和子表的一個(gè)或多個(gè)記錄相關(guān)聯(lián),但子表的一個(gè)記錄只能和父表的一個(gè)記錄相關(guān)聯(lián)。例如,每一個(gè)父親可以有多個(gè)孩子
49、,但每一個(gè)孩子只能有一個(gè)父親。(4)多對(duì)一關(guān)系:兩個(gè)表之間的多對(duì)一關(guān)系中,父表的多個(gè)記錄可以和子表一個(gè)記錄相關(guān)聯(lián),但子表的一個(gè)記錄只能和父表的一個(gè)記錄相關(guān)聯(lián)。一般把”多”表作為父表最簡單,因?yàn)楦副碇械娜我挥涗?,都可以在子表中找到唯一的記錄與他聯(lián)系。例如,家庭中爺爺、奶奶、姥爺、姥姥和孫子的關(guān)系,一個(gè)孫子只有一個(gè)爺爺、奶奶、姥爺、姥姥。(5)多對(duì)多關(guān)系:兩個(gè)表之間的多對(duì)多關(guān)系中,一個(gè)表的一個(gè)記錄和相關(guān)表的多個(gè)記錄相關(guān)聯(lián)。例如,一個(gè)讀者可以借了多本書,也可以是多本書對(duì)應(yīng)該讀者。一般把多對(duì)多關(guān)系撤分為多對(duì)一關(guān)系或一對(duì)多關(guān)系。2. 用命令建立關(guān)聯(lián)【命令】 SET RELATION TO <關(guān)聯(lián)表
50、達(dá)式1>INTO <別名1>,<關(guān)聯(lián)表達(dá)式2>INTO <別名2>,ADDITIVE【功能】 以當(dāng)前表為父表與一個(gè)或多個(gè)子表建立關(guān)聯(lián)?!菊f明】被關(guān)聯(lián)的字段必須先索引。當(dāng)父表記錄指針移動(dòng)時(shí),子表的記錄指針定位在滿足<關(guān)聯(lián)表達(dá)式>值的第1個(gè)記錄上,若找不到這條記錄,記錄指針就指向文件尾。選擇ADDITIVE,保留以前的關(guān)聯(lián),否則,新建立的關(guān)聯(lián)將取消先前建立的關(guān)聯(lián)。不帶任何選擇項(xiàng)的SET RELATION TO將刪除當(dāng)前父表與其它子表的關(guān)聯(lián)?!纠?-24】 利用表文件學(xué)生.DBF、選課.DBF、課程.DBF顯示學(xué)生選課的課程名稱與該課程的成績情況
51、。CLEAR ALLSELECT 1USE 學(xué)生INDEX ON 學(xué)號(hào) TAG xhSELECT 2USE 課程INDEX ON 課程號(hào) TAG ckhSELECT 3USE 選課SET RELATION TO 學(xué)號(hào) INTO ASET RELATION TO 課程號(hào) INTO B ADDITIVELIST ALL FIELDS A->姓名,B->課程名,成績 OFF3.“數(shù)據(jù)工作期”窗口建立關(guān)聯(liá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)系統(tǒng)默認(rèn)建立的關(guān)聯(lián)為“多對(duì)一關(guān)系
52、”。有必要時(shí),說明建立的關(guān)聯(lián)為“一對(duì)多關(guān)系”。4. 說明一對(duì)多關(guān)系的命令【命令】 SET SKIP TO <表別名1>表別名2>【功能】 用在SET RELATION命令之后,說明已經(jīng)建立的關(guān)聯(lián)為一對(duì)多關(guān)系?!菊f明】<表別名>表示一對(duì)多關(guān)系中位于多方的子表。不帶任何選擇項(xiàng)的SET SKIP TO將取消一對(duì)多關(guān)系,但不取消已經(jīng)建立的多對(duì)一關(guān)系?!纠?-25】 利用表文件教師.DBF、授課.DBF、課程.DBF顯示教師授課的課程名稱與該課程的課時(shí)情況。分析:題目涉及到三個(gè)表,以授課.DBF為父表,教師.DBF和課程.DBF是2個(gè)子表,屬于“一對(duì)多關(guān)系”的關(guān)聯(lián)問題。作為
53、關(guān)聯(lián)條件作為關(guān)聯(lián)條件。CLEAR ALLSELECT 1USE 教師 && 子表1INDEX ON 教師號(hào) TAG jshSELECT 2USE 課程 && 子表2INDEX ON 課程號(hào) TAG ckhSELECT 3USE 授課 && 父表SET RELATION TO 教師號(hào) INTO ASET RELATION TO 課程號(hào) INTO B ADDITIVESET SKIP TO B && 子表B為多方LIST ALL FIELDS A->姓名,A->職稱,B->課程名,B->課時(shí) OFF表文件之間的
54、連接稱為物理連接,就是將兩個(gè)表的相關(guān)字段組合起來,構(gòu)成一個(gè)新的表。【命令】 JOIN WITH<別名> TO <新表文件名> FOR<條件>FIELDS<字段名表>【功能】 在當(dāng)前表文件與指定別名的表文件之間建立聯(lián)系。【說明】被連接的兩個(gè)表文件,一個(gè)是當(dāng)前表文件,另一個(gè)是在<別名>中指定的工作區(qū)表文件。字句FOR<條件>是必選項(xiàng),它是構(gòu)成連接的條件。兩個(gè)表文件必須按條件連接。選擇FIELDS<字段名表>,則生成的新表按字段順序排列;省略FIELDS<字段名表>,當(dāng)前表的字段在前面,別名表文件的字段在
55、后面。連接的過程是:從當(dāng)前表文件的第一條記錄開始,在指定的別名工作區(qū)中查找符合條件的記錄,每找到一條,就將當(dāng)前記錄與別名工作區(qū)找到的記錄連接生成一個(gè)新記錄并存入新表文件中。重復(fù)上述操作,直到把當(dāng)前工作區(qū)中的所有記錄處理完畢為止。新生成的表文件的擴(kuò)展名為.DBF,且只有將其打開后,才能對(duì)其操作?!纠?-25】 根據(jù)“學(xué)生”、“選課”和“課程”三個(gè)表文件,新生成一個(gè)表“學(xué)生課程”,新表中包含由學(xué)號(hào),姓名,性別,課程名稱、課時(shí)數(shù)等字段。分析:新表“學(xué)生課程”由“學(xué)生”和“選課”兩個(gè)表連接生成一個(gè)“學(xué)生選課”新表,連接的條件是學(xué)號(hào)。然后,再由“學(xué)生選課” 和“課程” 兩個(gè)表連接生成“學(xué)生課程”新表,連
56、接的條件是課程號(hào)。SELECT 1USE 學(xué)生SELECT 2USE 選課JOIN WITH A TO 學(xué)生選課 FOR 學(xué)號(hào)=A->學(xué)號(hào) FIELDS A->學(xué)號(hào),A->姓名,A->性別,課程號(hào),成績SELECT 3USE 學(xué)生選課SELECT 4USE 課程JOIN WITH C TO 學(xué)生課程 FOR 課程號(hào)=C->課程號(hào) FIELDS C->學(xué)號(hào),C->姓名,C->性別,課程名,課時(shí),C->成績USE 學(xué)生課程LIST利用表更新命令,則不必進(jìn)行關(guān)聯(lián),而是直接利用一個(gè)表文件數(shù)據(jù)來修改另一個(gè)表文件數(shù)據(jù)?!久睢?UPDATE ON<
57、;關(guān)鍵字段> FROM <別名> REPLACE <字段名1> WITH <表達(dá)式1>,<字段名2> WITH <表達(dá)式2>RANDOM【功能】 利用<別名>表的表達(dá)式值來更新當(dāng)前表文件中記錄的字段值?!菊f明】<關(guān)鍵字段>為兩個(gè)表文件必須共有的。當(dāng)前表的字段為被更新字段,<別名>表的字段為更新字段。選擇RANDOM,則只要求當(dāng)前表按關(guān)鍵字段索引,否則要求兩個(gè)表都必須按<關(guān)鍵字段>排序或索引。若<別名>指定的表文件中有多個(gè)記錄具有相同的關(guān)鍵字段值,那么最后一條記錄對(duì)當(dāng)前表
58、的更新有效;如果在當(dāng)前表中有多個(gè)具有相同關(guān)鍵字段的記錄,則只更新第一條記錄?!纠?-26】 先將表文件“教師.DBF”復(fù)制為“教師-1.DBF”,然后給“教師-1.DBF”表增加一個(gè)字段“課程號(hào)”,并用“授課.DBF”表中的“課程號(hào)”更新“教師-1”表的“課程號(hào)”。SELECT 1USE 教師COPY TO 教師-1USE 教師-1ALTER TABLE 教師-1 ADD 課程號(hào) C(4INDEX ON 教師號(hào) TAG jsh1SELECT 2USE 授課INDEX ON 教師號(hào) TAG jsh2SELECT 1UPDATE ON 教師號(hào) FROM 授課 REPLACE 課程號(hào) WITH B-
59、>課程號(hào) RANDOMLIST習(xí) 題 一、單項(xiàng)選擇題1. 建立索引的正確命令是_。A SORT INDEX B INDEX SORT C SORT TO INDEX TO D INDEX TO SORT TO2. 在Visual FoxPro中,執(zhí)行下列命令序列后,打開的文件是_。SELECT 1USE 學(xué)生USE 教師A 學(xué)生 B教師 C學(xué)生和教師 D一個(gè)也沒有打開3. 在當(dāng)前表中,字段性別的數(shù)據(jù)類型為L型,如果查找第5個(gè)女同學(xué)的記錄,應(yīng)使用命令_。A LOCATE FOR性別=“女” NEXT 5B LOCATE FOR“女” NEXT 5C LOCATE FOR NOT性別 NEXT 5D LIST FOR NOT性別 AND NEXT 54. 下列命令使用不正確的是_。A SORT ON 姓名 TO xm FOR 性別=“男”B SOR
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 旅游實(shí)習(xí)報(bào)告(32篇)
- 2024婚慶服務(wù)協(xié)議書
- 房屋抵頂借款合同書樣本
- 鄉(xiāng)村租房協(xié)議格式
- 瑜伽館轉(zhuǎn)讓合同范本-合同范本
- 2024年財(cái)產(chǎn)分割離婚協(xié)議書撰寫指南
- 五年級(jí)語文上冊(cè)第三單元快樂讀書吧《中國民間故事》讀前指導(dǎo)課公開課一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì)
- 新拆遷安置補(bǔ)償合同樣本
- 課程設(shè)計(jì)無形資產(chǎn)評(píng)估
- 工業(yè)區(qū)廠院租賃合同范本
- 珍愛生命,拒絕“死亡游戲”主題班會(huì)教案(3篇)
- 排洪渠道清淤施工方案
- 北科大巖石力學(xué)-李長洪1.2-巖石的力學(xué)性質(zhì)
- 2024世界糖尿病日糖尿病與幸福感糖尿病健康教育課件
- 公務(wù)員2018年國考《申論》真題卷及答案(副省級(jí))
- 2024年基金從業(yè)資格證(含三個(gè)科目)考前必刷必練題庫500題(含真題、必會(huì)題)
- 民用無人機(jī)操控員執(zhí)照(CAAC)考試復(fù)習(xí)重點(diǎn)題庫500題(含答案)
- 兩彈一星精神(教學(xué)設(shè)計(jì))-2023-2024學(xué)年小學(xué)科學(xué)課后服務(wù)科普課程
- 中國法律史-第一次平時(shí)作業(yè)-國開-參考資料
- 社區(qū)電動(dòng)車棚新(擴(kuò))建及修建充電車棚施工方案(純方案-)
- 世界問候日-你的問候溫暖世界主題PPT
評(píng)論
0/150
提交評(píng)論