版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第三章查詢和統(tǒng)計(jì)簡(jiǎn)單查詢順序查詢索引查詢(快速查詢)統(tǒng)計(jì)(計(jì)數(shù)、求和、求平均)分類匯總多表操作臨時(shí)關(guān)系臨時(shí)關(guān)系與永久關(guān)系的區(qū)別查詢與查詢?cè)O(shè)計(jì)器SQL語(yǔ)言重要第1次第2次第3次第4次第5次第6次3
.
1順序查詢定義:所謂順序查詢就是按照記錄的物理順序或者邏輯順序,從首記錄開始按指定條件順序搜索,將記錄指針定位到第一條符合指定條件的記錄上,或者將記錄指針定位到文件結(jié)束標(biāo)志。查找表中全部女性記錄物理排序邏輯排序文件結(jié)束標(biāo)志第7次
順序查詢操作可以用命令LOCATE和CONTINUE實(shí)現(xiàn),也可以用限制對(duì)記錄和字段訪問(wèn)的菜單實(shí)現(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說(shuō)明:(1)
如命令中缺省<范圍>,LOCATE默認(rèn)范圍是表中的所有(ALL)的記錄。被搜索的表不必建立索引。(2)
若LOCATE發(fā)現(xiàn)滿足條件的記錄時(shí),記錄指針將定位于該記錄上,此時(shí),RECNO()返回該記錄號(hào),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)一個(gè)滿足條件的記錄之后,可用CONTINUE命令,在表的剩余記錄繼續(xù)查找滿足條件的下一個(gè)記錄。CONTINUE命令可以重復(fù)使用,直至到達(dá)范圍的邊界或表尾。例查找STUDENT.DBF中,所有“王”姓學(xué)生的數(shù)據(jù)記錄,
USESTUDENTLOCATEFORSUBSTR(姓名,1,2)=“王”
DISPLAYCONTINUEDISPLAY…
問(wèn)題:查找所有“王”姓學(xué)生還可以用其他方法嗎?例,假定STUDENT.DBF學(xué)生數(shù)據(jù)表文件中前六條記錄均為男生的記錄,執(zhí)行以下命令序列后,RECNO()函數(shù)的值是_____。
GO3LOCATENEXT3FOR性別="男"
A)3B)4C)5D)6
例:對(duì)表STUDENT操作,查找籍貫為湖北的學(xué)生。
LOCATEFOR“湖”$籍貫
DISPLAYCONTINUEDISPLAY
又例:查找所有“王”姓學(xué)生的數(shù)據(jù)記錄,輸入以下命令(?):
SET
EXACT
OFFLOCATEFOR姓名=“王”
DISPCONTINUE例:查找男性且未婚的記錄locatefor性別=‘男’.and.
.not.婚否displaycontinuedisplay例:查找男性五年制且1976年后出生的記錄Locate
for性別=‘男’.and.學(xué)制=‘五’;.and.year(出生年月)>1976displaycontinuedisplay若要按特定的順序定位、查看或操作記錄,可以使用索引。VFP使用索引作為排序機(jī)制,為開發(fā)應(yīng)用程序提供靈活性?;靖拍睿篤FP索引是由指針構(gòu)成的文件,這些指針按照索引關(guān)鍵字進(jìn)行排序。索引文件和表文件分別存儲(chǔ),并且不改變表中記錄的物理順序。3.2索引與快速查詢創(chuàng)建索引是創(chuàng)建一個(gè)由指向.dbf文件記錄的指針構(gòu)成的文件。若要按照特定順序處理表記錄,可以建立一個(gè)(或多個(gè))相應(yīng)的索引,使用索引還可以加速對(duì)表的查詢操作。索引文件主要包含兩部分:1.索引關(guān)鍵字;2.指向原表文件中與關(guān)鍵字相對(duì)應(yīng)的記錄號(hào)。索引文件索引(索引項(xiàng)或索引標(biāo)識(shí))保存在索引文件中。10500211050012040023040011003003903002503001602002702001801002401001記錄號(hào)編號(hào)馬超頻0500111邵林文賀0300310宋紹明030029張小鵬010028劉巧玲020017賈貴紅020026王為冬030015韓偉東010014姜瑞青040013林文靈040022苗莉050021姓名編號(hào)記錄號(hào)索引標(biāo)識(shí)示意結(jié)構(gòu)表文件部分?jǐn)?shù)據(jù)索引的類型主索引、候選索引、唯一索引、普通索引在結(jié)構(gòu)復(fù)合索引文件中數(shù)據(jù)庫(kù)表:主索引、候選索引、唯一索引、普通索引自由表:
候選索引、唯一索引、普通索引在單索引文件中,只有唯一索引、普通索引索引的類型
主索引(PrimaryIndex):
主索引能保證字段中輸入值的惟一性,同時(shí)能決定記錄的處理順序。主索引僅適用于數(shù)據(jù)庫(kù)表。在數(shù)據(jù)庫(kù)中,一個(gè)表上只能建立一個(gè)主索引,如果有必要確立記錄的其他處理順序,可以添加侯選索引。主索引可以作為一對(duì)多永久關(guān)系中的“一方”。
索引的類型
侯選索引(CandidateIndex)
侯選索引與主索引具有相同的特性相同,建立侯選索引的字段可以看作是侯選關(guān)鍵字,所以一個(gè)表可以建立多個(gè)侯選索引。
侯選索引像主索引一樣要求字段值的唯一性并決定了處理記錄的順序。在數(shù)據(jù)庫(kù)表和自由表中都可以建立侯選索引。候選索引與主索引的差別:一個(gè)表只能創(chuàng)建一個(gè)主索引一個(gè)表可創(chuàng)建多個(gè)候選索引唯一索引(UniqueIndex):
唯一索引允許指定字段中出現(xiàn)重復(fù)值,但以該字段的首次出現(xiàn)值為基礎(chǔ),選定一組記錄。再對(duì)選定的記錄進(jìn)行排序,輸出時(shí)無(wú)重復(fù)值。
可對(duì)同一表建立多個(gè)唯一索引。普通索引(RegularIndex):
普通索引也可以決定記錄的處理順序,但允許字段中出現(xiàn)重復(fù)值。每一個(gè)表都可以建立多個(gè)普通索引。另外,普通索引還可以作為一對(duì)多永久關(guān)系中的“多方”。
1.單索引文件只能按照一種關(guān)鍵字進(jìn)行索引的索引文件。其擴(kuò)展名為.IDX。2.復(fù)合索引文件可按多個(gè)關(guān)鍵字進(jìn)行索引的索引文件。其擴(kuò)展名為.CDX。一個(gè)復(fù)合索引文件允許存放多個(gè)索引,用以滿足一個(gè)表文件可能有多種索引順序的要求。每個(gè)索引有一個(gè)標(biāo)記(Tag)。VFP提供了兩種索引文件:復(fù)合索引文件又分為:結(jié)構(gòu)復(fù)合索引和非結(jié)構(gòu)復(fù)合索引兩種類型。結(jié)構(gòu)復(fù)合索引文件:名字由系統(tǒng)自動(dòng)分配,與表文件名相同,擴(kuò)展名為.CDX。當(dāng)打開表文件時(shí),該類索引文件也自動(dòng)打開。非結(jié)構(gòu)復(fù)合索引文件:名字由用戶給定,與表文件名不同,擴(kuò)展名為.CDX。當(dāng)打開表文件時(shí),該類索引文件不能自動(dòng)打開,須由用戶指定打開。
建立|刪除主索引命令
:格式:
ALTERTABLE
表名
ADD|DROPPRIMARYKEY
索引關(guān)鍵字[tag索引標(biāo)識(shí)名]
其中:
ADD用于添加主索引,DROP用于刪除主索引。缺省TAG短語(yǔ)時(shí)表示索引關(guān)鍵字與字段同名。例如:為數(shù)據(jù)庫(kù)表student添加以學(xué)號(hào)字段為索引關(guān)鍵字的主索引??捎妹睿篈ltertablestudentaddprimarykey
學(xué)號(hào)由于一個(gè)數(shù)據(jù)庫(kù)表只有一個(gè)主索引,所以刪除主索引不必指明索引關(guān)鍵字。例如,刪除數(shù)據(jù)庫(kù)表student主索引的命令為:Altertablestudentdropprimarykey用命令建立索引
命令方式
:格式:
INDEXON索引關(guān)鍵字
TO
單索引文件名
|TAG
索引標(biāo)識(shí)名
[OF非結(jié)構(gòu)復(fù)合索引文件名][FOR條件][unique][additive][ascending][descending]
功能:按索引關(guān)鍵字表達(dá)式建立一個(gè)符合條件的索引文件。利用該文件可以按照某種邏輯順序顯示或訪問(wèn)表記錄。
用命令建立索引說(shuō)明:
◆ON索引關(guān)鍵字
:指定索引表達(dá)式◆TO單索引文件:建立一個(gè)單獨(dú)的索引文件,系統(tǒng)默認(rèn)擴(kuò)展名.IDX?!鬞AG索引標(biāo)識(shí)名:在一個(gè)結(jié)構(gòu)復(fù)合索引文件中建立多個(gè)索引,其索引文件名與表名相同,擴(kuò)展名.CDX?!鬙F非結(jié)構(gòu)復(fù)合索引文件名:指定生成非結(jié)構(gòu)復(fù)合索引文,其索引文件名由用戶指定,擴(kuò)展名“.CDX”◆FOR
條件:只對(duì)滿足條件的記錄進(jìn)行索引?!魎nique:建立唯一索引。(只將索引表達(dá)式值相同值的首記錄放入索引文件中)◆ADDITIVE
所有先前已打開的索引文件保持打開狀態(tài),否則,關(guān)閉先前已打開的索引文件(結(jié)構(gòu)復(fù)合索引文件除外)?!鬉SCENDING
或DESCENDING
說(shuō)明建立升序或降序索引,默認(rèn)升序。
◆單索引文件的索引關(guān)鍵字只能是N、C、D型字段。
◆單索引文件索引關(guān)鍵字表達(dá)式為多個(gè)關(guān)鍵字組合(稱為多重索引)時(shí),要用字串連接符“+”號(hào)連接起來(lái),并且類型要一致。若是N和D型數(shù)據(jù),須用STR()和DTOC()函數(shù)將其轉(zhuǎn)化成C型。多重索引時(shí),排在最前面的為主索引關(guān)鍵字。排序時(shí),先排主索引關(guān)鍵字,再排第二關(guān)鍵字,以后依次類推。例:①對(duì)表STUDENT操作,按姓名(升序)建立單索引文件姓名.idx。
②對(duì)表score操作,按計(jì)算機(jī)(降序)建立單索引文件JSJ.idx。SELECT1 USESTUDENT
INDEXON姓名
TO姓名
BROWSE use
score
in
0 select
score INDEXON-計(jì)算機(jī)
TO
jsj
&&單索引文件中,只能對(duì)數(shù)值型字段做降序操作。
BROWSEdir*.idx例:建立結(jié)構(gòu)復(fù)合索引文件,其中包括2個(gè)索引:①記錄按姓名降序排列,索引標(biāo)識(shí)為普通索引。②記錄按性別升序排列,性別相同時(shí)按專業(yè)升序排列,索引標(biāo)識(shí)為普通索引。USESTUDENTINDEXON
姓名TAGXMdescList&&記錄已按姓名降序排列INDEXON性別+專業(yè)TAGxbzyList*記錄已按性別升序排列,性別相同時(shí)按專業(yè)升序排列DIR*.CDXBROWSE例:建立以專業(yè)索引的非結(jié)構(gòu)索引文件SZY.DBF,其中一個(gè)索引:記錄按專業(yè)升序排列,專業(yè)相同時(shí)按出生年月升序排列。DIR*.CDXUSESTUDENTINDEXON專業(yè)+dtoc(出生年月)TAGzycsOFSZY*如果是ON專業(yè)+dtoc(出生年月)desc則同為降序排列DIR*.CDXBROWSE在表設(shè)計(jì)器中建立索引(1)打開數(shù)據(jù)庫(kù)表STUDENT.DBF。
(2)在彈出的“表設(shè)計(jì)器”對(duì)話框中,單擊“字段”選項(xiàng)卡,在“索引”框中選擇索引為升序或降序。(3)單擊“索引”選項(xiàng)卡,在“索引名”框中,鍵入索引標(biāo)記或保留原索引名。
(4)在“類型”列表中,選定索引類型。
(5)在“表達(dá)式”框中,鍵入作為記錄排序依據(jù)的字段名,或者單擊表達(dá)式框后的按紐,在“表達(dá)式生成器”對(duì)話框中,建立表達(dá)式。
(6)如果希望有選擇的輸出記錄,可在“篩選”框中輸入篩選表達(dá)式,或者單擊篩選表達(dá)式框后的按紐,在“表達(dá)式生成器”對(duì)話框中,建立篩選表達(dá)式。
(7)選中“確定”按紐。
(1)打開已建好索引的表,單擊【顯示】菜單的“瀏覽”命令。
(3)在“表”菜單中選中“屬性”命令,系統(tǒng)彈出“工作區(qū)屬性”對(duì)話框。
(4)在“索引順序”框中,選中某一索引。
(5)單擊“確定”按紐。顯示在“瀏覽”窗口中的表將按照索引關(guān)鍵字(姓名)指定的順序排列記錄。3.2.1.3激活索引對(duì)記錄排序?qū)TUDENT.DBF表中的性別和出生年月進(jìn)行排序。
(1)在表設(shè)計(jì)器的“索引”選項(xiàng)卡單擊“插入”命令按鈕;(2)在”索引名“框中,輸入索引名,如性別。
(3)在“類型“框中,選擇索引類型,如普通索引。
(4)單擊“表達(dá)式”框右邊的按紐,系統(tǒng)彈出“表達(dá)式生成器”對(duì)話框。(5)在對(duì)話框中輸入索引表達(dá)式“性別+CTOD(出生日期)”,最后單擊“確定”按鈕。3.2.1.4多個(gè)字段索引(5)在“表達(dá)式生成器”對(duì)話框的“表達(dá)式”框中,輸入表達(dá)式:性別+DTOC(出生年月)
(6)選中“確定”按紐。(7)在“表”菜單中選中“屬性”命令,在“工作區(qū)屬性”窗口中,選“索引順序”的“student:性別”,單擊“確定”,顯示表達(dá)式“性別+DTOC(出生年月)”排序的結(jié)果。
1.打開索引文件
與表名相同的結(jié)構(gòu)索引在打開表時(shí)都能自動(dòng)打開,但是對(duì)于非結(jié)構(gòu)索引必須在使用之前打開索引文件。格式1:USE
表名[INDEX〈單索引文件名〉]
[ORDER<索引順序號(hào)>|
[TAG]<索引標(biāo)記名>[OF<非結(jié)構(gòu)復(fù)合索引文件名>][ASCENDING|DESCEDING]3.2.1.5.使用索引文件說(shuō)明:
(1)在格式1中,命令USE表名
INDEX索引文件名,打開表文件的同時(shí)打開單索引文件或非結(jié)構(gòu)復(fù)合索引文件,并指定復(fù)合索引文件中的主控標(biāo)識(shí).。(2)在格式1中,命令USE表名ORDER
標(biāo)記名,或USE表名
ORDER[TAG]標(biāo)記名,打開表文件的同時(shí)打開結(jié)構(gòu)復(fù)合索引文件,并指定復(fù)合索引文件中的主控標(biāo)識(shí).格式2:
SETINDEXTO[單索引文件列表]格式3:
SETORDERTO<索引標(biāo)記名>|<索引序號(hào)>[OF<非結(jié)構(gòu)復(fù)合索引文件名>][ASCENDING|DESCEDING]][ADDTIVE]說(shuō)明:在格式2、3中,必須先打開表文件和相關(guān)的索引文件:SETINDEXTO〈索引文件列表〉:指定要打開的一個(gè)或多個(gè)索引文件列表,該列表中各索引文件用逗號(hào)分隔.其中可以包含任意個(gè).IDX或非結(jié)構(gòu)索引文件名。
SETORDER
TOTAG〈索引標(biāo)記名〉:指定結(jié)構(gòu)索引文件中的一個(gè)標(biāo)識(shí)作為主控標(biāo)識(shí)。(3)SETORDERTOTAG〈索引標(biāo)記名〉OF〈CDX索引文件名〉,指定非結(jié)構(gòu)復(fù)合索引文件中的一個(gè)標(biāo)記作為主控索引標(biāo)識(shí)。例:打開表文件,同時(shí)打開單索引文件姓名.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如果打開表文件時(shí)沒(méi)有打開與之相關(guān)的單索引文件或非結(jié)構(gòu)復(fù)合索引文件,則修改表文件中的數(shù)據(jù)時(shí),相關(guān)的單索引文件或非結(jié)構(gòu)復(fù)合索引文件必須用“重新索引”命令修改,其命令格式如下:
REINDEX
功能:按照修改后的表自動(dòng)修改與之相關(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è)計(jì)器中進(jìn)行,也可以用命令,其格式是:
DELETETAGTagName
刪除由TagName指定的索引。或DELETETAGALL
刪除全部索引。3.2.1.7索引文件的關(guān)閉例:分別按性別、姓名排序,再刪除索引標(biāo)識(shí)。(設(shè)表中已經(jīng)建立了性別、性別和專業(yè)的復(fù)合索引XB和xbzy)USESTUDENTBROWSE
SETORDERTO1&&或者SETORDERTOXmBROWSESETORDER
TO2&&或者SETORDERTOxbzyBROEWSEDELETAG
xm&&刪除性別字段的索引標(biāo)識(shí)“XB”DELETAG
ALL&&刪除全部索引標(biāo)識(shí)快速查詢就是索引查詢。與順序查詢相比,索引查詢因其速度快而被廣泛采用。VFP系統(tǒng)提供了兩條快速(索引)查找記錄命令:FIND、SEEK。3.2.2.1FIND命令格式:FIND<表達(dá)式>功能:索引查找某個(gè)表,將記錄指針指向與表達(dá)式相匹配的第一條記錄。3.2.2快速查詢說(shuō)明:(1)參數(shù)<字符表達(dá)式>:可以是數(shù)值型常量或字符變量;如果是字符變量,則應(yīng)在該變量前加宏代換函數(shù)“&”。(2)要求當(dāng)前表已經(jīng)建立了索引,且表達(dá)式之值必須是表中索引關(guān)鍵字的值。(3)如果找到匹配的記錄,則RECNO()函數(shù)返回匹配記錄的記錄號(hào),F(xiàn)OUND()函數(shù)返回.T.。而EOF()函數(shù)返回.F.;如果未找到匹配的記錄,則RECNO()函數(shù)的返回值等于表的記錄數(shù)加1,F(xiàn)OUND()函數(shù)返回.F.。而EOF()函數(shù)返回.T.。說(shuō)明:(4)FIND命令只能將記錄指針定位于與索引關(guān)鍵字相匹配的第一條記錄,要繼續(xù)查找下一個(gè)匹配記錄,則需用SKIP命令。若要顯示該記錄的內(nèi)容,可用DISPLAY命令。(5)FIND命令查找字符串時(shí)。該字符串可以用定界符將字符串括起來(lái),也可以省略定界符。但是,如果該字符串本身就包含單引號(hào)、雙引號(hào)和方括號(hào),就必須用另一種定界符將字符串?dāng)U起來(lái)。格式:SEEK<表達(dá)式>功能:索引查找某個(gè)表,執(zhí)行該命令將記錄指針指向與指定表達(dá)式值相匹配的第一條記錄。說(shuō)明:SEEK命令的操作與FIND命令類似。但是,當(dāng)<表達(dá)式>為字符型內(nèi)存變量是SEEK命令不能用&函數(shù);<表達(dá)式>可以是字符型、數(shù)值型、日期型數(shù)據(jù),如果是字符常量時(shí),必須用定界符將字符串括起來(lái)。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ù)類型不匹配”錯(cuò)誤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級(jí)男學(xué)生,顯示前兩名記錄的學(xué)號(hào)(C型)、姓名、籍貫。indexon
LEFT(學(xué)號(hào),2)+性別TAGXHXBDESCFIND
98男l(wèi)istnext
2
學(xué)號(hào),姓名,籍貫或者Index
on
LEFT(學(xué)號(hào),2)+性別TOXHXBSeek“98男”&&必須用定界符括起來(lái)Display
學(xué)號(hào),姓名,籍貫SkipDisp學(xué)號(hào),姓名,籍貫例:查找“王”姓的同學(xué)(模糊查詢)SET
EXACT
OFFUSESTUDENTORDERXMFIND
王&&或者SEEK“王”DISPLAYName=“王”FIND&NAME&&或者
SEEKNAMEDISPLAYSETEXACTONFIND王&&或者SEEK“王”DISPLAY&&查詢無(wú)結(jié)果,除非表中有姓名是“王”的記錄3.3統(tǒng)計(jì)—計(jì)數(shù)
COUNT
[Scope][FOR<條件>][TO<內(nèi)存變量>]功能:在指定范圍內(nèi),統(tǒng)計(jì)滿足條件的記錄個(gè)數(shù)說(shuō)明:本命令的默認(rèn)范圍是ALL;
例,執(zhí)行下列語(yǔ)句后,變量A1,A2,A3,A4,A5分別是什么?USESTUDENT&&表中學(xué)號(hào)字段是字符型COUNTCOUNT
TOA1COUNTTO
A2FOR
性別=“男”COUNTFORLEFT(學(xué)號(hào),2)=“96”TOA3COUNTFORleft(學(xué)號(hào),2)=“98”O(jiān)Rleft(學(xué)號(hào),2)=“99”
TOA4COUNTTOA5FOR
!婚否3.3統(tǒng)計(jì)—求和SUM
[<表達(dá)式表>][Scope]
[FOR<條件>]
[TO<內(nèi)存變量表>
|TO
ARRAY
數(shù)組]功能:在指定范圍內(nèi),按照表達(dá)式表的要求,對(duì)滿足條件記錄的數(shù)值型字段求和。說(shuō)明:本命令的默認(rèn)范圍是ALL;當(dāng)缺省表達(dá)式表時(shí),將對(duì)當(dāng)前表中所有數(shù)值型字段求和;當(dāng)缺省TO內(nèi)存變量表時(shí),求和結(jié)果不予保存;當(dāng)表達(dá)式表
和內(nèi)存變量表
都選擇時(shí),表達(dá)式表中的表達(dá)式數(shù)目必須與內(nèi)存變量表中的變量數(shù)目相等;3.3統(tǒng)計(jì)—求和USESCORESUMSUM
生物,化學(xué)SUM
生物,化學(xué)TOSW,HXSUM
生物,化學(xué)TOSW,HXFORLEFT(學(xué)號(hào),2)="98"Settalkon
3.3統(tǒng)計(jì)—求平均AVERAGE[表達(dá)式表][Scope][FOR<條件>]
[TO
內(nèi)存變量表|TOARRAY數(shù)組]功能:在指定范圍內(nèi),按照表達(dá)式表的要求,對(duì)滿足條件記錄的數(shù)值型字段求平均值。說(shuō)明:本命令的默認(rèn)范圍是ALL;當(dāng)缺省表達(dá)式表時(shí),將對(duì)當(dāng)前表中所有數(shù)值型字段平均值;當(dāng)缺省TO內(nèi)存變量表時(shí),求和結(jié)果不予保存;當(dāng)表達(dá)式表和內(nèi)存變量表都選擇時(shí),表達(dá)式表中的表達(dá)式數(shù)目必須與內(nèi)存變量表中的變量數(shù)目相等;例:1.分別統(tǒng)計(jì)student.dbf中男生和女生的人數(shù);2.分別求score.dbf中98級(jí)、99級(jí)學(xué)生的計(jì)算機(jī)、英語(yǔ)的平均成績(jī).(保存在數(shù)組A和B中)UsestudentCountfor性別="男"
TOMCountfor性別<>"男"
TOF?"男生的人數(shù)是:",
M?"女生的人數(shù)是:",FAver計(jì)算機(jī),英語(yǔ)forleft(學(xué)號(hào),2)=“98”toarrayaAver計(jì)算機(jī),英語(yǔ)
forleft(學(xué)號(hào),2)=“98”toarrayb?“98級(jí)計(jì)算機(jī)成績(jī):",A1(1),"98級(jí)英語(yǔ)成績(jī):",A1(2)?“99級(jí)計(jì)算機(jī)成績(jī):",B1(1),"99級(jí)英語(yǔ)成績(jī):",B1(2)思考:怎樣用一個(gè)COUNT命令統(tǒng)計(jì)表中男、女生之和?怎樣統(tǒng)計(jì)表中姓名不包含“王”的學(xué)生人數(shù)?例:計(jì)算SCORE表中四門課程的平均值,并在表末尾增加一空記錄,將學(xué)號(hào)用“平均分”填充,各門課程平均分填入相應(yīng)字段。USE
SCOREAVERAGETOA,B,C,D&&學(xué)號(hào)字段必須是字符型APPEND
BLANK
REPLACE
學(xué)號(hào)WITH“平均分”,生物
WITHA,;
化學(xué)
WITHB,計(jì)算機(jī)WITHC,英語(yǔ)WITHDBROWSE3.3統(tǒng)計(jì)—分類匯總TOTALTO〈表文件名〉ON〈表達(dá)式〉
[FIELDS字段名表][Scope][FOR
〈條件〉]功能:對(duì)當(dāng)前表中的數(shù)值型字段進(jìn)行匯總說(shuō)明:本命令的默認(rèn)范圍是ALL;如缺省字段名表,則對(duì)所有數(shù)值型字段進(jìn)行匯總,否則,僅對(duì)字段名表中的數(shù)值型字段匯總;在匯總前,表中記錄必須物理有序或者邏輯有序,且匯總表達(dá)式必須是有序的依據(jù)中的一部分或者全部。了解3.3統(tǒng)計(jì)—分類匯總說(shuō)明字段名的值域必須是有限個(gè),且數(shù)量比較少;匯總結(jié)果表的結(jié)構(gòu)與當(dāng)前表的結(jié)構(gòu)一樣;匯總結(jié)果表中的記錄數(shù)與字段名的值域中個(gè)數(shù)是相等的;匯總結(jié)果以表的形式保存在表中,因此,需打開結(jié)果表瀏覽,才能看到匯總結(jié)果;注意:本命令中的字段名表,不對(duì)匯總結(jié)果表起作用,而僅僅是限制需匯總的數(shù)值型字段;當(dāng)匯總溢出時(shí),用“*”代替3.3統(tǒng)計(jì)—分類匯總USESCOREIN0SELECTSCORESETORDERTOZYTOTALONZYTOT1USET1IN0SELECTT1BROWSE假設(shè)在SCORE表結(jié)構(gòu)復(fù)合索引文件中,有三個(gè)索引標(biāo)識(shí):XH→學(xué)號(hào)、ZY→專業(yè)、XB→性別3.4多表操作有關(guān)概念的回顧:工作區(qū):在內(nèi)存中,為表操作而開辟的一塊區(qū)域。工作區(qū)號(hào):1-32767工作區(qū)碼:A、…、J、W11、…、W32767當(dāng)前工作區(qū):注意:?jiǎn)?dòng)VFP后,1號(hào)工作區(qū)為當(dāng)前工作區(qū);當(dāng)前表當(dāng)前記錄非常重要本節(jié)內(nèi)容的應(yīng)用是對(duì)前面所學(xué)內(nèi)容的綜合運(yùn)用3.4多表操作—?jiǎng)e名表的別名:在工作區(qū)中,打開一個(gè)表后,系統(tǒng)立即賦予一個(gè)可引用該表的名字默認(rèn)別名:表的默認(rèn)別名就是表名指定別名:在USE命令中使用ALIAS子句表別名的用途主要體現(xiàn)在多表操作中:在當(dāng)前工作區(qū)中,可引用其它工作區(qū)中表的字段;可選擇別名所對(duì)應(yīng)的表所在的工作區(qū)作為當(dāng)前工作區(qū);3.4多表操作—?jiǎng)e名格式1:TableAlias.FieldName (小數(shù)點(diǎn))格式2:TableAlias->FieldName (減號(hào)加大于號(hào))格式3:WorkArea
.FieldName (小數(shù)點(diǎn))格式4:WorkArea
->FieldName (減號(hào)加大于號(hào))說(shuō)明:在格式3和格式4中,WorkArea只能是工作區(qū)碼,不能是工作區(qū)號(hào)。例如:假設(shè)表STUDENT和表SCORE已分別在A工作區(qū)和B工作區(qū)中打開,當(dāng)前工作區(qū)為A區(qū)。
LISTFIELDS
學(xué)號(hào),姓名,SCORE.生物,SCORE->化學(xué),B.計(jì)算機(jī),B->英語(yǔ)3.4當(dāng)前工作區(qū)的選擇可視方法:在數(shù)據(jù)工作期中,選擇表即可選擇該表所在的工作區(qū)(只能選擇有表的工作區(qū))命令方法:格式1:SELECT
WorkArea
格式2:
SELECT0格式3:
SELECT
TableAlias
功能:當(dāng)前工作區(qū)選擇。說(shuō)明:格式2的功能是選擇編號(hào)最小的空閑工作區(qū)為當(dāng)前工作區(qū);當(dāng)工作區(qū)中無(wú)表時(shí),請(qǐng)用格式1或者格式2;當(dāng)工作區(qū)中有表時(shí),請(qǐng)用格式1或者格式3;3.4當(dāng)前工作區(qū)的選擇SELECT
31#A2#B3#C4#D5#Estudentscoreliberregister請(qǐng)思考當(dāng)前工作區(qū)?USEstudentSELECTBUSEscoreSELECT5USEbookALIASliberSELECT0USEregisterSELECTliberBROWSE1#A2#B3#C5#E1#A2#B3#C5#E5#E3.4數(shù)據(jù)工作期定義:表單、表單集或報(bào)表所使用的當(dāng)前動(dòng)態(tài)工作環(huán)境的一種表示。每一個(gè)數(shù)據(jù)工作期包含有自己的一組工作區(qū)。分類:默認(rèn)數(shù)據(jù)工作期(公共數(shù)據(jù)工作期)專用數(shù)據(jù)工作期(私有數(shù)據(jù)工作期)功能:打開或顯示表或視圖;建立臨時(shí)關(guān)系;選擇當(dāng)前工作區(qū);設(shè)置工作區(qū)屬性(在工作區(qū)屬性窗口中,單擊“修改”按鈕,還可進(jìn)入表設(shè)計(jì)器修改表結(jié)構(gòu))。進(jìn)入:在“常用”工具欄上選擇“數(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ū):表明臨時(shí)關(guān)系,這個(gè)關(guān)系是在“別名”框中的表或視圖之間建立的。按鈕區(qū):狀態(tài)顯示區(qū):3.4數(shù)據(jù)工作期窗口按鈕顯示“工作區(qū)屬性”對(duì)話框,在該對(duì)話框中可以:?jiǎn)螕簟靶薷摹卑粹o,進(jìn)入表設(shè)計(jì)器,修改表的結(jié)構(gòu);定義數(shù)據(jù)過(guò)濾器;定義、激活、關(guān)閉活動(dòng)字段表(相當(dāng)于全局的字段名表);選擇或取消主控索引;在“瀏覽”窗口中顯示在“別名”框中選擇的表或視圖,在該窗口中可以檢查、編輯或追加數(shù)據(jù)。顯示“打開”對(duì)話框,與“添加表或視圖”對(duì)話框相似,可以選擇要打開的表或視圖。從“別名”框中移去選中的表或視圖,以及任何相關(guān)的文件。 使用“表達(dá)式生成器”,定義表或視圖之間的一對(duì)一的臨時(shí)關(guān)系。
當(dāng)兩個(gè)表之間沒(méi)有定義索引順序時(shí),對(duì)話框會(huì)在“表達(dá)式生成器”對(duì)話框之前顯示“設(shè)置索引次序”對(duì)話框。顯示“創(chuàng)建一對(duì)多關(guān)系”對(duì)話框,在該對(duì)話框中可以在子表和父表之間建立一對(duì)多臨時(shí)關(guān)系。使用方法:選擇一對(duì)一關(guān)系中的父表,再單擊本按鈕就可將一對(duì)一關(guān)系改為一對(duì)多關(guān)系(雙線)。屬性:顯示“工作區(qū)屬性”對(duì)話框,在該對(duì)話框中可以:?jiǎn)螕簟靶薷摹卑粹o,進(jìn)入表設(shè)計(jì)器,修改表的結(jié)構(gòu);定義數(shù)據(jù)過(guò)濾器;定義、激活、關(guān)閉活動(dòng)字段表(相當(dāng)于全局的字段名表)選擇或取消主控索引;在“瀏覽”窗口中顯示在“別名”框中選擇的表或視圖,在該窗口中可以檢查、編輯或追加數(shù)據(jù)。顯示“打開”對(duì)話框,與“添加表或視圖”對(duì)話框相似,可以選擇要打開的表或視圖。從“別名”框中移去選中的表或視圖,以及任何相關(guān)的文件。使用“表達(dá)式生成器”,定義表或視圖之間的一對(duì)一的臨時(shí)關(guān)系。當(dāng)兩個(gè)表之間沒(méi)有定義索引順序時(shí),對(duì)話框會(huì)在“表達(dá)式生成器”對(duì)話框之前顯示“設(shè)置索引次序”對(duì)話框。顯示“創(chuàng)建一對(duì)多關(guān)系”對(duì)話框,在該對(duì)話框中可以在子表和父表之間建立一對(duì)多臨時(shí)關(guān)系。使用方法:選擇一對(duì)一關(guān)系中的父表,再單擊本按鈕就可將一對(duì)一關(guān)系改為一對(duì)多關(guān)系。3.4臨時(shí)關(guān)系定義:是兩表之間的一種關(guān)系,這種關(guān)系根據(jù)兩表公共關(guān)鍵字的對(duì)應(yīng)關(guān)系,能邏輯鏈接在不同工作區(qū)打開的兩個(gè)相關(guān)表,使這兩個(gè)表從邏輯上聯(lián)接成一個(gè)大表,方便從不同表中提取相關(guān)數(shù)據(jù)。作用機(jī)理:臨時(shí)關(guān)系通過(guò)父表中記錄指針的移動(dòng),再根據(jù)兩表的公共關(guān)鍵字的對(duì)應(yīng)關(guān)系,而自動(dòng)控制子表中記錄指針的移動(dòng)。父表:在臨時(shí)關(guān)系中起主導(dǎo)作用的表;也稱主表或主控表。子表:在臨時(shí)關(guān)系中受父表控制的表;也稱從表或受控表。效果:通過(guò)這種指針的聯(lián)動(dòng)關(guān)系,可從父表、子表的當(dāng)前記錄中,收集到能全面反映一個(gè)個(gè)體的完整數(shù)據(jù)或者所需要的與一個(gè)個(gè)體有關(guān)的分布在各表當(dāng)中的離散數(shù)據(jù)。3.4臨時(shí)關(guān)系的類型
臨時(shí)關(guān)系的類型指的是兩表之間記錄指針聯(lián)動(dòng)的方式。 假設(shè)在子表中有多重記錄與主表中的一條記錄相對(duì)應(yīng):一對(duì)一的臨時(shí)關(guān)系當(dāng)主表中的記錄指針移動(dòng)時(shí),子表中記錄指針只指向多重記錄的第一條一對(duì)多的臨時(shí)關(guān)系當(dāng)主表中的記錄指針移動(dòng)時(shí),子表中記錄指針將按順序指向多重記錄的第一條、第二條、…,而保持主表記錄指針不動(dòng),直到子表中的記錄指針掃過(guò)多重記錄后,主表指針才能繼續(xù)移動(dòng)。3.4一對(duì)一的臨時(shí)關(guān)系3.4一對(duì)多的臨時(shí)關(guān)系3.4建立臨時(shí)關(guān)系建立步驟:打開父表;打開子表;選擇子表所在的工作區(qū);激活子表的索引:若子表無(wú)索引,則建立索引;選擇主表所在的工作區(qū);建立從父表到子表的一對(duì)一的臨時(shí)關(guān)系;或者建立從父表到子表的一對(duì)多的臨時(shí)關(guān)系;建立方法可視方法:數(shù)據(jù)工作期命令方法:SETRELATIONTO3.4可視方法進(jìn)入數(shù)據(jù)工作期窗口:選擇“打開”按鈕,分別打開兩個(gè)表;在“別名”區(qū),單擊子表(相當(dāng)于選擇子表所在的工作區(qū))scorestudent學(xué)號(hào)單擊“屬性”按鈕,為子表在“工作區(qū)屬性”對(duì)話框的“索引順序”框中,選擇主控索引;在“別名”區(qū),單擊父表(相當(dāng)于選擇子表所在的工作區(qū))單擊”關(guān)系“按鈕,再單擊子表,在表達(dá)式生成器中選擇關(guān)鍵字,完成臨時(shí)關(guān)系的建立;3.4有關(guān)命令SETRELATIONTO <表達(dá)式1>INTO<WorkArea1|TableAlias1> [,<表達(dá)式2>
INTO<WorkArea2|TableAlias2>]...
[ADDITIVE]功能:建立從父表到子表的臨時(shí)關(guān)系。說(shuō)明:格式中的所有WorkArea:只能為工作區(qū)碼WorkArea1、TableAlias1:指定子表所在的工作區(qū)WorkArea2、TableAlias2:指定子表所在的工作區(qū)ADDITIVE:保留已有的臨時(shí)關(guān)系3.4命令方法若使用結(jié)構(gòu)復(fù)合索引存在CLOSEALLUSEstudent
IN
0USEscoreIN0
ORDERxhSELECTstudentSETrelationto學(xué)號(hào)
intoscorestudentscore學(xué)號(hào)CLOSEALLSELECT0USEscoreINDEX
ON
學(xué)號(hào)TAGxhSELECT0USEstudentSETrelationto學(xué)號(hào)
intoscore不存在3.4命令方法CLOSEALLUSEstudentIN
0USEscore
IN
0
INDEX
xhSELECTstudentSETrelationTO
學(xué)號(hào)
INTOscore若使用單索引CLOSEALLSelect0USEscoreIndexON
學(xué)號(hào)TOxhSelect0Usestudentsetrelationto學(xué)號(hào)
into
score存在不存在3.4檢驗(yàn)方法建立臨時(shí)關(guān)系的關(guān)鍵兩表必須有公共字段,且該公共字段的名字、類型、寬度在兩表中必須一致。臨時(shí)關(guān)系建立后的檢查方法分別打開兩表的數(shù)據(jù)窗口在主表的數(shù)據(jù)窗口移動(dòng)記錄指針,如果子表的數(shù)據(jù)窗口中的記錄發(fā)生相應(yīng)的變化,則臨時(shí)關(guān)系正確,否則,不正確。臨時(shí)關(guān)系的使用關(guān)鍵:必須在主表中移動(dòng)記錄指針,子表的記錄指針才能跟隨移動(dòng);反過(guò)來(lái),臨時(shí)關(guān)系不起作用。3.4臨時(shí)關(guān)系的應(yīng)用例,1.在student表中增加“總分”和“平均分”字段,分別用score表中的生物、化學(xué)、計(jì)算機(jī)和英語(yǔ)成績(jī)的總和與平均成績(jī)填充。2.顯示總分前三名記錄的學(xué)號(hào),姓名,籍貫,總分.(p104-二)Altertablestudentadd總分n(6,2)Altertablestudentadd平均分n(6,2)Select2USEscoreIndexon學(xué)號(hào)to學(xué)號(hào)selectstudentSETrelationTO學(xué)號(hào)intoscoreReplaceall總分withb.生物+b.化學(xué)+b.計(jì)算機(jī)+b.英語(yǔ)
,
平均分with總/4Indexon總分desctagzfLISTnext3學(xué)號(hào),姓名,籍貫,總分3.4臨時(shí)關(guān)系的應(yīng)用從student表和score表中,提取生物、化學(xué)均不及格的學(xué)生名單wwe.dbf(表中只有這些學(xué)生的學(xué)號(hào)、姓名、生物、化學(xué)成績(jī))CLOSEALLSelectBUSEscoreindexon學(xué)號(hào)TOxhSeleAUSEstudentSETrelationto
學(xué)號(hào)into
B
&&建立臨時(shí)關(guān)系Copytowwefields
學(xué)號(hào),姓名,score.生物,b.化學(xué);
FORb.生物<60ANDb.化學(xué)<603.4臨時(shí)關(guān)系的應(yīng)用在student表中,增加一個(gè)獎(jiǎng)學(xué)金字段(L,1),并使score表中平均分>90的學(xué)生獲得獎(jiǎng)學(xué)金。(P104-二.4)Replace獎(jiǎng)學(xué)金WITH.t.;FOR(b.生物+b->化學(xué)+b.計(jì)算機(jī)+b.英語(yǔ))/4>=90Select2UsescoreIndexon學(xué)號(hào)toxhselectstudentSetrelationto學(xué)號(hào)intoscore
&&建立臨時(shí)關(guān)系CloseallAltertablestudentadd獎(jiǎng)學(xué)金L
&&增加“獎(jiǎng)學(xué)金”字段3.4臨時(shí)關(guān)系的應(yīng)用rosterregisterbookrosterregisterbookSelect
0Use
rosterSelect
0USE
registerSetorder
tojsdmSelect0UserosterSetordertojcbm教師代碼jsdm教材編碼jcbmCLOSEALLSelectrosterSetrelato教師代碼intoregisterSelectregisterSetrelato教材代碼intobookADDITIVESELECTroster3.4臨時(shí)關(guān)系的應(yīng)用rosterregisterbookregisterSELECTAUSE
rosterindexon
教師代碼to
jsdmSELECTbUSEregisterSELECTCUSE
bookindexon教材編碼tojcbm教師代碼jsdm教材編碼jcbmrosterbookCLOSEALLSETrelato
教師代碼intoASETrelato教材編碼intoC
ADDILISTA.姓名,教師代碼,C.教材編碼;
forleft(教師代碼,2)=“02"3.4臨時(shí)關(guān)系的應(yīng)用思考題:請(qǐng)分別用可視化方法、命令方法,用臨時(shí)關(guān)系實(shí)現(xiàn)右圖所示三表之間的邏輯聯(lián)接。右圖所示的三表之間的邏輯聯(lián)接能否實(shí)現(xiàn)?如果能,請(qǐng)寫出命令如果不能,請(qǐng)說(shuō)明理由?rosterregisterbook教師代碼教材編碼rosterregisterbook教師代碼教材編碼主關(guān)鍵字:表中的一列或多列,其中的值唯一地標(biāo)識(shí)了表中的一行;外部關(guān)鍵字:一列或多列的組合,列中的值需要與另一個(gè)表中的主關(guān)鍵字相匹配。用于聯(lián)接相關(guān)表;定義:通過(guò)主關(guān)鍵字和外部關(guān)鍵字組成的聯(lián)接條件,實(shí)現(xiàn)的兩個(gè)庫(kù)表之間的一種鏈接,即“永久關(guān)系”,它是兩個(gè)庫(kù)表中,具有相同從屬關(guān)系的數(shù)據(jù)之間的聯(lián)系紐帶。永久關(guān)系永久關(guān)系
永久關(guān)系并不能控制各表內(nèi)記錄指針間的關(guān)系(使用永久關(guān)系不能實(shí)現(xiàn)在一個(gè)表中移動(dòng)記錄指針,從而改變另一個(gè)表中的指針的功能,但是臨時(shí)關(guān)系可以實(shí)現(xiàn))。適用范圍1.用于參照完整性,控制記錄在相關(guān)表中被插入、更新或刪除的方式;2.當(dāng)在“查詢?cè)O(shè)計(jì)器”或“視圖設(shè)計(jì)器”中,自動(dòng)作為默認(rèn)聯(lián)接條件;3.在“數(shù)據(jù)環(huán)境設(shè)計(jì)器”中,將參考永久關(guān)系,自動(dòng)生成表之間的相應(yīng)的臨時(shí)關(guān)系。永久關(guān)系特點(diǎn):這種關(guān)系一旦建立,就一直存在于數(shù)據(jù)庫(kù)之中,當(dāng)打開數(shù)據(jù)庫(kù)時(shí),就開始起作用。擁有永久關(guān)系的表必須是庫(kù)表。類型:一對(duì)一:主表中的每一個(gè)記錄只與相關(guān)表中的一個(gè)記錄相關(guān)一對(duì)多:主表中的一個(gè)記錄與相關(guān)表中的多個(gè)記錄相關(guān)聯(lián)注意:主索引、候選索引可作為“一”方,而唯一索引、普通索引可作為“多”方;永久關(guān)系表示方法:
用一根連接父表的索引標(biāo)識(shí)到子表的索引標(biāo)識(shí)的連線來(lái)表示兩表之間的永久關(guān)系。建立方法:
在數(shù)據(jù)庫(kù)設(shè)計(jì)器中,將父表的主索引標(biāo)識(shí)或候選索引標(biāo)識(shí)左拖到子表的索引標(biāo)識(shí)上。刪除方法:按<Del>、<Backspace>鍵即可刪除;右擊連線,選擇快捷菜單中的“刪除關(guān)系”命令;編輯方法:?jiǎn)螕暨B線,在“數(shù)據(jù)庫(kù)”菜單中,選擇“編輯關(guān)系”命令右擊連線,選擇快捷菜單中的“編輯關(guān)系”命令定義:通過(guò)建立一組規(guī)則,并在規(guī)則的限制下,制定記錄如何在相關(guān)表中被插入、更新或刪除的方式,以確保數(shù)據(jù)的正確性、相容性和一致性。建立途徑:參照完整性生成器:確定要實(shí)施的規(guī)則類型、要實(shí)施規(guī)則的表以及會(huì)導(dǎo)致VFP檢查參照完整性規(guī)則的系統(tǒng)事件;并將自動(dòng)生成的代碼作為觸發(fā)器保存在存儲(chǔ)過(guò)程中。編寫觸發(fā)器和存儲(chǔ)過(guò)程代碼來(lái)實(shí)施參照完整性。參照完整性參照完整性—生成器進(jìn)入方法:方法一:單擊對(duì)話框中的“參照完整性”按鈕雙擊連線,進(jìn)入“編輯關(guān)系”對(duì)話框方法二:右擊連線,在快捷菜單中選擇“編輯參照完整性”命令方法三:單擊連線,在“數(shù)據(jù)庫(kù)”菜單中選擇“編輯參照完整性”命令設(shè)置參照完整性規(guī)則
更新規(guī)則刪除規(guī)則插入規(guī)則當(dāng)父表中的關(guān)鍵字值被修改時(shí)當(dāng)父表中記錄被刪除時(shí)當(dāng)在子表中插入或更新記錄時(shí)級(jí)聯(lián)用新的關(guān)鍵字值更新子表中的所有相關(guān)記錄刪除子表中所有相關(guān)記錄限制若子表中有相關(guān)記錄則禁止更新若子表中有相關(guān)記錄則禁止刪除若父表中不存在匹配的關(guān)鍵字值,則禁止插入忽略允許更新,不管子表中的相關(guān)記錄允許刪除,不管子表中的相關(guān)記錄允許插入?yún)⒄胀暾陨善鲄⒄胀暾栽O(shè)置完畢,單擊“確定”按鈕,再連續(xù)兩次單擊“是”按鈕,確認(rèn)生成完整性代碼;3.4臨時(shí)關(guān)系與永久關(guān)系的區(qū)別臨時(shí)關(guān)系可發(fā)生在自由表之間、庫(kù)表之間、自由表與庫(kù)表之間;而永久關(guān)系只能發(fā)生在庫(kù)表之間。臨時(shí)關(guān)系不屬于數(shù)據(jù)庫(kù);而永久關(guān)系屬于數(shù)據(jù)庫(kù)。臨時(shí)關(guān)系是在需要才建立,且可隨時(shí)撤消,并不影響表中的數(shù)據(jù);而永久關(guān)系建立后,不能隨意撤消,否則,將影響數(shù)據(jù)的完整性。臨時(shí)關(guān)系可根據(jù)父表記錄指針的移動(dòng),而自動(dòng)控制子表中記錄指針的移動(dòng);而永久關(guān)系并不控制記錄指針的移動(dòng)。1.例:
新建一個(gè)數(shù)據(jù)庫(kù)ABC,在其中建立如下所示的永久關(guān)系
2.在數(shù)據(jù)庫(kù)ABC中,按如下要求建立完整性規(guī)則:
(1)
當(dāng)在BOOK表中刪除記錄時(shí),REGISTER表中的所有記錄自動(dòng)刪除(2)當(dāng)更新BOOK表中某除記錄的教材編碼時(shí),REGISTER表中的所有相關(guān)記錄也同樣修改(3)當(dāng)在REGISTER增加新記錄時(shí),BOOK表中必須有相關(guān)記錄REGISTERBOOK創(chuàng)建數(shù)據(jù)庫(kù)ABC.DBF,建立它們之間的永久關(guān)系設(shè)置參照完整性規(guī)則利用表單向?qū)?chuàng)建表單,表單內(nèi)容有:學(xué)號(hào),姓名,專業(yè),生物,化學(xué),計(jì)算機(jī),英語(yǔ),平均分創(chuàng)建數(shù)據(jù)庫(kù)student.dbc,添加student表和score表2.建立兩個(gè)表之間的永久關(guān)系3.單擊“新建”按鈕,選擇“表單”4.單擊“向?qū)А卑粹o,選擇“一對(duì)多表單向?qū)А?單擊“確定”5.在“一對(duì)多表單向?qū)А钡闹笇?dǎo)下,分別選擇主表的字段:學(xué)號(hào),姓名,專業(yè)和子表的生物,化學(xué),計(jì)算機(jī),英語(yǔ),平均分6…運(yùn)行表單.作業(yè):用表單設(shè)計(jì)器創(chuàng)建具有以上內(nèi)容的表單jbqk.scx3.5查詢與SQL語(yǔ)言查詢:是從一個(gè)數(shù)據(jù)庫(kù)中檢索信息的一個(gè)請(qǐng)求,該請(qǐng)求使用一些條件提取特定的記錄,并將這些記錄按要求以集合的形式作為結(jié)果返回給用戶。建立查詢的方法SELECT-SQL命令:SELECT-SQL命令是VFP所支持的結(jié)構(gòu)化查詢語(yǔ)言(StructureQueryLanguage—,SQL)中的一條命令;查詢?cè)O(shè)計(jì)器:通過(guò)可視化的界面設(shè)計(jì)“查詢”,并可把“查詢”保存在.QPR文件中;查詢?cè)O(shè)計(jì)器與SELECT–SQL命令的關(guān)系查詢?cè)O(shè)計(jì)器實(shí)際上是設(shè)計(jì)一條SELECT–SQL命令的可視化方法;非常重要本節(jié)內(nèi)容是等級(jí)考試的重點(diǎn)之一也是本課程的考試重點(diǎn)之一3.5查詢?cè)O(shè)計(jì)器進(jìn)入查詢?cè)O(shè)計(jì)器的方法可視方法調(diào)出“新建”對(duì)話框“文件”菜單的“新建”命令“常用”工具欄中的新建按鈕在“新建”對(duì)話框中“文件類型”框中,單擊“查詢”。單擊“新建”按鈕,直接進(jìn)入查詢?cè)O(shè)計(jì)器單擊“向?qū)А卑粹o新建查詢命令
CREATE
QUERY
查詢文件名打開查詢命令
MODIFY
QUERY
查詢文件名3.5一個(gè)簡(jiǎn)單查詢例如:查詢STUDENT表中的所有內(nèi)容進(jìn)入查詢?cè)O(shè)計(jì)器為查詢定義數(shù)據(jù)源STUDENT.DBF在“字段”選項(xiàng)卡中,選擇所有字段運(yùn)行查詢獲取與該查詢等價(jià)的SELECT—SQL命令進(jìn)入“查詢”窗口(只讀型窗口,顯示等價(jià)的SELECT-SQL命令)選擇“查詢”菜單中“查看SQL”命令在查詢?cè)O(shè)計(jì)器的快捷菜單中“查看SQL”命令將窗口中的SELECT命令復(fù)制到剪貼板條件的類型條件類型說(shuō)明=指定字段值等于右邊的實(shí)例Like指定字段與實(shí)例文本相匹配。(在LIKE后面使用的通配符是%)==指定字段與實(shí)例文本必須逐字符完全匹配>(>=)指定字段大于(大于或等于)實(shí)例文本的值<(<=)指定字段小于(小于或等于)實(shí)例文本的值IsNull指定字段包含null值Between指定字段大于等于示例文本中的低值并小于等于示例文本中的高值。實(shí)例文本中的這兩個(gè)值用逗號(hào)隔開。如,“Between(JS.CSRQ,{01/01/1950},{01/01/1960})”與出生日期在1950年1月1日至1960年1月1日的教師記錄相匹配IN指定字段必須與實(shí)例文本中逗號(hào)分隔的幾個(gè)樣本中的一個(gè)相匹配在“條件”列表中,除了常用的關(guān)系運(yùn)算符外,還有:l
Like:意為在字段名框列出的字段值與實(shí)例框中給出字段值或樣本值執(zhí)行不完全匹配,它主要是針對(duì)字符類型的。如查詢條件為
Like%王(匹配姓名中最后一個(gè)字是王)
LIKE王%(匹配姓名中第一個(gè)字是王)
LIKE%王%(匹配姓名中包含王)l
IsNull::指定字段必須包含NULL值。Between(在中間):意為輸出字段的值應(yīng)大于或等于實(shí)例框中的最小值,而小于或等于實(shí)例框中的最大值。在實(shí)例框中最小值在前,最大值在后,中間以逗號(hào)分隔。
IN(在…之中):意為輸出字段的值必須是實(shí)例框中給出值中的一個(gè),在實(shí)例框給出的各值之間以逗號(hào)分隔。
1.查詢student表中女性的七年制和女碩士,可構(gòu)造如下條件:性別=“女”AND(學(xué)制=“七”O(jiān)R
學(xué)制=“碩”)或者:性別=“女”AND學(xué)制=“七”O(jiān)R
性別=“女”AND
學(xué)制=“碩”查詢STUDENT表和SCORE表中年齡<22歲,英語(yǔ)成績(jī)?cè)?5~95之間的記錄2004-year(出生年月)>22and
英語(yǔ)between(85,95)
3.5.2.3查詢記錄的篩選(3)在“實(shí)例”列表中輸入比較值,如:臨床醫(yī)學(xué)(4)若要在搜索字符數(shù)據(jù)時(shí)忽略大小寫,可單擊大小寫下的按鈕。(5)如果希望對(duì)邏輯操作符的含義取反,可以選中否按鈕,如查找非“臨床醫(yī)學(xué)”專業(yè)的學(xué)生,則應(yīng)選中該按鈕,則可構(gòu)造出如下條件表達(dá)式:
Student.專業(yè)NotLike臨床醫(yī)學(xué)(6)在“實(shí)例”文本框輸入值時(shí),必須注意:除非字符串同查詢中的字段名相同,否則不用把字符串用引號(hào)括起來(lái)。
(7)日期必須用花括號(hào)括起來(lái),如:1980年1月12日應(yīng)寫為:{^1980//01/12}(8)邏輯值的前后必須使用句點(diǎn)號(hào),如:.T.。
查找滿足多個(gè)條件的記錄,可以在“篩選”選項(xiàng)卡中添加多個(gè)條件并在“邏輯”列表中選擇他們之間的關(guān)系。默認(rèn)的邏輯關(guān)系(無(wú))自動(dòng)以“與”(AND)的方式組合起來(lái)。查找的記錄滿足兩個(gè)以上條件中的任意一個(gè),則需用“或”(OR)操作符將這些條件組合起來(lái)。3.5查詢的保存將在查詢?cè)O(shè)計(jì)器中設(shè)計(jì)的查詢保存到一個(gè)文件中,將來(lái):可運(yùn)行、修改等;保存查詢的方法“文件”菜單中“保存”命令“文件”菜單中“另存為”命令注意:查詢文件的保存地點(diǎn)3.5查詢的運(yùn)行 查詢的運(yùn)行:實(shí)際上就是數(shù)據(jù)庫(kù)發(fā)出一條查詢請(qǐng)求,并返回查詢后的結(jié)果集??梢暦绞剑哼M(jìn)入查詢?cè)O(shè)計(jì)器窗口,并:“程序”菜單的“運(yùn)行”命令“常用”工具欄中的“運(yùn)行”按鈕命令方式:在命令窗口發(fā)布命令:DO
QueryFileName.QPR &&擴(kuò)展名不能省略注意:必須將在查詢?cè)O(shè)計(jì)器中設(shè)計(jì)的查詢保存在一個(gè)查詢文件中直接在命令窗口發(fā)布等價(jià)的SELECT–SQL命令3.5查詢的修改在查詢?cè)O(shè)計(jì)器中修改查詢調(diào)出“打開”對(duì)話框選擇“文件”菜單的“打開”命令單擊“常用”工具欄中的“打開”按鈕在“打開”對(duì)話框中“文件類型”框中,選擇“查詢”。選擇所需修改的查詢文件(擴(kuò)展名.QPR);單擊“確定”按鈕,進(jìn)入查詢?cè)O(shè)計(jì)器,修改查詢。3.5查詢?cè)O(shè)計(jì)器窗口組成頂部窗格:為查詢指定數(shù)據(jù)源及多數(shù)據(jù)源之間的聯(lián)接條件字段:從數(shù)據(jù)源中,指定能出現(xiàn)在結(jié)果集中的列(可為字段、表達(dá)式(在表達(dá)式中,應(yīng)注意合計(jì)函數(shù):COUNT()、SUM()、AVG()、MAX()、MIN()的使用);篩選:指定記錄出現(xiàn)在結(jié)果集中的條件;排序依據(jù):指定結(jié)果集中的字段或表達(dá)式,排序結(jié)果集;分組依據(jù):指定數(shù)據(jù)源中的字段或表達(dá)式,用于把表中有相同值的記錄合并為一組,形成一條記錄出現(xiàn)在結(jié)果集中;雜項(xiàng):是否允許結(jié)果集中出現(xiàn)重復(fù)記錄;還可限制每批次查詢的記錄數(shù)(全部記錄、最大數(shù)目或百分比);聯(lián)接:指定聯(lián)接表達(dá)式,用它來(lái)匹配多個(gè)表或視圖中的記錄;3.5查詢?cè)O(shè)計(jì)器—“查詢”菜單添加表:顯示“添加表或視圖”對(duì)話框,指定數(shù)據(jù)源。移去表:從設(shè)計(jì)器中移去所選定的表。移去聯(lián)接條件:移去所選中的表聯(lián)接線。輸出字段、聯(lián)接、篩選、排序依據(jù)、分組依據(jù)、雜項(xiàng)查詢?nèi)ハ颍猴@示“查詢?nèi)ハ颉睂?duì)話框,該對(duì)話框允許把查詢結(jié)果發(fā)送到七個(gè)不同的輸出目的地。查看SQL:在只讀的“查詢”窗口中,顯示等價(jià)的創(chuàng)建查詢或視圖的SQL語(yǔ)句。運(yùn)行查詢:執(zhí)行所建立的SQLSELECT語(yǔ)句,并向所選定的輸出目的地發(fā)送結(jié)果??旖萱I:CTRL+Q3.5查詢?cè)O(shè)計(jì)器—快捷菜單右擊窗口,彈出快捷菜單運(yùn)行查詢:執(zhí)行所建立的SQLSELECT語(yǔ)句,并向所選定的輸出目的地發(fā)送結(jié)果??旖萱I:CTRL+Q查看SQL:在只讀的“查詢”窗口中,顯示等價(jià)的創(chuàng)建查詢或視圖的SQL語(yǔ)句。移去表:從設(shè)計(jì)器中移去所選定的表。添加表:顯示“添加表或視圖”對(duì)話框,指定數(shù)據(jù)源。輸出設(shè)置:顯示“查詢?nèi)ハ颉睂?duì)話框,該對(duì)話框允許把查詢結(jié)果發(fā)送到七個(gè)不同的輸出目的地。3.5結(jié)構(gòu)化查詢語(yǔ)言定義:是一種數(shù)據(jù)查詢和編程語(yǔ)言(StructuredQueryLanguage—SQL)。在VFP中,支持結(jié)構(gòu)化查詢語(yǔ)言命令,并以獨(dú)特高效的Rushmoretechnology優(yōu)化技術(shù)優(yōu)化SQL命令的執(zhí)行,且單個(gè)的SQL命令的功能相當(dāng)于多條VFP命令。SELECT-SQL:查詢UPDATE-SQL:修改記錄DELETE-SQL:邏輯刪除記錄INSERT-SQL:追加記錄ALTERTABLE-SQL:修改表結(jié)構(gòu)CREATECURSOR-SQL:創(chuàng)建臨時(shí)表CREATETABLE-SQL:創(chuàng)建表3.5SELECT-SQL命令SELECT[ALL|DISTINCT]
[TOP數(shù)值表達(dá)式[
PERCENT]]
[表別名.]檢索項(xiàng)[AS
列名
][,[表別名.]檢索項(xiàng)[AS列名
]...]
FROM[數(shù)據(jù)庫(kù)名!]表名[WHERE
連接條件[AND
連接條件...]
[AND|OR
條件表達(dá)式[AND|OR
條件表達(dá)式...]]]
[GROUPBY列名[,列名...]]
[HAVING條件表達(dá)式
]
[UNION[ALL]SELECT
語(yǔ)句] [ORDERBY排序項(xiàng)[ASC|DESC][,
排序項(xiàng)[ASC|DESC]]...] [INTOTABLE|DBF
表名
|CURSOR臨時(shí)文件名|ARRAY數(shù)組名]
[
TOFILE
文件名
]3.5SELECT-SQL命令說(shuō)明
—相當(dāng)于“雜項(xiàng)”選項(xiàng)卡SELECT[ALL|DISTINCT]|[TOP
數(shù)值表達(dá)式[PERCENT]]ALL:顯示查詢結(jié)果中的所有行,缺省值。DISTINCT:
禁止在結(jié)果集中出現(xiàn)完全相同的記錄,每個(gè)
SELECT命令只能用一次DISTINCT選項(xiàng)。TOP
數(shù)值表達(dá)式[PERCENT]:指定顯示結(jié)果中的若干行,或顯示查詢結(jié)果行數(shù)的百分比。由數(shù)值表達(dá)式
確定顯示的行數(shù),百分比由PERCENT參數(shù)確定包含TOP子句時(shí)必須有ORDERBY
子句??梢灾付?到32767行,在指定的行數(shù)內(nèi),由ORDERBY子句指定的列如果有相同值,則相同值的那些行也在查詢結(jié)果中。3.5SELECT-SQL命令說(shuō)明
—相當(dāng)于“字段”選項(xiàng)卡[表別名.]檢索項(xiàng)[AS列名
][,[表別名.]檢索項(xiàng)[AS列名
]…]指定查詢結(jié)果的各列,各列的值由檢索項(xiàng)確定,列名由“AS列名”確定。如果有同名的檢索項(xiàng),通過(guò)在各項(xiàng)前加表別名予以區(qū)分,檢索項(xiàng)可以是FROM子句中表的字段名、常量、函數(shù)表達(dá)式。如選擇所有字段,可用“*”代替。FROM[數(shù)據(jù)庫(kù)名!]表名[邏輯別名]:指出包含查詢數(shù)據(jù)的表名的列表。如果查詢數(shù)據(jù)來(lái)自多張表,則表名用逗號(hào)分開,當(dāng)不同數(shù)據(jù)庫(kù)中的表同名時(shí),在表名前加數(shù)據(jù)庫(kù)名,數(shù)據(jù)庫(kù)名與表名之間用“!”分隔。3.5SELECT-SQL命令說(shuō)明
—相當(dāng)于“篩選”選項(xiàng)卡[WHERE
連接條件[AND
連接條件...]
[AND|OR條件表達(dá)式
[AND|OR
條件表達(dá)式…]]]該子句指明查詢條件,如果缺省則將查詢FROM子句指定表中所有記錄。如果由FROM子句指定多表查詢,則要用WHERE子句指定多表之間的連接條件。OperatorComparisonOperatorComparison=Equal>Morethan==Exactlyequal>=MorethanorequaltoLIKESQLLIKE<Lessthan<>!=
#Notequal<=Lessthanorequalto3.5SELECT-SQL命令說(shuō)明
—相當(dāng)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 不銹鋼的基礎(chǔ)知識(shí)王文華
- (2024)柑桔果渣綜合利用建設(shè)項(xiàng)目可行性研究報(bào)告(一)
- 2022-2023學(xué)年天津市河北區(qū)高二(上)期末語(yǔ)文試卷
- 2023年高收縮腈綸項(xiàng)目融資計(jì)劃書
- 烹飪?cè)现R(shí)習(xí)題庫(kù)(含參考答案)
- 《養(yǎng)生與防治》課件
- 養(yǎng)老院老人生活照料標(biāo)準(zhǔn)制度
- 養(yǎng)老院老人健康飲食營(yíng)養(yǎng)師表彰制度
- 人教版教學(xué)課件免疫調(diào)節(jié)(上課)
- 《石油和油品》課件
- 2021年食品安全監(jiān)督抽檢培訓(xùn)完整版PPT課件
- 材料科學(xué)基礎(chǔ)————擴(kuò)散
- 螺絲制作過(guò)程常見(jiàn)不良簡(jiǎn)析
- 激勵(lì)溝通與團(tuán)隊(duì)建設(shè)
- 表面活性劑對(duì)水環(huán)境的影響
- 托輥技術(shù)規(guī)格書
- CRH2型動(dòng)車組一級(jí)檢修作業(yè)辦法081222
- 淺談失業(yè)保險(xiǎn)的擴(kuò)面征繳
- (完整版)西南財(cái)經(jīng)大學(xué)計(jì)量經(jīng)濟(jì)學(xué)期末考試試題
- 研究生英語(yǔ)議論文范文模板
- 酒店建筑BIM實(shí)施方案
評(píng)論
0/150
提交評(píng)論