第五章 數(shù)據(jù)庫(kù)操作及查詢(xún)統(tǒng)計(jì)_第1頁(yè)
第五章 數(shù)據(jù)庫(kù)操作及查詢(xún)統(tǒng)計(jì)_第2頁(yè)
第五章 數(shù)據(jù)庫(kù)操作及查詢(xún)統(tǒng)計(jì)_第3頁(yè)
第五章 數(shù)據(jù)庫(kù)操作及查詢(xún)統(tǒng)計(jì)_第4頁(yè)
第五章 數(shù)據(jù)庫(kù)操作及查詢(xún)統(tǒng)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩80頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第五章數(shù)據(jù)庫(kù)操作技術(shù)

15.1數(shù)據(jù)庫(kù)基本操作

5.1.1

結(jié)構(gòu)顯示和表的訪問(wèn)

5.1.2

記錄操作5.2數(shù)據(jù)庫(kù)可視化操作

5.2.1

記錄的瀏覽與編輯修改

5.2.2

備注字段和通用字段的操作5.3排序與索引

5.3.1

排序操作

5.3.2

索引操作5.4查詢(xún)命令

5.4.1

順序查詢(xún)

5.4.2

索引查詢(xún)內(nèi)容目錄25.5多表的操作

5.5.1

工作區(qū)

5.5.2

表的關(guān)聯(lián)

5.5.3

表的聯(lián)接5.6統(tǒng)計(jì)命令

5.6.1計(jì)數(shù)命令

5.6.2求和命令

5.6.3求平均值命令

5.6.4匯總命令5.7表的復(fù)制

5.7.1表的復(fù)制

5.7.2表結(jié)構(gòu)的復(fù)制5.8SELECT-SQL查詢(xún)5.9視圖(*)內(nèi)容目錄3(8)掌握對(duì)表中數(shù)據(jù)的四種統(tǒng)計(jì)命令(SUM、AVERAGE、COUNT、TOTAL)使用方法。

(9)掌握SELECT查詢(xún)語(yǔ)句的引用,能靈活根據(jù)數(shù)據(jù)查詢(xún)要求組合WHERE、HAVING、ORDERBY、GROUPBY等子句并能使用INSERTINTO、DELETEFROM、UPDATESET語(yǔ)句。45.1.1表結(jié)構(gòu)顯示和表的訪問(wèn)1、表結(jié)構(gòu)顯示 格式:LIST|DISPLAYSTRUCTURE[TOPRINT

]

[PROMPT]|TOFILE

<文件名>][NOCONSOLE]說(shuō)明:(1)TOPRINT[PROMPT]:列表結(jié)果輸入打印機(jī),后跟[PROMPT]則顯示打印機(jī)設(shè)置對(duì)話框。(2)TOFILE<文件名>]:列表結(jié)果保存在文件中。(3)[NOCONSOLE]:列表結(jié)果不在屏幕上顯示。

(4)LIST顯示的內(nèi)容是連續(xù)的,而DISPLAY是分屏顯示5.1數(shù)據(jù)庫(kù)基本操作例:顯示XSCJ數(shù)據(jù)庫(kù)STUDENT表的結(jié)構(gòu)。在命令窗口中輸入:

OPENDATABASEe:\vfp6\data\xscj.dbc

USEstudent

LISTSTRUCTURE屏幕上顯示student.dbf的表結(jié)構(gòu):2、數(shù)據(jù)庫(kù)結(jié)構(gòu)顯示 格式:LIST|DISPLAYDATABASE例:顯示XSCJ數(shù)據(jù)庫(kù)的結(jié)構(gòu)。輸入命令:

OPENDATABASEe:\vfp6\data\xscj.dbc

LISTDATABASE3、表的打開(kāi)與關(guān)閉

只有打開(kāi)表后,才能對(duì)表進(jìn)行操作。表關(guān)閉時(shí)數(shù)據(jù)會(huì)自動(dòng)存盤(pán)。命令打開(kāi)或關(guān)閉表打開(kāi)表:USE<表文件名>[EXCLUSIVE|SHARED]

關(guān)閉表:USE

菜單方式打開(kāi)表

(工作區(qū)概念放在本章第5節(jié)介紹)

說(shuō)明:

1)打開(kāi)一個(gè)表,就自動(dòng)關(guān)閉該工作區(qū)原已打開(kāi)的表,一個(gè)工作區(qū)同一時(shí)間只能打開(kāi)一個(gè)表。

2)表剛打開(kāi)時(shí),記錄指針指向第一條記錄。

3)表操作完后應(yīng)及時(shí)關(guān)閉。

4)只有以獨(dú)占方式打開(kāi)才能對(duì)表的結(jié)構(gòu)和記錄內(nèi)容修改?;蛟诖蜷_(kāi)表文件對(duì)話框中選定獨(dú)占復(fù)選框。關(guān)閉表的其它方法:其它命令:命令功能CLEARALL關(guān)閉所有表,釋放內(nèi)存變量及用戶(hù)定義的菜單和窗口(但不釋放系統(tǒng)變量)CLOSEALL關(guān)閉所有數(shù)據(jù)庫(kù)和表CLOSEDATABASE[ALL]關(guān)閉當(dāng)前數(shù)據(jù)庫(kù)及其中的表[自由表]CLOSETABLES[ALL]關(guān)閉當(dāng)前數(shù)據(jù)庫(kù)中的表[自由表],但不關(guān)閉數(shù)據(jù)庫(kù)退出VFP即關(guān)閉表5.1.2記錄操作

表記錄的基本操作有顯示、修改、插入、刪除、替換。1、記錄顯示格式:LIST|DISPLAY

[FIELDS<字段名表>][<范圍>][FOR<邏輯表達(dá)式1>][WHILE<邏輯表達(dá)式2>]

[TOPRINTER[PROMPT]|TOFILE<文件>]功能:連續(xù)顯示記錄說(shuō)明:<范圍>記錄范圍,有NEXT、ALL、REST和RECORD記錄號(hào)子句;

【示例】顯示學(xué)生記錄。USEstudentLIST&&顯示所有的記錄Listfor性別="女"GO3DisplayListfields

學(xué)號(hào),姓名,所在系for

黨員=.t.

&&(或Listfields學(xué)號(hào),姓名,所在系for黨員)Listtott.txtListtoprint2、記錄瀏覽(P74)格式:BROWSE[FIELDS<字段表>][FOR<邏輯表達(dá)式1>][FREEZE<字段>]…【示例】瀏覽學(xué)生記錄。USEstudentbrowse&&瀏覽所有的記錄browsefields

學(xué)號(hào),姓名,所在系freeze

姓名for

黨員=.t.

記錄指針:用來(lái)指示表文件中記錄位置的指針。當(dāng)前記錄:指針當(dāng)前所指向的記錄。3、記錄指針的定位(1)指針的絕對(duì)移動(dòng)命令格式:GO|GOTO[RECORD]<記錄號(hào)>GO|GOTOTOP|BOTTOM示例:USEstudentGO3DISPGOTORECO5DISPGOTOPDISP學(xué)號(hào)姓名

性別98001李泳

男98002劉一幀女98003王小敏女98004張大山男98005張強(qiáng)男98006王達(dá)女98007許志忠男98008劉曉忠男(2)指針的相對(duì)移動(dòng)命令格式:SKIP[+|-][<算術(shù)表達(dá)式>]示例:USEstudent?RECNO(),BOF()

&&1.F.

SKIP–1?RECNO(),BOF()

&&1.T.

SKIP–1

&&到文件頭

GO8?RECNO(),EOF()

&&8.F.

SKIP?RECNO(),EOF()

&&9.T.

SKIP

&&到文件尾4、記錄的插入與追加(1)插入新記錄格式:INSERT[BLANK][BEFORE]

示例:USEstudentSKIP2

INSERTBLANKSKIP

INSERTBLANKBEFORE(2)追加新記錄(*)INSERT-SOL命令格式:INSERTINTO表名[(字段名1[,字段名2,…])]VALUE(表達(dá)式1[,表達(dá)式2,…])功能:在表尾追加一條新記錄,并直接給記錄賦字段值。

(不必事先打開(kāi)表)APPEND命令格式:APPEND[BLANK]功能:在表尾追加一條新記錄。APPENDFROM命令格式:APPENDFROM<文件名>[FIELDS<字段名表>][FOR<邏輯表達(dá)式>][TYPE….]

功能:在當(dāng)前表末尾追加一批記錄,這些記錄來(lái)自于另一文件(表、文本或EXCL文件)。示例2:USEstudentAPPEFROMSTUAPPEFROMSTUtx1

typedelimitedwithblank

APPEFROMSTUxls

xls

LIST5、記錄的刪除與恢復(fù)(1)邏輯刪除命令格式:DELETE[<范圍>][FOR<條件>][WHILE<條件>]功能:對(duì)當(dāng)前表在指定<范圍>內(nèi)符合<條件>的記錄加上刪除標(biāo)記。

(2)物理刪除命令格式:PACK功能:真正刪除帶有刪除標(biāo)記的記錄。示例:USEstudent

DELETEALLFORNOT黨員

PACKLIST

(3)記錄恢復(fù)命令格式:RECALL[<范圍>][FOR<條件>][WHILE<條件>]功能:對(duì)當(dāng)前表在指定<范圍>內(nèi)符合<條件>的記錄去除刪除標(biāo)記。

(4)記錄清除命令格式:ZAP功能:物理刪當(dāng)前表中所有記錄。示例:USESCDELETEALLFOR成績(jī)<=60or成績(jī)>90LISTrecallfor課程號(hào)=“001”LIST6、表數(shù)據(jù)的替換(1)成批修改數(shù)據(jù)格式:REPLACE<字段1>WITH<表達(dá)式1>[ADDITIVE][,<字段2>WITH<表達(dá)式2>[ADDITIVE]…][<范圍>][FOR<條件>]

[WHILE<條件>]說(shuō)明:ADDITIVE用在備注字段,表示將表達(dá)式的值添加到字段的原有內(nèi)容后,而不是替換。示例:USESC.DBFREPLACEALL成績(jī)WITH成績(jī)+10FOR成績(jī)<60LIST(2)單記錄與數(shù)組間的數(shù)據(jù)傳送將記錄傳送到數(shù)組或內(nèi)存格式:SCATTER[FIELDS<字段名表>]TO<數(shù)組名>|MEMVAR說(shuō)明:將當(dāng)前記錄的字段值按<字段名表>順序依次送入數(shù)組中,或依次送入一組內(nèi)存變量。示例:USEstudentSCATTERFIELDS學(xué)號(hào),姓名,性別toA?A(1),A(2),A(3) SCATTERFIELDS學(xué)號(hào),姓名,性別MEMVAR?m.學(xué)號(hào),m.姓名,m.性別將數(shù)組或內(nèi)存變量傳送到記錄格式:GATHERFROM<數(shù)組名>|MEMVAR[FIELDS<字段名表>]說(shuō)明:將數(shù)組或內(nèi)存變量的數(shù)據(jù)依次傳送到當(dāng)前記錄,以替換相應(yīng)字段值。示例:USEstudentGO4SCATTERtoA?A(1),A(2),A(4),A(6) A(6)=“MA” GATHERFROMADISPLAY(3)成批記錄與數(shù)組間的數(shù)據(jù)傳送將表的一批記錄復(fù)制到數(shù)組格式:COPYTOARRY<數(shù)組名>[FIELDS<字段名表>][<范圍>][FOR<條件>][WHILE<條件>]說(shuō)明:將當(dāng)前表選定的數(shù)據(jù)復(fù)制到<數(shù)組名>表數(shù)組中,不復(fù)制備注型字段。

(菜單方式:文件導(dǎo)出)從數(shù)組向表追加記錄格式:APPENDFROMARRY<數(shù)組名>[FIELDS<字段名表>][FOR<條件>]說(shuō)明:將滿足條件的數(shù)組行數(shù)據(jù)按記錄依次追加到當(dāng)前表中。(菜單方式:文件導(dǎo)入)7、邏輯表的設(shè)置(1)過(guò)濾器(記錄篩選,即關(guān)系的選擇運(yùn)算)格式:SETFILTERTO<條件>功能:從當(dāng)前表中過(guò)濾出符合<條件>的記錄,不符合<條件>的記錄被“遮蔽”。示例:USEscSETFILTERTO成績(jī)>80ANDLEFT(學(xué)號(hào),2)=“98”LISTSETFILTERTOLIST(2)字段表(字段篩選,即關(guān)系的投影運(yùn)算)格式:SETFIELDSTO[<字段名表>]|ALLLIKE<通配字段名>|EXCEPT<通配字段名>]功能:設(shè)置后,只能對(duì)當(dāng)前表中指定的字段(列)進(jìn)行操作,其它字段被“遮蔽”,用SETFIELDSOFF解除。示例:USEstudentSETFIELDSTO學(xué)號(hào),姓名,所在系

LISTSETFIELDSOFFLIST(1)兩種記錄顯示方式:編輯和瀏覽

通過(guò)“顯示”菜單來(lái)切換(2)瀏覽窗口的操作

命令打開(kāi)瀏覽窗口:USE<表名>

BROWSE

獨(dú)占方式打開(kāi)表才可對(duì)表數(shù)據(jù)進(jìn)行修改。一窗兩區(qū)顯示記錄的操作方法。

browsereditpartition505.2.1記錄瀏覽與編輯修改 5.2數(shù)據(jù)庫(kù)可視化操作(3)在瀏覽窗口追加與刪除記錄記錄的追加:有“追加方式”和“追加新記錄”兩種菜單選項(xiàng)操作,前者為連續(xù)追加。記錄的刪除:先給記錄打上刪除標(biāo)記再?gòu)拇疟P(pán)上刪除。即先做邏輯刪除,在進(jìn)行物理刪除。(1)通用型字段數(shù)據(jù)錄入 雙擊進(jìn)入錄入窗口,插入圖像、圖形、聲音等對(duì)象(2)通用型字段數(shù)據(jù)的修改

進(jìn)入通用型字段數(shù)據(jù)錄入窗口,雙擊該窗口進(jìn)入對(duì)象文件的編輯環(huán)境修改。

注意對(duì)象的鏈接與嵌入(OLE)兩種方式的區(qū)別。(3)通用型字段數(shù)據(jù)刪除2、通用型字段的操作方法 5.2.2備注字段和通用字段的操作 1、備注字段的操作方法

Ctrl+PgDn或雙擊進(jìn)入,Ctrl+W存盤(pán)退出,Ctrl+Q或Esc放棄退出。

5.3排序與索引(P83)

排序:表中記錄按照某個(gè)字段值的大小順序重新排列。排序后將產(chǎn)生一個(gè)新表,但原文件不變。5.3.1排序操作命令格式:SORTTO<新文件名>ON<字段名1>[/A][/D][/C][,<字段名2>[/A][/D][/C]…][<范圍>][FOR<條件>][WHILE<條件>][FIELDS<字段名表>]示例:對(duì)STUDENT表按所在系排序。

usestudentSORTON

學(xué)號(hào)/dTOtt.dbf&&按學(xué)號(hào)降序排序,并將結(jié)果存入tt.dbf中

USEtt

&&打開(kāi)tt.dbfLIST

&&顯示結(jié)果大小

(要注意區(qū)分索引與排序的差別。)5.3.2索引操作格式1(建立.IDX單索引文件):INDEXON<索引關(guān)鍵字>TO<單索引文件名>[FOR<條件>][UNIQUE][COMPACT][ADDITIVE]示例:USEsc*****按學(xué)號(hào)建普通索引文件XHidx*****INDEXON學(xué)號(hào)TOXHidxLIST*****按課程號(hào)升序建唯一索引文件KHidx*****INDEXON課程號(hào)

TOKHidxUNIQUELIST1、建立索引文件格式2(建立.CDX復(fù)合索引文件):INDEXON<索引關(guān)鍵字>TAG

<標(biāo)記名>[OF<復(fù)合索引文件名>][UNIQUE|CANDIDATE][ASCENDING/DESCENDING][ADDITIVE][FOR<條件>]示例:對(duì)SC.DBF建立各項(xiàng)索引。

USEsc*****按成績(jī)降序建普通索引標(biāo)識(shí)cj*****INDEXON成績(jī)

TAGcjDESCENDINGLIST*****先按課程號(hào)升序再按成績(jī)升序建普通索引標(biāo)識(shí)kccj*****INDEXON課程號(hào)+STR(成績(jī),6,2)

TAGkccjLIST*****先按課程號(hào)升序再按成績(jī)降序建候選索引標(biāo)識(shí)kccj1*****INDEXONVAL(課程號(hào))-成績(jī)/1000TAGkccj1CANDIDATE

2、索引文件的使用

一個(gè)表可以打開(kāi)多個(gè)索引文件,但任何時(shí)候只有一個(gè)索引文件起作用,這當(dāng)前起作用的索引文件就稱(chēng)為主控索引文件;同樣,對(duì)一個(gè)復(fù)合索引文件打開(kāi)的多個(gè)索引標(biāo)識(shí)中,任何時(shí)候都只有主控索引起作用。

結(jié)構(gòu)復(fù)合索引文件隨著表的打開(kāi)而打開(kāi)。單索引文件的打開(kāi)和關(guān)閉(*)

打開(kāi)格式:1、USE<表文件名>INDEX<索引文件表>

2、SETINDEXTO<索引文件表>[ADDITIVE]

關(guān)閉格式(關(guān)閉表就自然關(guān)閉了索引文件):

SETINDEXTO示例:USEscSETINDEXTOXHidx,KHidx&&前者xhidx為主控索引文件

LIST確定復(fù)合索引的主控索引格式:SETORDERTO[<數(shù)值表達(dá)式>|<單索引文件名>]|[TAG]<索引標(biāo)識(shí)>]取消復(fù)合索引的主控索引格式:SETORDERTO

SETORDERTO0刪除索引(刪除文件方式來(lái)刪除單索引文件)刪除索引標(biāo)識(shí)命令格式:

DELETETAGALL|<索引標(biāo)識(shí)1>[,<索引標(biāo)識(shí)2>]…重新索引

主控索引隨著記錄操作自動(dòng)更新,而非主控索引不會(huì),在使用該索引時(shí)需要進(jìn)行重新索引。

格式:REINDEX5.4查詢(xún)命令5.4.1順序查詢(xún)1、LOCATE命令格式:LOCATE[<范圍>]FOR<條件>[WHILE<條件>]功能:順序查找指定條件的記錄,記錄指針并定位在該記錄上。2、CONTINUE命令格式:CONTINUE功能:繼續(xù)先前的LOCATE查詢(xún)【示例】

按指定條件定位記錄。USEstudentLOCATEFOR所在系=”IS”

&&找到第一個(gè)“IS”系學(xué)生記錄continue

&&再找到下一個(gè)“IS”系學(xué)生的記錄

FIND和SEEK是針對(duì)索引關(guān)鍵字進(jìn)行查找,故使用索引查詢(xún)命令前,要求查詢(xún)的文件必須先建立了索引,1、FIND命令格式:FIND<字符表達(dá)式>功能:在索引的表文件中查詢(xún)與字符表達(dá)式匹配的第一個(gè)記錄5.4.2索引查詢(xún)命令(FIND和SEEK)【示例】查找學(xué)號(hào)=“98004”的學(xué)生。USEstudentINDEXON學(xué)號(hào)

TAGsnott="98004"FIND&ttDISPLAY記錄號(hào)學(xué)號(hào)姓名性別出生日期黨員所在系簡(jiǎn)歷照片

498004張大山男11/30/81.T.CSmemogen2、SEEK命令格式:SEEK<表達(dá)式>功能:在主控索引的表中按索引關(guān)鍵字搜索滿足<表達(dá)式>值的第一個(gè)記錄。

【示例】查找學(xué)號(hào)=“98004”的學(xué)生。USEstudentSETORDERTOsnoSEEK“98004”DISPLAY記錄號(hào)學(xué)號(hào)姓名性別出生日期黨員所在系簡(jiǎn)歷照片

498004張大山男11/30/81.T.CSmemogen5.5多表的操作5.5.1工作區(qū)

學(xué)籍管理使用的4個(gè)表學(xué)生情況表(STUDENT.DBF):STUDENT(學(xué)號(hào)c(5),姓名c(8),性別

c(2),出生日期d,黨員l,所在系

c(2),簡(jiǎn)歷m,照片g)課程情況表(COURSE.DBF):course(課程號(hào)c(3),課程名c(10),學(xué)時(shí)數(shù)n(4),學(xué)分n(3,1))

成績(jī)表(SC.DBF):sc(學(xué)號(hào)c(5),課號(hào)c(3),成績(jī)n(6,2))學(xué)生特長(zhǎng)表(SPE.DBF):spe(學(xué)號(hào)c(5),專(zhuān)業(yè)c(10),外語(yǔ)水平

c(4),特長(zhǎng)c(20))1、工作區(qū)號(hào)

VFP提供了32767個(gè)工作區(qū),編號(hào)從1到32767。每個(gè)工作區(qū)只允許打開(kāi)一個(gè)表,在同一工作區(qū)打開(kāi)另一個(gè)表時(shí),以前打開(kāi)的表就會(huì)自動(dòng)關(guān)閉。一個(gè)表如果要在不同工作區(qū)中再次打開(kāi),則須在USE命令中加上“AGAIN”選項(xiàng)。2、別名

前10個(gè)工作區(qū)除使用1~10為編號(hào)外,還默認(rèn)用A~J十個(gè)字母作為工作區(qū)別名。VFP自動(dòng)使用文件名作為默認(rèn)表別名??捎肬SE<文件名>ALIAS<別名>

來(lái)指定表別名。3、工作區(qū)的使用(1)SELECT<工作區(qū)號(hào)>∣<別名>&&指定要打開(kāi)表的工作區(qū)號(hào)

SELECT0

&&選定當(dāng)前尚未使用的最小 號(hào)工作區(qū)

SELECT()

&&返回當(dāng)前工作區(qū)號(hào)

別名.字段名

&&引用其它工作區(qū)中打開(kāi)的 表的字段

(2)

USE<表名>IN<工作區(qū)號(hào)>∣<別名>&&在指定的工作區(qū) 打開(kāi)表,但不改變 當(dāng)前工作區(qū)

【示例】通過(guò)多區(qū)操作從SC.DBF表中學(xué)號(hào)查出其在STUDENT.DBF表中對(duì)應(yīng)的姓名。CLOSEALL&&關(guān)閉所有打開(kāi)的表,當(dāng)前工作區(qū)為1號(hào)工作區(qū)SELECT1USEscGO8&&該記錄的學(xué)號(hào)字段值為98004SELECT0&&選定2號(hào)工作區(qū)為當(dāng)前工作區(qū)USEstudentINDEXON學(xué)號(hào)TAGsnoSEEKsc.學(xué)號(hào)

&&即SEEK“98004”?sc.學(xué)號(hào),姓名,SC.成績(jī)&&98004張大山89.00

SELECTsc&&選定SC.DBF所在工作區(qū)為當(dāng)前工作區(qū)?學(xué)號(hào),STUDENT.姓名,成績(jī)

&&98004張大山89.005.5.2表的關(guān)聯(lián)(*)

1、關(guān)聯(lián)的概念

令不同工作區(qū)的記錄指針建立一種臨時(shí)的聯(lián)動(dòng)關(guān)系,使一個(gè)表的記錄指針移動(dòng)時(shí)另一個(gè)表的記錄指針能隨之移動(dòng)。

2、建立關(guān)聯(lián)步驟

·

(1)、確定建立關(guān)聯(lián)的兩個(gè)表,一為父表,一為子表。

(2)子表用關(guān)聯(lián)的字段表達(dá)式先建立索引。

(3)用關(guān)聯(lián)命令建立關(guān)聯(lián)。命令中指明關(guān)聯(lián)字段表達(dá)式。

(4)如是一多關(guān)系,聲名一多關(guān)系

3、關(guān)聯(lián)命令

1)建立關(guān)聯(lián)

格式:SETRELATIONTO[<表達(dá)式1>INTO<別名1>,…,

<表達(dá)式N>INTO<別名N>][ADDITIVE]

功能:以當(dāng)前表為父表與其它子表建立關(guān)聯(lián)

2)解除關(guān)聯(lián):格式:

SETRELATIONTO

3)說(shuō)明一多關(guān)系:

格式:

SETSKIPTO[<表別名1>[,<表別名2>]…]

功能:用在SETRELATION命令后,說(shuō)明已建關(guān)聯(lián)為一多關(guān)系

4)取消一多關(guān)系:

SETSKIPTO

【示例】利用建立表間關(guān)聯(lián),列出所有學(xué)生的學(xué)號(hào)、姓名、系名、課程號(hào)、成績(jī),試寫(xiě)出命令序列。系表結(jié)構(gòu)為dep(所在系C(2),系名C(12))STUDENT—DEP多一關(guān)系

STUDENT—SC一多關(guān)系CLOSALLSELECT2USEdepINDEXON所在系

TAGxbhADDITIVESELECT3USEscINDEXON學(xué)號(hào)

TAGxhADDITIVESELECT1USEstudentSETRELATIONTO所在系INTOdepSETRELATIONTO學(xué)號(hào)INTOscADDITIVE

SETSKIPTOscBROWSEFIELDSSTUDENT.學(xué)號(hào),STUDENT.姓名,DEP.系名,;SC.課程號(hào),SC.成績(jī)5.5.3表的聯(lián)接

格式:JOINWITH<工作區(qū)別名>|<表別名>TO<新表名>FOR<聯(lián)接條件>[FIELDS<字段名表>NOOPTIMIZE]

功能:按照FOR子句規(guī)定的聯(lián)接條件,將當(dāng)前工作區(qū)中的表與另一個(gè)以<工作區(qū)號(hào)>或<表別名>表示的工作區(qū)中的表進(jìn)行聯(lián)接,從而產(chǎn)生一個(gè)新表?!臼纠繉⒈鞸C和表COURSE聯(lián)接為一個(gè)新表SCB,要求包含學(xué)號(hào),課程名和成績(jī)等3個(gè)字段。CLOSEALLSELECT1USEcourseSELECT2USEscJOINWITHcourseTOscbFIELDS學(xué)號(hào),;course.課程名,成績(jī)FORcourse.課程號(hào)=課程號(hào)USEscbBROWSE5.6統(tǒng)計(jì)命令5.6.1計(jì)數(shù)命令

格式:COUNT[<范圍>][FOR<條件>][WHILE<條件>][TO<內(nèi)存變量>]

功能:計(jì)算指定范圍內(nèi)滿足條件的記錄數(shù)。

VFP提供5種命令來(lái)支持統(tǒng)計(jì)功能。

【示例】

:統(tǒng)計(jì)數(shù)學(xué)成績(jī)不及格人數(shù)

usesc

countfor

成績(jī)<60.and.課程號(hào)=“002”

tors

?

“數(shù)學(xué)成績(jī)不及格人數(shù):”,rs5.6.2求和命令格式:SUM[<數(shù)值表達(dá)式表>][<范圍>][FOR<條件>][WHILE

<條件>][TO<內(nèi)存變量表>|ARRAY<數(shù)組>]

功能:在打開(kāi)的表中,對(duì)<數(shù)值表達(dá)式表>的各個(gè)表達(dá)式分別求和?!臼纠扛鶕?jù)course.dbf求所有課程的總學(xué)分。

usecourse

SUM學(xué)分

toxf

?

“課程總學(xué)分為:”,xf5.6.3求平均值命令格式:AVERAGE[<數(shù)值表達(dá)式表>][<范圍>][FOR<條件

>][WHILE<條件>][TO<內(nèi)存變量表>|ARRAY<數(shù)組>]

功能:在打開(kāi)的表中,對(duì)<數(shù)值表達(dá)式表>中的各個(gè)表達(dá)式分別求平均值?!臼纠扛鶕?jù)sc.dbf求98001號(hào)學(xué)生所有課程的平均成績(jī)。

usesc

AVERAGE成績(jī)

topjcjfor學(xué)號(hào)=“98001”

?

“98001號(hào)學(xué)生的平均成績(jī)?yōu)椋骸?,pjcj5.6.4匯總命令格式:TOTALTO<文件名>ON<關(guān)鍵字>[FIELDS<數(shù)值型字段表>][<范圍>][FOR<條件>][WHILE<條件>]

功能:分別對(duì)<關(guān)鍵字>值相同的記錄的數(shù)值型字段值求和,并將結(jié)果存入一個(gè)新表。一組關(guān)鍵字值相同的記錄在新表中產(chǎn)生一個(gè)記錄;對(duì)于非數(shù)值型字段,只將關(guān)鍵字值相同的第一個(gè)記錄的字段值放入該記錄。說(shuō)明:(1)<關(guān)鍵字>指排序字段或索引關(guān)鍵字,即當(dāng)前表必須是有序的,否則不能匯總。

(2)FIELDS子句的<數(shù)值型字段表>指出要匯總的字段。若缺省,則對(duì)表中所有數(shù)值型字段匯總。

【示例】對(duì)賓館收銀表SY,按樓層對(duì)其數(shù)值字段進(jìn)行匯總。 USESY INDEXON樓層TOSYI SETINDEXTOSYI LISTRecord#樓層房號(hào) 姓名 其它應(yīng)收房費(fèi) 實(shí)際金額1二樓 2010 劉炎 48.00250.00 298.002二樓 2020 周敏 50.00300.00 350.003二樓 2030 郭潔45.00500.00 545.004三樓 3001 郭丹丹80.00650.00 730.005三樓 3008 于馳 50.00450.00 500.006三樓 3007 羅貴先45.00500.00 545.00 TOTALON樓層TONSUMFIELDS其它應(yīng)收,房費(fèi),實(shí)際金額

USENSUM LISTRecord#樓層 房號(hào) 姓名 其它應(yīng)收房費(fèi)實(shí)際金額1 二樓 2010 劉炎 143 1050.00 1193.002 三樓 3001 郭丹丹175 1600.00 1775.005.7表的復(fù)制5.7.1表與表結(jié)構(gòu)的復(fù)制 1、任意類(lèi)型文件的復(fù)制格式:COPYFILE<源文件名>TO<目標(biāo)文件名>示例:COPYTOstudent1.DBFCOPYTOstudent1.FPT2、數(shù)據(jù)表文件的復(fù)制(*)格式:COPYTO<新表文件名>[<范圍>][FIELDS<字段名表>][FOR<邏輯表達(dá)式>][WHILE<邏輯表達(dá)式>][TYPE….]

示例1:USEstudent

COPYTOstudent3fields學(xué)號(hào),姓名FOR所在系=“CS”USEstudent3LIST示例2:USEstudentcopytoSTUtxttypesdfcopytoSTUtxt1typedelimitedwithblankcopytoSTUxlsxlstypeSTUtxt.txttypeSTUtxt1.txt5.7.2表結(jié)構(gòu)的復(fù)制格式:COPYSTRUCTURETO<文件名>[FIELDS<字段名表>]示例1:USEstudent

COPYSTRU

TO

student4fields學(xué)號(hào),姓名,所在系

USEstudent4

LISTSTRU5.8SELECT-SQL查詢(xún)

SELECT-SQL查詢(xún)是從SQL語(yǔ)言移植過(guò)來(lái)的查詢(xún)命令,具有強(qiáng)大的單表與多表查詢(xún)功能。

SQL是一種結(jié)構(gòu)化數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)言,它是一種使用你選擇的標(biāo)準(zhǔn)從數(shù)據(jù)庫(kù)記錄中選擇某些記錄的方法。其發(fā)音為“sequel”或“S-Q-L”。

VFP支持在命令窗口直接使用SELECT-SQL命令,也可通過(guò)“查詢(xún)?cè)O(shè)計(jì)器”窗口來(lái)設(shè)計(jì)查詢(xún)、生成查詢(xún)文件,然后運(yùn)行定制的查詢(xún)。SQL主要幾個(gè)命令動(dòng)詞:SELECT、CREATE、DROP、ALTER、INSERT、UPDATE、DELETECREATTABLE<表名>(<字段名1><字段類(lèi)型>[(<字段寬度>[,<小數(shù)位>])][,<字段名2>…])

ALTERTABLE<表名>ADD|ALTER[COLUMN]<字段名>,<字段類(lèi)型>[(<字段寬度>[,<小數(shù)位>])]

INSERTINTO表名[(字段名1[,字段名2,…])]VALUE(表達(dá)式1[,表達(dá)式2,…])DROPTABLE<表名>

UPDATE<表名>SET<字段名1=表達(dá)式1>[,<字段名2=表達(dá)式2>…]

DELETEFROM<表名>[WHERE<條件表達(dá)式>]5.8.1用SELECT-SQL命令直接查詢(xún)1、SELECT-SQL命令的格式

SELECT[ALL|DISTINCT][<別名>.]<SELECT表達(dá)式>[AS<列名>][,[<別名>.]<SELECT表達(dá)式>[AS<列名>]…]

FROM[FORCE][<數(shù)據(jù)庫(kù)名>!]<表名>[<本地名>][[INNER|LEFT[OUTER]|RIGHT[OUTER]|FULL[OUTER]JOIN<數(shù)據(jù)庫(kù)名>!]<表名>[<本地名>]ON<聯(lián)接條件>…]

[[INTO<目標(biāo)>]|[TOFILE<文件名>[ADDITIVE]]|[TOPRINTER][PROMPT]|[TOSCREEN]]

[PREFERENCE<名字>][NOCONSOLE][PLAIN][NOWAIT]

[WHERE<聯(lián)接條件>[AND<聯(lián)接條件>…][AND|OR<篩選條件>[AND|OR<篩選條件>…]]]

[GROUPBY<組表達(dá)>[,<組表達(dá)>…]][HAVING<篩選條件>]

[UNION[ALL]<SELECT命令>]

[ORDERBY<關(guān)鍵字表達(dá)式>[ASC|DESC][,<關(guān)鍵字表達(dá)式>[ASC|DESC]…]]

[TOP<數(shù)值表達(dá)式>[PERCENT]]SELECT說(shuō)明要查詢(xún)的語(yǔ)句FROM說(shuō)明要查詢(xún)的數(shù)據(jù)來(lái)自哪個(gè)(些)表WHERE說(shuō)明查詢(xún)條件GROUPBY對(duì)查詢(xún)結(jié)果進(jìn)行分組,用于分組匯總HAVING須跟GROUPBY使用,限定分組的條件ORDERBY

對(duì)查詢(xún)結(jié)果進(jìn)行排序SELECT-SQL命令的JOIN子句:內(nèi)部聯(lián)接INNERJOIN

左聯(lián)接LEFTOUTERJOIN外部聯(lián)接:右聯(lián)接RIGHTOUTERJOIN

完全聯(lián)接FULLOUTERJOIN2、SELECT-SQL命令查詢(xún)示例

(1)單表查詢(xún)示例

【示例-1】顯示student.dbf表中所有學(xué)生的學(xué)號(hào)、姓名、性別(從一個(gè)表中選取三個(gè)字段)。

SELECT學(xué)號(hào),姓名,性別FROMstudent【示例-2】顯示student.dbf表中所有“CS”系學(xué)生的學(xué)號(hào)、姓名、性別、所在系,其中以“系”作為列標(biāo)題替代“所在系”。

SELECT學(xué)號(hào),姓名,性別,所在系as

系FROMstudent;

where

所在系=“CS”【示例-3】對(duì)sc.dbf先按課號(hào)升序再按成績(jī)降序排序,并將結(jié)果存入新表sc1.dbf。

SELECT學(xué)號(hào),課程號(hào),成績(jī)FROMsc;

ORDERBY

課程號(hào),成績(jī)

DESC;

INTOTABLEsc1【示例-4】顯示sc.dbf中各課程平均成績(jī)(按課程分組,對(duì)成績(jī)求平均)。

select

課程號(hào),avg(成績(jī))as

平均成績(jī);

fromscgroupby

課程號(hào)【示例-5】找出學(xué)生考試成績(jī)之和大于200分的學(xué)生,并將結(jié)果存入數(shù)組SZSC。執(zhí)行程序(2)多表查詢(xún)示例(聯(lián)接查詢(xún))【示例-6】?jī)H查詢(xún)學(xué)號(hào)為98002的學(xué)生的成績(jī),同時(shí)顯示其學(xué)號(hào)、姓名、課程號(hào)和成績(jī)。解一:SELECTstudent.學(xué)號(hào),student.姓名,sc.課程號(hào),sc.成績(jī);FROMscINNERJOINstudentONstudent.學(xué)號(hào)=sc.學(xué)號(hào);

WHEREstudent.學(xué)號(hào)="98002"解二:SELECTstudent.學(xué)號(hào),student.姓名,sc.課程號(hào),sc.成績(jī)

FROM

student,sc;

WHEREstudent.學(xué)號(hào)=sc.學(xué)號(hào)ANDstudent.學(xué)號(hào)="98002"

【示例-7】試統(tǒng)計(jì)學(xué)生修讀課程門(mén)數(shù),要求:(1)student.學(xué)號(hào)后三位小于006;(2)顯示姓名與修讀門(mén)數(shù);(3)顯示結(jié)果按修讀門(mén)數(shù)降序排列。解一:

SELECTstudent.姓名,COUNT(SC.學(xué)號(hào))AS修讀門(mén)數(shù);

FROMstudentINNERJOINscONstudent.學(xué)號(hào)=sc.學(xué)號(hào);

WHEREright(student.學(xué)號(hào),3)<“006”;

GROUPBYSC.學(xué)號(hào);

ORDERBY2DESCENDING解二:SELECTa.姓名,COUNT(b.學(xué)號(hào))AS修讀門(mén)數(shù);

FROMstudenta,scb;

WHEREa.學(xué)號(hào)=b.學(xué)號(hào)andright(a.學(xué)號(hào),3)<"006";

GROUPBYb.學(xué)號(hào);

ORDERBY

2

DESCENDING

【示例-8】查詢(xún)不及格的學(xué)生的成績(jī),同時(shí)顯示其學(xué)號(hào)、姓名、課程名和成績(jī)。注意:本查詢(xún)涉及student,course和sc三個(gè)表SELECTa.學(xué)號(hào),a.姓名,b.課程名,c.成績(jī);FROMstudenta,courseb,scc;WHEREa.學(xué)號(hào)=c.學(xué)號(hào)ANDc.課程號(hào)=b.課程號(hào)ANDc.成績(jī)<605.8.2用查詢(xún)?cè)O(shè)計(jì)器建立查詢(xún)

可生成一條SELECT-SQL語(yǔ)句,并保存在查詢(xún)文件(.QPR)中。1、查詢(xún)?cè)O(shè)計(jì)器

(1)上部窗格:顯示已打開(kāi)的表。

(2)下部窗格

①字段選項(xiàng)卡

②聯(lián)接選項(xiàng)卡:

③篩選選項(xiàng)卡④排序依據(jù)選項(xiàng)卡⑤分組依據(jù)選項(xiàng)卡⑥雜項(xiàng)選項(xiàng)卡2、查詢(xún)?cè)O(shè)計(jì)器的操作

打開(kāi)查詢(xún)?cè)O(shè)計(jì)器、設(shè)置查詢(xún)、執(zhí)行查詢(xún)、保存查詢(xún)

【例3-23】試用查詢(xún)?cè)O(shè)計(jì)器來(lái)查詢(xún)學(xué)號(hào)為98002的學(xué)生的成績(jī),同時(shí)顯示其學(xué)號(hào)、姓名、課程號(hào)和成績(jī)。

查詢(xún)文件的命令方式打開(kāi):MODIFYQUERY

<查詢(xún)文件名>【示例】試通過(guò)查詢(xún)?cè)O(shè)計(jì)器來(lái)查詢(xún)學(xué)號(hào)為98008的學(xué)生的成績(jī),顯示其學(xué)號(hào)、姓名、課程號(hào)、課程名和成績(jī),并按課程號(hào)降序排列。3、查詢(xún)菜單的幾個(gè)命令

(1)查看SQ

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論