第三章 查詢和統(tǒng)計_第1頁
第三章 查詢和統(tǒng)計_第2頁
第三章 查詢和統(tǒng)計_第3頁
第三章 查詢和統(tǒng)計_第4頁
第三章 查詢和統(tǒng)計_第5頁
已閱讀5頁,還剩141頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第三章查詢和統(tǒng)計簡單查詢順序查詢索引查詢(快速查詢)統(tǒng)計(計數(shù)、求和、求平均)分類匯總多表操作臨時關(guān)系臨時關(guān)系與永久關(guān)系的區(qū)別查詢與查詢設(shè)計器SQL語言重要第1次第2次第3次第4次第5次第6次3

.

1順序查詢定義:所謂順序查詢就是按照記錄的物理順序或者邏輯順序,從首記錄開始按指定條件順序搜索,將記錄指針定位到第一條符合指定條件的記錄上,或者將記錄指針定位到文件結(jié)束標(biāo)志。查找表中全部女性記錄物理排序邏輯排序文件結(jié)束標(biāo)志第7次

順序查詢操作可以用命令LOCATE和CONTINUE實現(xiàn),也可以用限制對記錄和字段訪問的菜單實現(xiàn)。3.1.1順序查詢命令格式:LOCATE[<范圍>]FOR<條件1>[WHILE<條件2>]功能:在當(dāng)前表中按順序搜索,以尋找滿足指定條件的第一條記錄。格式:CONTINUE功能:按照前面的LOCATE命令設(shè)置的條件繼續(xù)查詢.3.1順序查詢3.1順序查詢USESTUDENTINCLOCATE

FOR

性別="男"CONTINUECONTINUECONTINUECONTINUE1FFEndofFile3FT5FT7FT8FT11TFRECNO()EOF()FOUND()函數(shù)值RECCOUNT()10說明:(1)

如命令中缺省<范圍>,LOCATE默認范圍是表中的所有(ALL)的記錄。被搜索的表不必建立索引。(2)

若LOCATE發(fā)現(xiàn)滿足條件的記錄時,記錄指針將定位于該記錄上,此時,RECNO()返回該記錄號,F(xiàn)OUND()函數(shù)返回.T.、EOF()函數(shù)返回.F.。若未找到滿足條件的記錄,則RECNO()返回表中的記錄總數(shù)加1,F(xiàn)OUND()函數(shù)返回.F.,而EOF()函數(shù)返回.T.。(3)

LOCATE發(fā)現(xiàn)一個滿足條件的記錄之后,可用CONTINUE命令,在表的剩余記錄繼續(xù)查找滿足條件的下一個記錄。CONTINUE命令可以重復(fù)使用,直至到達范圍的邊界或表尾。例查找STUDENT.DBF中,所有“王”姓學(xué)生的數(shù)據(jù)記錄,

USESTUDENTLOCATEFORSUBSTR(姓名,1,2)=“王”

DISPLAYCONTINUEDISPLAY…

問題:查找所有“王”姓學(xué)生還可以用其他方法嗎?例,假定STUDENT.DBF學(xué)生數(shù)據(jù)表文件中前六條記錄均為男生的記錄,執(zhí)行以下命令序列后,RECNO()函數(shù)的值是_____。

GO3LOCATENEXT3FOR性別="男"

A)3B)4C)5D)6

例:對表STUDENT操作,查找籍貫為湖北的學(xué)生。

LOCATEFOR“湖”$籍貫

DISPLAYCONTINUEDISPLAY

又例:查找所有“王”姓學(xué)生的數(shù)據(jù)記錄,輸入以下命令(?):

SET

EXACT

OFFLOCATEFOR姓名=“王”

DISPCONTINUE例:查找男性且未婚的記錄locatefor性別=‘男’.and.

.not.婚否displaycontinuedisplay例:查找男性五年制且1976年后出生的記錄Locate

for性別=‘男’.and.學(xué)制=‘五’;.and.year(出生年月)>1976displaycontinuedisplay若要按特定的順序定位、查看或操作記錄,可以使用索引。VFP使用索引作為排序機制,為開發(fā)應(yīng)用程序提供靈活性。基本概念:VFP索引是由指針構(gòu)成的文件,這些指針按照索引關(guān)鍵字進行排序。索引文件和表文件分別存儲,并且不改變表中記錄的物理順序。3.2索引與快速查詢創(chuàng)建索引是創(chuàng)建一個由指向.dbf文件記錄的指針構(gòu)成的文件。若要按照特定順序處理表記錄,可以建立一個(或多個)相應(yīng)的索引,使用索引還可以加速對表的查詢操作。索引文件主要包含兩部分:1.索引關(guān)鍵字;2.指向原表文件中與關(guān)鍵字相對應(yīng)的記錄號。索引文件索引(索引項或索引標(biāo)識)保存在索引文件中。10500211050012040023040011003003903002503001602002702001801002401001記錄號編號馬超頻0500111邵林文賀0300310宋紹明030029張小鵬010028劉巧玲020017賈貴紅020026王為冬030015韓偉東010014姜瑞青040013林文靈040022苗莉050021姓名編號記錄號索引標(biāo)識示意結(jié)構(gòu)表文件部分數(shù)據(jù)索引的類型主索引、候選索引、唯一索引、普通索引在結(jié)構(gòu)復(fù)合索引文件中數(shù)據(jù)庫表:主索引、候選索引、唯一索引、普通索引自由表:

候選索引、唯一索引、普通索引在單索引文件中,只有唯一索引、普通索引索引的類型

主索引(PrimaryIndex):

主索引能保證字段中輸入值的惟一性,同時能決定記錄的處理順序。主索引僅適用于數(shù)據(jù)庫表。在數(shù)據(jù)庫中,一個表上只能建立一個主索引,如果有必要確立記錄的其他處理順序,可以添加侯選索引。主索引可以作為一對多永久關(guān)系中的“一方”。

索引的類型

侯選索引(CandidateIndex)

侯選索引與主索引具有相同的特性相同,建立侯選索引的字段可以看作是侯選關(guān)鍵字,所以一個表可以建立多個侯選索引。

侯選索引像主索引一樣要求字段值的唯一性并決定了處理記錄的順序。在數(shù)據(jù)庫表和自由表中都可以建立侯選索引。候選索引與主索引的差別:一個表只能創(chuàng)建一個主索引一個表可創(chuàng)建多個候選索引唯一索引(UniqueIndex):

唯一索引允許指定字段中出現(xiàn)重復(fù)值,但以該字段的首次出現(xiàn)值為基礎(chǔ),選定一組記錄。再對選定的記錄進行排序,輸出時無重復(fù)值。

可對同一表建立多個唯一索引。普通索引(RegularIndex):

普通索引也可以決定記錄的處理順序,但允許字段中出現(xiàn)重復(fù)值。每一個表都可以建立多個普通索引。另外,普通索引還可以作為一對多永久關(guān)系中的“多方”。

1.單索引文件只能按照一種關(guān)鍵字進行索引的索引文件。其擴展名為.IDX。2.復(fù)合索引文件可按多個關(guān)鍵字進行索引的索引文件。其擴展名為.CDX。一個復(fù)合索引文件允許存放多個索引,用以滿足一個表文件可能有多種索引順序的要求。每個索引有一個標(biāo)記(Tag)。VFP提供了兩種索引文件:復(fù)合索引文件又分為:結(jié)構(gòu)復(fù)合索引和非結(jié)構(gòu)復(fù)合索引兩種類型。結(jié)構(gòu)復(fù)合索引文件:名字由系統(tǒng)自動分配,與表文件名相同,擴展名為.CDX。當(dāng)打開表文件時,該類索引文件也自動打開。非結(jié)構(gòu)復(fù)合索引文件:名字由用戶給定,與表文件名不同,擴展名為.CDX。當(dāng)打開表文件時,該類索引文件不能自動打開,須由用戶指定打開。

建立|刪除主索引命令

:格式:

ALTERTABLE

表名

ADD|DROPPRIMARYKEY

索引關(guān)鍵字[tag索引標(biāo)識名]

其中:

ADD用于添加主索引,DROP用于刪除主索引。缺省TAG短語時表示索引關(guān)鍵字與字段同名。例如:為數(shù)據(jù)庫表student添加以學(xué)號字段為索引關(guān)鍵字的主索引??捎妹睿篈ltertablestudentaddprimarykey

學(xué)號由于一個數(shù)據(jù)庫表只有一個主索引,所以刪除主索引不必指明索引關(guān)鍵字。例如,刪除數(shù)據(jù)庫表student主索引的命令為:Altertablestudentdropprimarykey用命令建立索引

命令方式

:格式:

INDEXON索引關(guān)鍵字

TO

單索引文件名

|TAG

索引標(biāo)識名

[OF非結(jié)構(gòu)復(fù)合索引文件名][FOR條件][unique][additive][ascending][descending]

功能:按索引關(guān)鍵字表達式建立一個符合條件的索引文件。利用該文件可以按照某種邏輯順序顯示或訪問表記錄。

用命令建立索引說明:

◆ON索引關(guān)鍵字

:指定索引表達式◆TO單索引文件:建立一個單獨的索引文件,系統(tǒng)默認擴展名.IDX?!鬞AG索引標(biāo)識名:在一個結(jié)構(gòu)復(fù)合索引文件中建立多個索引,其索引文件名與表名相同,擴展名.CDX?!鬙F非結(jié)構(gòu)復(fù)合索引文件名:指定生成非結(jié)構(gòu)復(fù)合索引文,其索引文件名由用戶指定,擴展名“.CDX”◆FOR

條件:只對滿足條件的記錄進行索引?!魎nique:建立唯一索引。(只將索引表達式值相同值的首記錄放入索引文件中)◆ADDITIVE

所有先前已打開的索引文件保持打開狀態(tài),否則,關(guān)閉先前已打開的索引文件(結(jié)構(gòu)復(fù)合索引文件除外)?!鬉SCENDING

或DESCENDING

說明建立升序或降序索引,默認升序。

◆單索引文件的索引關(guān)鍵字只能是N、C、D型字段。

◆單索引文件索引關(guān)鍵字表達式為多個關(guān)鍵字組合(稱為多重索引)時,要用字串連接符“+”號連接起來,并且類型要一致。若是N和D型數(shù)據(jù),須用STR()和DTOC()函數(shù)將其轉(zhuǎn)化成C型。多重索引時,排在最前面的為主索引關(guān)鍵字。排序時,先排主索引關(guān)鍵字,再排第二關(guān)鍵字,以后依次類推。例:①對表STUDENT操作,按姓名(升序)建立單索引文件姓名.idx。

②對表score操作,按計算機(降序)建立單索引文件JSJ.idx。SELECT1 USESTUDENT

INDEXON姓名

TO姓名

BROWSE use

score

in

0 select

score INDEXON-計算機

TO

jsj

&&單索引文件中,只能對數(shù)值型字段做降序操作。

BROWSEdir*.idx例:建立結(jié)構(gòu)復(fù)合索引文件,其中包括2個索引:①記錄按姓名降序排列,索引標(biāo)識為普通索引。②記錄按性別升序排列,性別相同時按專業(yè)升序排列,索引標(biāo)識為普通索引。USESTUDENTINDEXON

姓名TAGXMdescList&&記錄已按姓名降序排列INDEXON性別+專業(yè)TAGxbzyList*記錄已按性別升序排列,性別相同時按專業(yè)升序排列DIR*.CDXBROWSE例:建立以專業(yè)索引的非結(jié)構(gòu)索引文件SZY.DBF,其中一個索引:記錄按專業(yè)升序排列,專業(yè)相同時按出生年月升序排列。DIR*.CDXUSESTUDENTINDEXON專業(yè)+dtoc(出生年月)TAGzycsOFSZY*如果是ON專業(yè)+dtoc(出生年月)desc則同為降序排列DIR*.CDXBROWSE在表設(shè)計器中建立索引(1)打開數(shù)據(jù)庫表STUDENT.DBF。

(2)在彈出的“表設(shè)計器”對話框中,單擊“字段”選項卡,在“索引”框中選擇索引為升序或降序。(3)單擊“索引”選項卡,在“索引名”框中,鍵入索引標(biāo)記或保留原索引名。

(4)在“類型”列表中,選定索引類型。

(5)在“表達式”框中,鍵入作為記錄排序依據(jù)的字段名,或者單擊表達式框后的按紐,在“表達式生成器”對話框中,建立表達式。

(6)如果希望有選擇的輸出記錄,可在“篩選”框中輸入篩選表達式,或者單擊篩選表達式框后的按紐,在“表達式生成器”對話框中,建立篩選表達式。

(7)選中“確定”按紐。

(1)打開已建好索引的表,單擊【顯示】菜單的“瀏覽”命令。

(3)在“表”菜單中選中“屬性”命令,系統(tǒng)彈出“工作區(qū)屬性”對話框。

(4)在“索引順序”框中,選中某一索引。

(5)單擊“確定”按紐。顯示在“瀏覽”窗口中的表將按照索引關(guān)鍵字(姓名)指定的順序排列記錄。3.2.1.3激活索引對記錄排序?qū)TUDENT.DBF表中的性別和出生年月進行排序。

(1)在表設(shè)計器的“索引”選項卡單擊“插入”命令按鈕;(2)在”索引名“框中,輸入索引名,如性別。

(3)在“類型“框中,選擇索引類型,如普通索引。

(4)單擊“表達式”框右邊的按紐,系統(tǒng)彈出“表達式生成器”對話框。(5)在對話框中輸入索引表達式“性別+CTOD(出生日期)”,最后單擊“確定”按鈕。3.2.1.4多個字段索引(5)在“表達式生成器”對話框的“表達式”框中,輸入表達式:性別+DTOC(出生年月)

(6)選中“確定”按紐。(7)在“表”菜單中選中“屬性”命令,在“工作區(qū)屬性”窗口中,選“索引順序”的“student:性別”,單擊“確定”,顯示表達式“性別+DTOC(出生年月)”排序的結(jié)果。

1.打開索引文件

與表名相同的結(jié)構(gòu)索引在打開表時都能自動打開,但是對于非結(jié)構(gòu)索引必須在使用之前打開索引文件。格式1:USE

表名[INDEX〈單索引文件名〉]

[ORDER<索引順序號>|

[TAG]<索引標(biāo)記名>[OF<非結(jié)構(gòu)復(fù)合索引文件名>][ASCENDING|DESCEDING]3.2.1.5.使用索引文件說明:

(1)在格式1中,命令USE表名

INDEX索引文件名,打開表文件的同時打開單索引文件或非結(jié)構(gòu)復(fù)合索引文件,并指定復(fù)合索引文件中的主控標(biāo)識.。(2)在格式1中,命令USE表名ORDER

標(biāo)記名,或USE表名

ORDER[TAG]標(biāo)記名,打開表文件的同時打開結(jié)構(gòu)復(fù)合索引文件,并指定復(fù)合索引文件中的主控標(biāo)識.格式2:

SETINDEXTO[單索引文件列表]格式3:

SETORDERTO<索引標(biāo)記名>|<索引序號>[OF<非結(jié)構(gòu)復(fù)合索引文件名>][ASCENDING|DESCEDING]][ADDTIVE]說明:在格式2、3中,必須先打開表文件和相關(guān)的索引文件:SETINDEXTO〈索引文件列表〉:指定要打開的一個或多個索引文件列表,該列表中各索引文件用逗號分隔.其中可以包含任意個.IDX或非結(jié)構(gòu)索引文件名。

SETORDER

TOTAG〈索引標(biāo)記名〉:指定結(jié)構(gòu)索引文件中的一個標(biāo)識作為主控標(biāo)識。(3)SETORDERTOTAG〈索引標(biāo)記名〉OF〈CDX索引文件名〉,指定非結(jié)構(gòu)復(fù)合索引文件中的一個標(biāo)記作為主控索引標(biāo)識。例:打開表文件,同時打開單索引文件姓名.IDXUSE

STUDENT

INDEX

姓名

LIST例:先打開表文件,再打開單索引文件jsj.IDXUSESTUDENTSETINDEXTOjsj

LIST例:打開表文件和結(jié)構(gòu)復(fù)合索引文件,并按“姓名”索引排序.

USE

STUDENT

ORDERXMLIST例:先打開表文件,再按性別專業(yè)排序。

USESTUDENTSETORDERTOxbzy例:打開表文件和以專業(yè)和出生年月為索引的非結(jié)構(gòu)復(fù)合索引文件SZY.CDX,再指定以專業(yè)和出生年月

為主控索引。USE

STUDENT

INDEXSZYSETORDERTOzycs如果打開表文件時沒有打開與之相關(guān)的單索引文件或非結(jié)構(gòu)復(fù)合索引文件,則修改表文件中的數(shù)據(jù)時,相關(guān)的單索引文件或非結(jié)構(gòu)復(fù)合索引文件必須用“重新索引”命令修改,其命令格式如下:

REINDEX

功能:按照修改后的表自動修改與之相關(guān)的單索引文件和復(fù)合索引文件。注意:執(zhí)行上述命令前,必須先打開表文件和與之相關(guān)的索引文件。3.2.1.6索引文件的修改1.關(guān)閉索引

格式:(1)CLOSEINDEXS

(2)SETINDEXTO

功能:兩者都是關(guān)閉除結(jié)構(gòu)化復(fù)合索引文件外的所有索引文件。2.刪除索引字段刪除索引字段可以在表設(shè)計器中進行,也可以用命令,其格式是:

DELETETAGTagName

刪除由TagName指定的索引?;駾ELETETAGALL

刪除全部索引。3.2.1.7索引文件的關(guān)閉例:分別按性別、姓名排序,再刪除索引標(biāo)識。(設(shè)表中已經(jīng)建立了性別、性別和專業(yè)的復(fù)合索引XB和xbzy)USESTUDENTBROWSE

SETORDERTO1&&或者SETORDERTOXmBROWSESETORDER

TO2&&或者SETORDERTOxbzyBROEWSEDELETAG

xm&&刪除性別字段的索引標(biāo)識“XB”DELETAG

ALL&&刪除全部索引標(biāo)識快速查詢就是索引查詢。與順序查詢相比,索引查詢因其速度快而被廣泛采用。VFP系統(tǒng)提供了兩條快速(索引)查找記錄命令:FIND、SEEK。3.2.2.1FIND命令格式:FIND<表達式>功能:索引查找某個表,將記錄指針指向與表達式相匹配的第一條記錄。3.2.2快速查詢說明:(1)參數(shù)<字符表達式>:可以是數(shù)值型常量或字符變量;如果是字符變量,則應(yīng)在該變量前加宏代換函數(shù)“&”。(2)要求當(dāng)前表已經(jīng)建立了索引,且表達式之值必須是表中索引關(guān)鍵字的值。(3)如果找到匹配的記錄,則RECNO()函數(shù)返回匹配記錄的記錄號,F(xiàn)OUND()函數(shù)返回.T.。而EOF()函數(shù)返回.F.;如果未找到匹配的記錄,則RECNO()函數(shù)的返回值等于表的記錄數(shù)加1,F(xiàn)OUND()函數(shù)返回.F.。而EOF()函數(shù)返回.T.。說明:(4)FIND命令只能將記錄指針定位于與索引關(guān)鍵字相匹配的第一條記錄,要繼續(xù)查找下一個匹配記錄,則需用SKIP命令。若要顯示該記錄的內(nèi)容,可用DISPLAY命令。(5)FIND命令查找字符串時。該字符串可以用定界符將字符串括起來,也可以省略定界符。但是,如果該字符串本身就包含單引號、雙引號和方括號,就必須用另一種定界符將字符串?dāng)U起來。格式:SEEK<表達式>功能:索引查找某個表,執(zhí)行該命令將記錄指針指向與指定表達式值相匹配的第一條記錄。說明:SEEK命令的操作與FIND命令類似。但是,當(dāng)<表達式>為字符型內(nèi)存變量是SEEK命令不能用&函數(shù);<表達式>可以是字符型、數(shù)值型、日期型數(shù)據(jù),如果是字符常量時,必須用定界符將字符串括起來。3.2.2.2SEEK命令例:在STUDENT表中搜索查找學(xué)制為五年制的學(xué)生。INDEXON學(xué)制

TOXZFIND五&&或者FIND“五”,或者SEEK“五”?FOUND(),EOF()DISPSKIP例:搜索查找出生年月為10/13/76的記錄。INDEXON出生年月

TODASEEKCTOD(‘10/13/76’)

&&或者SEEK{^1976/10/13}FIND{^1976/10/13}&&出現(xiàn)“數(shù)據(jù)類型不匹配”錯誤DISP例:搜索查找性別為男,且是79年11月3日出生的記錄。

USESTUDENTINDEXON

性別+DTOC(出生年月)

TOXBCFIND

“男11/03/79”&&或者FIND“男”+“11/03/79”例:搜索查找臨床醫(yī)學(xué)專業(yè)女學(xué)生。

INDEXONALLTRIM(專業(yè))+性別

TOXBZYseek‘臨床醫(yī)學(xué)女’display例:查找98級男學(xué)生,顯示前兩名記錄的學(xué)號(C型)、姓名、籍貫。indexon

LEFT(學(xué)號,2)+性別TAGXHXBDESCFIND

98男l(wèi)istnext

2

學(xué)號,姓名,籍貫或者Index

on

LEFT(學(xué)號,2)+性別TOXHXBSeek“98男”&&必須用定界符括起來Display

學(xué)號,姓名,籍貫SkipDisp學(xué)號,姓名,籍貫例:查找“王”姓的同學(xué)(模糊查詢)SET

EXACT

OFFUSESTUDENTORDERXMFIND

王&&或者SEEK“王”DISPLAYName=“王”FIND&NAME&&或者

SEEKNAMEDISPLAYSETEXACTONFIND王&&或者SEEK“王”DISPLAY&&查詢無結(jié)果,除非表中有姓名是“王”的記錄3.3統(tǒng)計—計數(shù)

COUNT

[Scope][FOR<條件>][TO<內(nèi)存變量>]功能:在指定范圍內(nèi),統(tǒng)計滿足條件的記錄個數(shù)說明:本命令的默認范圍是ALL;

例,執(zhí)行下列語句后,變量A1,A2,A3,A4,A5分別是什么?USESTUDENT&&表中學(xué)號字段是字符型COUNTCOUNT

TOA1COUNTTO

A2FOR

性別=“男”COUNTFORLEFT(學(xué)號,2)=“96”TOA3COUNTFORleft(學(xué)號,2)=“98”O(jiān)Rleft(學(xué)號,2)=“99”

TOA4COUNTTOA5FOR

!婚否3.3統(tǒng)計—求和SUM

[<表達式表>][Scope]

[FOR<條件>]

[TO<內(nèi)存變量表>

|TO

ARRAY

數(shù)組]功能:在指定范圍內(nèi),按照表達式表的要求,對滿足條件記錄的數(shù)值型字段求和。說明:本命令的默認范圍是ALL;當(dāng)缺省表達式表時,將對當(dāng)前表中所有數(shù)值型字段求和;當(dāng)缺省TO內(nèi)存變量表時,求和結(jié)果不予保存;當(dāng)表達式表

和內(nèi)存變量表

都選擇時,表達式表中的表達式數(shù)目必須與內(nèi)存變量表中的變量數(shù)目相等;3.3統(tǒng)計—求和USESCORESUMSUM

生物,化學(xué)SUM

生物,化學(xué)TOSW,HXSUM

生物,化學(xué)TOSW,HXFORLEFT(學(xué)號,2)="98"Settalkon

3.3統(tǒng)計—求平均AVERAGE[表達式表][Scope][FOR<條件>]

[TO

內(nèi)存變量表|TOARRAY數(shù)組]功能:在指定范圍內(nèi),按照表達式表的要求,對滿足條件記錄的數(shù)值型字段求平均值。說明:本命令的默認范圍是ALL;當(dāng)缺省表達式表時,將對當(dāng)前表中所有數(shù)值型字段平均值;當(dāng)缺省TO內(nèi)存變量表時,求和結(jié)果不予保存;當(dāng)表達式表和內(nèi)存變量表都選擇時,表達式表中的表達式數(shù)目必須與內(nèi)存變量表中的變量數(shù)目相等;例:1.分別統(tǒng)計student.dbf中男生和女生的人數(shù);2.分別求score.dbf中98級、99級學(xué)生的計算機、英語的平均成績.(保存在數(shù)組A和B中)UsestudentCountfor性別="男"

TOMCountfor性別<>"男"

TOF?"男生的人數(shù)是:",

M?"女生的人數(shù)是:",FAver計算機,英語forleft(學(xué)號,2)=“98”toarrayaAver計算機,英語

forleft(學(xué)號,2)=“98”toarrayb?“98級計算機成績:",A1(1),"98級英語成績:",A1(2)?“99級計算機成績:",B1(1),"99級英語成績:",B1(2)思考:怎樣用一個COUNT命令統(tǒng)計表中男、女生之和?怎樣統(tǒng)計表中姓名不包含“王”的學(xué)生人數(shù)?例:計算SCORE表中四門課程的平均值,并在表末尾增加一空記錄,將學(xué)號用“平均分”填充,各門課程平均分填入相應(yīng)字段。USE

SCOREAVERAGETOA,B,C,D&&學(xué)號字段必須是字符型APPEND

BLANK

REPLACE

學(xué)號WITH“平均分”,生物

WITHA,;

化學(xué)

WITHB,計算機WITHC,英語WITHDBROWSE3.3統(tǒng)計—分類匯總TOTALTO〈表文件名〉ON〈表達式〉

[FIELDS字段名表][Scope][FOR

〈條件〉]功能:對當(dāng)前表中的數(shù)值型字段進行匯總說明:本命令的默認范圍是ALL;如缺省字段名表,則對所有數(shù)值型字段進行匯總,否則,僅對字段名表中的數(shù)值型字段匯總;在匯總前,表中記錄必須物理有序或者邏輯有序,且匯總表達式必須是有序的依據(jù)中的一部分或者全部。了解3.3統(tǒng)計—分類匯總說明字段名的值域必須是有限個,且數(shù)量比較少;匯總結(jié)果表的結(jié)構(gòu)與當(dāng)前表的結(jié)構(gòu)一樣;匯總結(jié)果表中的記錄數(shù)與字段名的值域中個數(shù)是相等的;匯總結(jié)果以表的形式保存在表中,因此,需打開結(jié)果表瀏覽,才能看到匯總結(jié)果;注意:本命令中的字段名表,不對匯總結(jié)果表起作用,而僅僅是限制需匯總的數(shù)值型字段;當(dāng)匯總溢出時,用“*”代替3.3統(tǒng)計—分類匯總USESCOREIN0SELECTSCORESETORDERTOZYTOTALONZYTOT1USET1IN0SELECTT1BROWSE假設(shè)在SCORE表結(jié)構(gòu)復(fù)合索引文件中,有三個索引標(biāo)識:XH→學(xué)號、ZY→專業(yè)、XB→性別3.4多表操作有關(guān)概念的回顧:工作區(qū):在內(nèi)存中,為表操作而開辟的一塊區(qū)域。工作區(qū)號:1-32767工作區(qū)碼:A、…、J、W11、…、W32767當(dāng)前工作區(qū):注意:啟動VFP后,1號工作區(qū)為當(dāng)前工作區(qū);當(dāng)前表當(dāng)前記錄非常重要本節(jié)內(nèi)容的應(yīng)用是對前面所學(xué)內(nèi)容的綜合運用3.4多表操作—別名表的別名:在工作區(qū)中,打開一個表后,系統(tǒng)立即賦予一個可引用該表的名字默認別名:表的默認別名就是表名指定別名:在USE命令中使用ALIAS子句表別名的用途主要體現(xiàn)在多表操作中:在當(dāng)前工作區(qū)中,可引用其它工作區(qū)中表的字段;可選擇別名所對應(yīng)的表所在的工作區(qū)作為當(dāng)前工作區(qū);3.4多表操作—別名格式1:TableAlias.FieldName (小數(shù)點)格式2:TableAlias->FieldName (減號加大于號)格式3:WorkArea

.FieldName (小數(shù)點)格式4:WorkArea

->FieldName (減號加大于號)說明:在格式3和格式4中,WorkArea只能是工作區(qū)碼,不能是工作區(qū)號。例如:假設(shè)表STUDENT和表SCORE已分別在A工作區(qū)和B工作區(qū)中打開,當(dāng)前工作區(qū)為A區(qū)。

LISTFIELDS

學(xué)號,姓名,SCORE.生物,SCORE->化學(xué),B.計算機,B->英語3.4當(dāng)前工作區(qū)的選擇可視方法:在數(shù)據(jù)工作期中,選擇表即可選擇該表所在的工作區(qū)(只能選擇有表的工作區(qū))命令方法:格式1:SELECT

WorkArea

格式2:

SELECT0格式3:

SELECT

TableAlias

功能:當(dāng)前工作區(qū)選擇。說明:格式2的功能是選擇編號最小的空閑工作區(qū)為當(dāng)前工作區(qū);當(dāng)工作區(qū)中無表時,請用格式1或者格式2;當(dāng)工作區(qū)中有表時,請用格式1或者格式3;3.4當(dāng)前工作區(qū)的選擇SELECT

31#A2#B3#C4#D5#Estudentscoreliberregister請思考當(dāng)前工作區(qū)?USEstudentSELECTBUSEscoreSELECT5USEbookALIASliberSELECT0USEregisterSELECTliberBROWSE1#A2#B3#C5#E1#A2#B3#C5#E5#E3.4數(shù)據(jù)工作期定義:表單、表單集或報表所使用的當(dāng)前動態(tài)工作環(huán)境的一種表示。每一個數(shù)據(jù)工作期包含有自己的一組工作區(qū)。分類:默認數(shù)據(jù)工作期(公共數(shù)據(jù)工作期)專用數(shù)據(jù)工作期(私有數(shù)據(jù)工作期)功能:打開或顯示表或視圖;建立臨時關(guān)系;選擇當(dāng)前工作區(qū);設(shè)置工作區(qū)屬性(在工作區(qū)屬性窗口中,單擊“修改”按鈕,還可進入表設(shè)計器修改表結(jié)構(gòu))。進入:在“常用”工具欄上選擇“數(shù)據(jù)工作期窗口”按鈕;選擇“窗口”菜單的“數(shù)據(jù)工作期”命令;3.4數(shù)據(jù)工作期窗口布局當(dāng)前工作期:顯示當(dāng)前數(shù)據(jù)工作期的名稱或選擇當(dāng)前數(shù)據(jù)工作期。別名區(qū):顯示當(dāng)前數(shù)據(jù)工作期中,所有已打開的視圖和表的別名。關(guān)系區(qū):表明臨時關(guān)系,這個關(guān)系是在“別名”框中的表或視圖之間建立的。按鈕區(qū):狀態(tài)顯示區(qū):3.4數(shù)據(jù)工作期窗口按鈕顯示“工作區(qū)屬性”對話框,在該對話框中可以:單擊“修改”按鈕,進入表設(shè)計器,修改表的結(jié)構(gòu);定義數(shù)據(jù)過濾器;定義、激活、關(guān)閉活動字段表(相當(dāng)于全局的字段名表);選擇或取消主控索引;在“瀏覽”窗口中顯示在“別名”框中選擇的表或視圖,在該窗口中可以檢查、編輯或追加數(shù)據(jù)。顯示“打開”對話框,與“添加表或視圖”對話框相似,可以選擇要打開的表或視圖。從“別名”框中移去選中的表或視圖,以及任何相關(guān)的文件。 使用“表達式生成器”,定義表或視圖之間的一對一的臨時關(guān)系。

當(dāng)兩個表之間沒有定義索引順序時,對話框會在“表達式生成器”對話框之前顯示“設(shè)置索引次序”對話框。顯示“創(chuàng)建一對多關(guān)系”對話框,在該對話框中可以在子表和父表之間建立一對多臨時關(guān)系。使用方法:選擇一對一關(guān)系中的父表,再單擊本按鈕就可將一對一關(guān)系改為一對多關(guān)系(雙線)。屬性:顯示“工作區(qū)屬性”對話框,在該對話框中可以:單擊“修改”按鈕,進入表設(shè)計器,修改表的結(jié)構(gòu);定義數(shù)據(jù)過濾器;定義、激活、關(guān)閉活動字段表(相當(dāng)于全局的字段名表)選擇或取消主控索引;在“瀏覽”窗口中顯示在“別名”框中選擇的表或視圖,在該窗口中可以檢查、編輯或追加數(shù)據(jù)。顯示“打開”對話框,與“添加表或視圖”對話框相似,可以選擇要打開的表或視圖。從“別名”框中移去選中的表或視圖,以及任何相關(guān)的文件。使用“表達式生成器”,定義表或視圖之間的一對一的臨時關(guān)系。當(dāng)兩個表之間沒有定義索引順序時,對話框會在“表達式生成器”對話框之前顯示“設(shè)置索引次序”對話框。顯示“創(chuàng)建一對多關(guān)系”對話框,在該對話框中可以在子表和父表之間建立一對多臨時關(guān)系。使用方法:選擇一對一關(guān)系中的父表,再單擊本按鈕就可將一對一關(guān)系改為一對多關(guān)系。3.4臨時關(guān)系定義:是兩表之間的一種關(guān)系,這種關(guān)系根據(jù)兩表公共關(guān)鍵字的對應(yīng)關(guān)系,能邏輯鏈接在不同工作區(qū)打開的兩個相關(guān)表,使這兩個表從邏輯上聯(lián)接成一個大表,方便從不同表中提取相關(guān)數(shù)據(jù)。作用機理:臨時關(guān)系通過父表中記錄指針的移動,再根據(jù)兩表的公共關(guān)鍵字的對應(yīng)關(guān)系,而自動控制子表中記錄指針的移動。父表:在臨時關(guān)系中起主導(dǎo)作用的表;也稱主表或主控表。子表:在臨時關(guān)系中受父表控制的表;也稱從表或受控表。效果:通過這種指針的聯(lián)動關(guān)系,可從父表、子表的當(dāng)前記錄中,收集到能全面反映一個個體的完整數(shù)據(jù)或者所需要的與一個個體有關(guān)的分布在各表當(dāng)中的離散數(shù)據(jù)。3.4臨時關(guān)系的類型

臨時關(guān)系的類型指的是兩表之間記錄指針聯(lián)動的方式。 假設(shè)在子表中有多重記錄與主表中的一條記錄相對應(yīng):一對一的臨時關(guān)系當(dāng)主表中的記錄指針移動時,子表中記錄指針只指向多重記錄的第一條一對多的臨時關(guān)系當(dāng)主表中的記錄指針移動時,子表中記錄指針將按順序指向多重記錄的第一條、第二條、…,而保持主表記錄指針不動,直到子表中的記錄指針掃過多重記錄后,主表指針才能繼續(xù)移動。3.4一對一的臨時關(guān)系3.4一對多的臨時關(guān)系3.4建立臨時關(guān)系建立步驟:打開父表;打開子表;選擇子表所在的工作區(qū);激活子表的索引:若子表無索引,則建立索引;選擇主表所在的工作區(qū);建立從父表到子表的一對一的臨時關(guān)系;或者建立從父表到子表的一對多的臨時關(guān)系;建立方法可視方法:數(shù)據(jù)工作期命令方法:SETRELATIONTO3.4可視方法進入數(shù)據(jù)工作期窗口:選擇“打開”按鈕,分別打開兩個表;在“別名”區(qū),單擊子表(相當(dāng)于選擇子表所在的工作區(qū))scorestudent學(xué)號單擊“屬性”按鈕,為子表在“工作區(qū)屬性”對話框的“索引順序”框中,選擇主控索引;在“別名”區(qū),單擊父表(相當(dāng)于選擇子表所在的工作區(qū))單擊”關(guān)系“按鈕,再單擊子表,在表達式生成器中選擇關(guān)鍵字,完成臨時關(guān)系的建立;3.4有關(guān)命令SETRELATIONTO <表達式1>INTO<WorkArea1|TableAlias1> [,<表達式2>

INTO<WorkArea2|TableAlias2>]...

[ADDITIVE]功能:建立從父表到子表的臨時關(guān)系。說明:格式中的所有WorkArea:只能為工作區(qū)碼WorkArea1、TableAlias1:指定子表所在的工作區(qū)WorkArea2、TableAlias2:指定子表所在的工作區(qū)ADDITIVE:保留已有的臨時關(guān)系3.4命令方法若使用結(jié)構(gòu)復(fù)合索引存在CLOSEALLUSEstudent

IN

0USEscoreIN0

ORDERxhSELECTstudentSETrelationto學(xué)號

intoscorestudentscore學(xué)號CLOSEALLSELECT0USEscoreINDEX

ON

學(xué)號TAGxhSELECT0USEstudentSETrelationto學(xué)號

intoscore不存在3.4命令方法CLOSEALLUSEstudentIN

0USEscore

IN

0

INDEX

xhSELECTstudentSETrelationTO

學(xué)號

INTOscore若使用單索引CLOSEALLSelect0USEscoreIndexON

學(xué)號TOxhSelect0Usestudentsetrelationto學(xué)號

into

score存在不存在3.4檢驗方法建立臨時關(guān)系的關(guān)鍵兩表必須有公共字段,且該公共字段的名字、類型、寬度在兩表中必須一致。臨時關(guān)系建立后的檢查方法分別打開兩表的數(shù)據(jù)窗口在主表的數(shù)據(jù)窗口移動記錄指針,如果子表的數(shù)據(jù)窗口中的記錄發(fā)生相應(yīng)的變化,則臨時關(guān)系正確,否則,不正確。臨時關(guān)系的使用關(guān)鍵:必須在主表中移動記錄指針,子表的記錄指針才能跟隨移動;反過來,臨時關(guān)系不起作用。3.4臨時關(guān)系的應(yīng)用例,1.在student表中增加“總分”和“平均分”字段,分別用score表中的生物、化學(xué)、計算機和英語成績的總和與平均成績填充。2.顯示總分前三名記錄的學(xué)號,姓名,籍貫,總分.(p104-二)Altertablestudentadd總分n(6,2)Altertablestudentadd平均分n(6,2)Select2USEscoreIndexon學(xué)號to學(xué)號selectstudentSETrelationTO學(xué)號intoscoreReplaceall總分withb.生物+b.化學(xué)+b.計算機+b.英語

,

平均分with總/4Indexon總分desctagzfLISTnext3學(xué)號,姓名,籍貫,總分3.4臨時關(guān)系的應(yīng)用從student表和score表中,提取生物、化學(xué)均不及格的學(xué)生名單wwe.dbf(表中只有這些學(xué)生的學(xué)號、姓名、生物、化學(xué)成績)CLOSEALLSelectBUSEscoreindexon學(xué)號TOxhSeleAUSEstudentSETrelationto

學(xué)號into

B

&&建立臨時關(guān)系Copytowwefields

學(xué)號,姓名,score.生物,b.化學(xué);

FORb.生物<60ANDb.化學(xué)<603.4臨時關(guān)系的應(yīng)用在student表中,增加一個獎學(xué)金字段(L,1),并使score表中平均分>90的學(xué)生獲得獎學(xué)金。(P104-二.4)Replace獎學(xué)金WITH.t.;FOR(b.生物+b->化學(xué)+b.計算機+b.英語)/4>=90Select2UsescoreIndexon學(xué)號toxhselectstudentSetrelationto學(xué)號intoscore

&&建立臨時關(guān)系CloseallAltertablestudentadd獎學(xué)金L

&&增加“獎學(xué)金”字段3.4臨時關(guān)系的應(yīng)用rosterregisterbookrosterregisterbookSelect

0Use

rosterSelect

0USE

registerSetorder

tojsdmSelect0UserosterSetordertojcbm教師代碼jsdm教材編碼jcbmCLOSEALLSelectrosterSetrelato教師代碼intoregisterSelectregisterSetrelato教材代碼intobookADDITIVESELECTroster3.4臨時關(guān)系的應(yīng)用rosterregisterbookregisterSELECTAUSE

rosterindexon

教師代碼to

jsdmSELECTbUSEregisterSELECTCUSE

bookindexon教材編碼tojcbm教師代碼jsdm教材編碼jcbmrosterbookCLOSEALLSETrelato

教師代碼intoASETrelato教材編碼intoC

ADDILISTA.姓名,教師代碼,C.教材編碼;

forleft(教師代碼,2)=“02"3.4臨時關(guān)系的應(yīng)用思考題:請分別用可視化方法、命令方法,用臨時關(guān)系實現(xiàn)右圖所示三表之間的邏輯聯(lián)接。右圖所示的三表之間的邏輯聯(lián)接能否實現(xiàn)?如果能,請寫出命令如果不能,請說明理由?rosterregisterbook教師代碼教材編碼rosterregisterbook教師代碼教材編碼主關(guān)鍵字:表中的一列或多列,其中的值唯一地標(biāo)識了表中的一行;外部關(guān)鍵字:一列或多列的組合,列中的值需要與另一個表中的主關(guān)鍵字相匹配。用于聯(lián)接相關(guān)表;定義:通過主關(guān)鍵字和外部關(guān)鍵字組成的聯(lián)接條件,實現(xiàn)的兩個庫表之間的一種鏈接,即“永久關(guān)系”,它是兩個庫表中,具有相同從屬關(guān)系的數(shù)據(jù)之間的聯(lián)系紐帶。永久關(guān)系永久關(guān)系

永久關(guān)系并不能控制各表內(nèi)記錄指針間的關(guān)系(使用永久關(guān)系不能實現(xiàn)在一個表中移動記錄指針,從而改變另一個表中的指針的功能,但是臨時關(guān)系可以實現(xiàn))。適用范圍1.用于參照完整性,控制記錄在相關(guān)表中被插入、更新或刪除的方式;2.當(dāng)在“查詢設(shè)計器”或“視圖設(shè)計器”中,自動作為默認聯(lián)接條件;3.在“數(shù)據(jù)環(huán)境設(shè)計器”中,將參考永久關(guān)系,自動生成表之間的相應(yīng)的臨時關(guān)系。永久關(guān)系特點:這種關(guān)系一旦建立,就一直存在于數(shù)據(jù)庫之中,當(dāng)打開數(shù)據(jù)庫時,就開始起作用。擁有永久關(guān)系的表必須是庫表。類型:一對一:主表中的每一個記錄只與相關(guān)表中的一個記錄相關(guān)一對多:主表中的一個記錄與相關(guān)表中的多個記錄相關(guān)聯(lián)注意:主索引、候選索引可作為“一”方,而唯一索引、普通索引可作為“多”方;永久關(guān)系表示方法:

用一根連接父表的索引標(biāo)識到子表的索引標(biāo)識的連線來表示兩表之間的永久關(guān)系。建立方法:

在數(shù)據(jù)庫設(shè)計器中,將父表的主索引標(biāo)識或候選索引標(biāo)識左拖到子表的索引標(biāo)識上。刪除方法:按<Del>、<Backspace>鍵即可刪除;右擊連線,選擇快捷菜單中的“刪除關(guān)系”命令;編輯方法:單擊連線,在“數(shù)據(jù)庫”菜單中,選擇“編輯關(guān)系”命令右擊連線,選擇快捷菜單中的“編輯關(guān)系”命令定義:通過建立一組規(guī)則,并在規(guī)則的限制下,制定記錄如何在相關(guān)表中被插入、更新或刪除的方式,以確保數(shù)據(jù)的正確性、相容性和一致性。建立途徑:參照完整性生成器:確定要實施的規(guī)則類型、要實施規(guī)則的表以及會導(dǎo)致VFP檢查參照完整性規(guī)則的系統(tǒng)事件;并將自動生成的代碼作為觸發(fā)器保存在存儲過程中。編寫觸發(fā)器和存儲過程代碼來實施參照完整性。參照完整性參照完整性—生成器進入方法:方法一:單擊對話框中的“參照完整性”按鈕雙擊連線,進入“編輯關(guān)系”對話框方法二:右擊連線,在快捷菜單中選擇“編輯參照完整性”命令方法三:單擊連線,在“數(shù)據(jù)庫”菜單中選擇“編輯參照完整性”命令設(shè)置參照完整性規(guī)則

更新規(guī)則刪除規(guī)則插入規(guī)則當(dāng)父表中的關(guān)鍵字值被修改時當(dāng)父表中記錄被刪除時當(dāng)在子表中插入或更新記錄時級聯(lián)用新的關(guān)鍵字值更新子表中的所有相關(guān)記錄刪除子表中所有相關(guān)記錄限制若子表中有相關(guān)記錄則禁止更新若子表中有相關(guān)記錄則禁止刪除若父表中不存在匹配的關(guān)鍵字值,則禁止插入忽略允許更新,不管子表中的相關(guān)記錄允許刪除,不管子表中的相關(guān)記錄允許插入?yún)⒄胀暾陨善鲄⒄胀暾栽O(shè)置完畢,單擊“確定”按鈕,再連續(xù)兩次單擊“是”按鈕,確認生成完整性代碼;3.4臨時關(guān)系與永久關(guān)系的區(qū)別臨時關(guān)系可發(fā)生在自由表之間、庫表之間、自由表與庫表之間;而永久關(guān)系只能發(fā)生在庫表之間。臨時關(guān)系不屬于數(shù)據(jù)庫;而永久關(guān)系屬于數(shù)據(jù)庫。臨時關(guān)系是在需要才建立,且可隨時撤消,并不影響表中的數(shù)據(jù);而永久關(guān)系建立后,不能隨意撤消,否則,將影響數(shù)據(jù)的完整性。臨時關(guān)系可根據(jù)父表記錄指針的移動,而自動控制子表中記錄指針的移動;而永久關(guān)系并不控制記錄指針的移動。1.例:

新建一個數(shù)據(jù)庫ABC,在其中建立如下所示的永久關(guān)系

2.在數(shù)據(jù)庫ABC中,按如下要求建立完整性規(guī)則:

(1)

當(dāng)在BOOK表中刪除記錄時,REGISTER表中的所有記錄自動刪除(2)當(dāng)更新BOOK表中某除記錄的教材編碼時,REGISTER表中的所有相關(guān)記錄也同樣修改(3)當(dāng)在REGISTER增加新記錄時,BOOK表中必須有相關(guān)記錄REGISTERBOOK創(chuàng)建數(shù)據(jù)庫ABC.DBF,建立它們之間的永久關(guān)系設(shè)置參照完整性規(guī)則利用表單向?qū)?chuàng)建表單,表單內(nèi)容有:學(xué)號,姓名,專業(yè),生物,化學(xué),計算機,英語,平均分創(chuàng)建數(shù)據(jù)庫student.dbc,添加student表和score表2.建立兩個表之間的永久關(guān)系3.單擊“新建”按鈕,選擇“表單”4.單擊“向?qū)А卑粹o,選擇“一對多表單向?qū)А?單擊“確定”5.在“一對多表單向?qū)А钡闹笇?dǎo)下,分別選擇主表的字段:學(xué)號,姓名,專業(yè)和子表的生物,化學(xué),計算機,英語,平均分6…運行表單.作業(yè):用表單設(shè)計器創(chuàng)建具有以上內(nèi)容的表單jbqk.scx3.5查詢與SQL語言查詢:是從一個數(shù)據(jù)庫中檢索信息的一個請求,該請求使用一些條件提取特定的記錄,并將這些記錄按要求以集合的形式作為結(jié)果返回給用戶。建立查詢的方法SELECT-SQL命令:SELECT-SQL命令是VFP所支持的結(jié)構(gòu)化查詢語言(StructureQueryLanguage—,SQL)中的一條命令;查詢設(shè)計器:通過可視化的界面設(shè)計“查詢”,并可把“查詢”保存在.QPR文件中;查詢設(shè)計器與SELECT–SQL命令的關(guān)系查詢設(shè)計器實際上是設(shè)計一條SELECT–SQL命令的可視化方法;非常重要本節(jié)內(nèi)容是等級考試的重點之一也是本課程的考試重點之一3.5查詢設(shè)計器進入查詢設(shè)計器的方法可視方法調(diào)出“新建”對話框“文件”菜單的“新建”命令“常用”工具欄中的新建按鈕在“新建”對話框中“文件類型”框中,單擊“查詢”。單擊“新建”按鈕,直接進入查詢設(shè)計器單擊“向?qū)А卑粹o新建查詢命令

CREATE

QUERY

查詢文件名打開查詢命令

MODIFY

QUERY

查詢文件名3.5一個簡單查詢例如:查詢STUDENT表中的所有內(nèi)容進入查詢設(shè)計器為查詢定義數(shù)據(jù)源STUDENT.DBF在“字段”選項卡中,選擇所有字段運行查詢獲取與該查詢等價的SELECT—SQL命令進入“查詢”窗口(只讀型窗口,顯示等價的SELECT-SQL命令)選擇“查詢”菜單中“查看SQL”命令在查詢設(shè)計器的快捷菜單中“查看SQL”命令將窗口中的SELECT命令復(fù)制到剪貼板條件的類型條件類型說明=指定字段值等于右邊的實例Like指定字段與實例文本相匹配。(在LIKE后面使用的通配符是%)==指定字段與實例文本必須逐字符完全匹配>(>=)指定字段大于(大于或等于)實例文本的值<(<=)指定字段小于(小于或等于)實例文本的值IsNull指定字段包含null值Between指定字段大于等于示例文本中的低值并小于等于示例文本中的高值。實例文本中的這兩個值用逗號隔開。如,“Between(JS.CSRQ,{01/01/1950},{01/01/1960})”與出生日期在1950年1月1日至1960年1月1日的教師記錄相匹配IN指定字段必須與實例文本中逗號分隔的幾個樣本中的一個相匹配在“條件”列表中,除了常用的關(guān)系運算符外,還有:l

Like:意為在字段名框列出的字段值與實例框中給出字段值或樣本值執(zhí)行不完全匹配,它主要是針對字符類型的。如查詢條件為

Like%王(匹配姓名中最后一個字是王)

LIKE王%(匹配姓名中第一個字是王)

LIKE%王%(匹配姓名中包含王)l

IsNull::指定字段必須包含NULL值。Between(在中間):意為輸出字段的值應(yīng)大于或等于實例框中的最小值,而小于或等于實例框中的最大值。在實例框中最小值在前,最大值在后,中間以逗號分隔。

IN(在…之中):意為輸出字段的值必須是實例框中給出值中的一個,在實例框給出的各值之間以逗號分隔。

1.查詢student表中女性的七年制和女碩士,可構(gòu)造如下條件:性別=“女”AND(學(xué)制=“七”O(jiān)R

學(xué)制=“碩”)或者:性別=“女”AND學(xué)制=“七”O(jiān)R

性別=“女”AND

學(xué)制=“碩”查詢STUDENT表和SCORE表中年齡<22歲,英語成績在85~95之間的記錄2004-year(出生年月)>22and

英語between(85,95)

3.5.2.3查詢記錄的篩選(3)在“實例”列表中輸入比較值,如:臨床醫(yī)學(xué)(4)若要在搜索字符數(shù)據(jù)時忽略大小寫,可單擊大小寫下的按鈕。(5)如果希望對邏輯操作符的含義取反,可以選中否按鈕,如查找非“臨床醫(yī)學(xué)”專業(yè)的學(xué)生,則應(yīng)選中該按鈕,則可構(gòu)造出如下條件表達式:

Student.專業(yè)NotLike臨床醫(yī)學(xué)(6)在“實例”文本框輸入值時,必須注意:除非字符串同查詢中的字段名相同,否則不用把字符串用引號括起來。

(7)日期必須用花括號括起來,如:1980年1月12日應(yīng)寫為:{^1980//01/12}(8)邏輯值的前后必須使用句點號,如:.T.。

查找滿足多個條件的記錄,可以在“篩選”選項卡中添加多個條件并在“邏輯”列表中選擇他們之間的關(guān)系。默認的邏輯關(guān)系(無)自動以“與”(AND)的方式組合起來。查找的記錄滿足兩個以上條件中的任意一個,則需用“或”(OR)操作符將這些條件組合起來。3.5查詢的保存將在查詢設(shè)計器中設(shè)計的查詢保存到一個文件中,將來:可運行、修改等;保存查詢的方法“文件”菜單中“保存”命令“文件”菜單中“另存為”命令注意:查詢文件的保存地點3.5查詢的運行 查詢的運行:實際上就是數(shù)據(jù)庫發(fā)出一條查詢請求,并返回查詢后的結(jié)果集??梢暦绞剑哼M入查詢設(shè)計器窗口,并:“程序”菜單的“運行”命令“常用”工具欄中的“運行”按鈕命令方式:在命令窗口發(fā)布命令:DO

QueryFileName.QPR &&擴展名不能省略注意:必須將在查詢設(shè)計器中設(shè)計的查詢保存在一個查詢文件中直接在命令窗口發(fā)布等價的SELECT–SQL命令3.5查詢的修改在查詢設(shè)計器中修改查詢調(diào)出“打開”對話框選擇“文件”菜單的“打開”命令單擊“常用”工具欄中的“打開”按鈕在“打開”對話框中“文件類型”框中,選擇“查詢”。選擇所需修改的查詢文件(擴展名.QPR);單擊“確定”按鈕,進入查詢設(shè)計器,修改查詢。3.5查詢設(shè)計器窗口組成頂部窗格:為查詢指定數(shù)據(jù)源及多數(shù)據(jù)源之間的聯(lián)接條件字段:從數(shù)據(jù)源中,指定能出現(xiàn)在結(jié)果集中的列(可為字段、表達式(在表達式中,應(yīng)注意合計函數(shù):COUNT()、SUM()、AVG()、MAX()、MIN()的使用);篩選:指定記錄出現(xiàn)在結(jié)果集中的條件;排序依據(jù):指定結(jié)果集中的字段或表達式,排序結(jié)果集;分組依據(jù):指定數(shù)據(jù)源中的字段或表達式,用于把表中有相同值的記錄合并為一組,形成一條記錄出現(xiàn)在結(jié)果集中;雜項:是否允許結(jié)果集中出現(xiàn)重復(fù)記錄;還可限制每批次查詢的記錄數(shù)(全部記錄、最大數(shù)目或百分比);聯(lián)接:指定聯(lián)接表達式,用它來匹配多個表或視圖中的記錄;3.5查詢設(shè)計器—“查詢”菜單添加表:顯示“添加表或視圖”對話框,指定數(shù)據(jù)源。移去表:從設(shè)計器中移去所選定的表。移去聯(lián)接條件:移去所選中的表聯(lián)接線。輸出字段、聯(lián)接、篩選、排序依據(jù)、分組依據(jù)、雜項查詢?nèi)ハ颍猴@示“查詢?nèi)ハ颉睂υ捒颍搶υ捒蛟试S把查詢結(jié)果發(fā)送到七個不同的輸出目的地。查看SQL:在只讀的“查詢”窗口中,顯示等價的創(chuàng)建查詢或視圖的SQL語句。運行查詢:執(zhí)行所建立的SQLSELECT語句,并向所選定的輸出目的地發(fā)送結(jié)果??旖萱I:CTRL+Q3.5查詢設(shè)計器—快捷菜單右擊窗口,彈出快捷菜單運行查詢:執(zhí)行所建立的SQLSELECT語句,并向所選定的輸出目的地發(fā)送結(jié)果??旖萱I:CTRL+Q查看SQL:在只讀的“查詢”窗口中,顯示等價的創(chuàng)建查詢或視圖的SQL語句。移去表:從設(shè)計器中移去所選定的表。添加表:顯示“添加表或視圖”對話框,指定數(shù)據(jù)源。輸出設(shè)置:顯示“查詢?nèi)ハ颉睂υ捒?,該對話框允許把查詢結(jié)果發(fā)送到七個不同的輸出目的地。3.5結(jié)構(gòu)化查詢語言定義:是一種數(shù)據(jù)查詢和編程語言(StructuredQueryLanguage—SQL)。在VFP中,支持結(jié)構(gòu)化查詢語言命令,并以獨特高效的Rushmoretechnology優(yōu)化技術(shù)優(yōu)化SQL命令的執(zhí)行,且單個的SQL命令的功能相當(dāng)于多條VFP命令。SELECT-SQL:查詢UPDATE-SQL:修改記錄DELETE-SQL:邏輯刪除記錄INSERT-SQL:追加記錄ALTERTABLE-SQL:修改表結(jié)構(gòu)CREATECURSOR-SQL:創(chuàng)建臨時表CREATETABLE-SQL:創(chuàng)建表3.5SELECT-SQL命令SELECT[ALL|DISTINCT]

[TOP數(shù)值表達式[

PERCENT]]

[表別名.]檢索項[AS

列名

][,[表別名.]檢索項[AS列名

]...]

FROM[數(shù)據(jù)庫名!]表名[WHERE

連接條件[AND

連接條件...]

[AND|OR

條件表達式[AND|OR

條件表達式...]]]

[GROUPBY列名[,列名...]]

[HAVING條件表達式

]

[UNION[ALL]SELECT

語句] [ORDERBY排序項[ASC|DESC][,

排序項[ASC|DESC]]...] [INTOTABLE|DBF

表名

|CURSOR臨時文件名|ARRAY數(shù)組名]

[

TOFILE

文件名

]3.5SELECT-SQL命令說明

—相當(dāng)于“雜項”選項卡SELECT[ALL|DISTINCT]|[TOP

數(shù)值表達式[PERCENT]]ALL:顯示查詢結(jié)果中的所有行,缺省值。DISTINCT:

禁止在結(jié)果集中出現(xiàn)完全相同的記錄,每個

SELECT命令只能用一次DISTINCT選項。TOP

數(shù)值表達式[PERCENT]:指定顯示結(jié)果中的若干行,或顯示查詢結(jié)果行數(shù)的百分比。由數(shù)值表達式

確定顯示的行數(shù),百分比由PERCENT參數(shù)確定包含TOP子句時必須有ORDERBY

子句??梢灾付?到32767行,在指定的行數(shù)內(nèi),由ORDERBY子句指定的列如果有相同值,則相同值的那些行也在查詢結(jié)果中。3.5SELECT-SQL命令說明

—相當(dāng)于“字段”選項卡[表別名.]檢索項[AS列名

][,[表別名.]檢索項[AS列名

]…]指定查詢結(jié)果的各列,各列的值由檢索項確定,列名由“AS列名”確定。如果有同名的檢索項,通過在各項前加表別名予以區(qū)分,檢索項可以是FROM子句中表的字段名、常量、函數(shù)表達式。如選擇所有字段,可用“*”代替。FROM[數(shù)據(jù)庫名!]表名[邏輯別名]:指出包含查詢數(shù)據(jù)的表名的列表。如果查詢數(shù)據(jù)來自多張表,則表名用逗號分開,當(dāng)不同數(shù)據(jù)庫中的表同名時,在表名前加數(shù)據(jù)庫名,數(shù)據(jù)庫名與表名之間用“!”分隔。3.5SELECT-SQL命令說明

—相當(dāng)于“篩選”選項卡[WHERE

連接條件[AND

連接條件...]

[AND|OR條件表達式

[AND|OR

條件表達式…]]]該子句指明查詢條件,如果缺省則將查詢FROM子句指定表中所有記錄。如果由FROM子句指定多表查詢,則要用WHERE子句指定多表之間的連接條件。OperatorComparisonOperatorComparison=Equal>Morethan==Exactlyequal>=MorethanorequaltoLIKESQLLIKE<Lessthan<>!=

#Notequal<=Lessthanorequalto3.5SELECT-SQL命令說明

—相當(dāng)

溫馨提示

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

最新文檔

評論

0/150

提交評論