版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第7章 數(shù)據(jù)庫應(yīng)用基礎(chǔ)VFP,7.1 數(shù)據(jù)庫的基本概念,日常生活工作中,我們每天都要接觸大量的信息,比如學(xué)生 成績、人事檔案、工資表、貨物清單等。那么,它們都可以表示 為數(shù)據(jù)的形式,這么多的數(shù)據(jù),單靠紙、筆、算盤進(jìn)行統(tǒng)計(jì)幾乎 是不可能的,計(jì)算機(jī)的出現(xiàn)解決了這個(gè)復(fù)雜的問題,它將大批量 的數(shù)據(jù)信息存儲(chǔ)在大容量磁盤上,并方便地進(jìn)行管理。那么,這 些數(shù)據(jù)是怎樣存儲(chǔ)的,怎樣被訪問、修改和刪除呢?這就用到了 數(shù)據(jù)庫技術(shù)。數(shù)據(jù)庫技術(shù)將各種各樣的數(shù)據(jù)分門別類地存儲(chǔ)起 來,用戶可以很容易地查看、管理、操作這些數(shù)據(jù)。,數(shù)據(jù)不僅僅是文本,多媒體數(shù)據(jù)庫的發(fā)展可以讓數(shù)據(jù)是圖 片、聲音、視頻等內(nèi)容。 7.1.1 數(shù)據(jù)庫系
2、統(tǒng)的特點(diǎn)、數(shù)據(jù)模型 7.1.1.1 數(shù)據(jù)庫系統(tǒng)的特點(diǎn) a. 數(shù)據(jù)的共享性 b. 數(shù)據(jù)的獨(dú)立性 c. 數(shù)據(jù)的完整性 d. 數(shù)據(jù)的集中性 7.1.1.2 數(shù)據(jù)模型,1、層次數(shù)據(jù)模型,系名 系號 系主任,專業(yè)號專業(yè)名,教師號 姓名 職稱,學(xué)號 姓名 性別 年齡,課程號 課程名 學(xué)分,系教務(wù)管理層次模型,2、網(wǎng)狀數(shù)據(jù)模型,3、關(guān)系數(shù)據(jù)模型 關(guān)系模型中每個(gè)關(guān)系對應(yīng)一張二維表,它由一些行和列組 成。關(guān)系模型中,實(shí)體和實(shí)體之間的聯(lián)系都使用關(guān)系(二維表) 來表示的。關(guān)系模型結(jié)構(gòu)單一、操作方便,容易被用戶接收,且 有堅(jiān)實(shí)的數(shù)學(xué)理論基礎(chǔ),因而得到了廣泛的應(yīng)用,成為目前最流 行的一種數(shù)據(jù)模型。當(dāng)前的一些數(shù)據(jù)庫,從O
3、racle到SQL Server,以及Access和VFP,都毫無例外地采用了關(guān)系模型。,7.1.2 了解數(shù)據(jù)類型1、字符型(C) 由字母(漢字)、數(shù)字、空格等任意字符串組成。每個(gè)字符占1字節(jié),漢字占2字節(jié)。長度0-254。 2、貨幣型(Y) 存儲(chǔ)與貨幣有關(guān)的數(shù)據(jù),如工資、價(jià)格等。 3、日期型(D) 保存不帶時(shí)間的日期,存儲(chǔ)格式為“yyyymmdd”。字段寬度8字節(jié)。 4、日期時(shí)間型(T) 包括年、月、日、時(shí)、分、秒。,5、邏輯型(L) 用于存儲(chǔ)只有兩個(gè)值的數(shù)據(jù),存入的值只有(.T.)和(.F.)兩種狀態(tài),占一個(gè)字節(jié)。如婚否,及格否等。 6、數(shù)值型(N) 用來存儲(chǔ)由數(shù)字、小數(shù)點(diǎn)和正負(fù)號組成的,
4、可以進(jìn)行計(jì)算的數(shù)據(jù),如成績、重量、體積、訂貨數(shù)量等。 7、雙精度型(B) 存儲(chǔ)高精度的試驗(yàn)數(shù)據(jù)。 8、浮點(diǎn)型(F) 9、整型(I) 存放由數(shù)字和正負(fù)號構(gòu)成的整數(shù)型數(shù)據(jù)。其字段寬度為4字節(jié)。使用整型比使用其它類型節(jié)省空間,運(yùn)算速度也快。,10、備注型(M) 占用10個(gè)字節(jié)的空間,單獨(dú)存在于一個(gè)備注文件中,備注文件擴(kuò)展名為.DBT。 7.1.3 掌握VFP中常量與變量的概念1、常量 值不變的數(shù)據(jù)項(xiàng)。 數(shù)值型常量:5、2.345、-100。 字符型常量:“XUV”、“歡迎!”、Hello。 邏輯型常量:.T. 和 .F. 。 日期型常量和日期時(shí)間型常量:2008-11-11、2009-1-12 11
5、:11am 。,2、變量 可以變化,有名字的數(shù)據(jù)。 命名規(guī)則:變量名只能由字母、數(shù)字、下劃線組成。以字母或 下劃線開頭,長度為1128個(gè)字符。不能使用VFP的保留字。每個(gè)漢 字占2字符。 “A_XX” 、“_UU” 、“運(yùn)算結(jié)果”。 “7abc” 、“IF”、 “ELSE” 、“A2”、“2” 、“8開始” 。,7.1.4 掌握VFP表達(dá)式的使用 1、算術(shù)運(yùn)算符 2、字符串運(yùn)算符 3、日期時(shí)間運(yùn)算符 4、關(guān)系運(yùn)算符 5、邏輯運(yùn)算符,求值: 2+3 1+4 .AND. .NOT. 68,算數(shù)運(yùn)算符的優(yōu)先級為( ) 或* *和/ % +和- 。,1、算術(shù)運(yùn)算符,表達(dá)式的書寫規(guī)則: 每個(gè)符號占格,所
6、有符號都必須排在同一橫線上,不能出現(xiàn)上標(biāo)或下標(biāo)。 例如:102寫為102或10*2、3xy寫為3*x*y、2x+5(y+z)寫為2*(x+5*(y+z)、r2寫為pi()*r2。 練習(xí):將下式寫為VFP算術(shù)表達(dá)式。 2、字符串運(yùn)算符,字符串表達(dá)式: “ab123”+”88xy” 結(jié)果為:“ab12388xy”。 “歡迎光臨”“謝謝惠顧!”結(jié)果為:“歡迎光臨謝謝惠顧!”。 “abc “+” 123 “+” xyz “結(jié)果為:”abc 123 xyz “。 “ABC “+”DEF”結(jié)果為:”ABCDEF ”。 3、日期時(shí)間運(yùn)算符 日期之間只能進(jìn)行加減運(yùn)算,有下面3種情況: (1) 日期相減,得到相
7、差的天數(shù)。 (2) 日期加數(shù)值,得到新的日期。 (3) 日期減數(shù)值,得到以前某個(gè)日期。,例如: 2008/11/11 2008/11/1 結(jié)果為數(shù)值10。 2008/11/11 + 5 結(jié)果為日期型數(shù)據(jù): 2008/11/16。 2008/11/11 - 3 結(jié)果為日期型數(shù)據(jù): 2008/11/8。 4、關(guān)系運(yùn)算符,說明:關(guān)系運(yùn)算符兩邊的表達(dá)式只能是數(shù)值型、字符串型、 日期型,不能是邏輯型的表達(dá)式或值 。 字符型數(shù)據(jù)按其ASCII碼值進(jìn)行比較,ASCII碼大的字符所在 的串值大。(ASCII碼用0-127的數(shù)字表示字母和一些符號,其中 空格(的ASCII碼)0129ABZabcz) “=”表示
8、精確匹配。例如,使用條件 UPPER(NAME)=“SMITH”進(jìn)行查找時(shí),可以找到SMITHSON、 SMITHERS、SMITH等串,而如果用“=”,將得到精確匹配 SMITH的串。,5、邏輯運(yùn)算符 .NOT. 非 AND. 與.OR. 或,邏輯運(yùn)算真值表:,運(yùn)算符的優(yōu)先順序:,算術(shù)運(yùn)算符,關(guān)系運(yùn)算符,邏輯運(yùn)算符,優(yōu)先級降低,算數(shù)運(yùn)算符的優(yōu)先級為( ) 或* *和/ % +和- 。關(guān)系運(yùn)算符: 、=、#、$、=。邏輯運(yùn)算符:.NOT. 、.AND. 、.OR. 。,例7-1:寫出VFP表達(dá)式2+3 1+4 .AND. .NOT. 65 .AND. .NOT. 60 .AND. B2-4*a
9、*c=0。,閏年的條件是:年號(year)能被4整除,但不能被100整除;或者能被400整除。 結(jié)果為:(y%4=0 .AND. Y%1000) .OR. (y%400=0) 7.1.5 VFP常用函數(shù) 1、數(shù)學(xué)函數(shù) MAX(表達(dá)式1,表達(dá)式2,) 求各表達(dá)式中的最大值。 MIN( ) 求各表達(dá)式中最小值。 MOD(表達(dá)式1,表達(dá)式2) 求表達(dá)式1除以表達(dá)式2的余數(shù)。 ?BETWEEN(15,10,30) &結(jié)果顯示 .T. score=80 ?IIF(score=90,”優(yōu)”,”合格”) &顯示:合格。 2、字符串函數(shù) LEN(表達(dá)式) 求字符串表達(dá)式長度。 SUBSTR(表達(dá)式 ,n,m
10、) 從字符串表達(dá)式中提取從n開始的m個(gè)字符的字符串,若省略m,則取n開始的所有字符串。,SUBSTR(“11/30/03”,7,2)=“03 LOWER(表達(dá)式) 將字符串表達(dá)式中的大寫字母轉(zhuǎn)化為小寫字母,其余不變。 UPPER(表達(dá)式) 與上相反。 3、日期時(shí)間函數(shù) DATE( ) 取系統(tǒng)當(dāng)前日期。 TIME( ) 取系統(tǒng)當(dāng)前時(shí)間。 DATETIME( ) YEAR(日期表達(dá)式) 取日期表達(dá)式的年份值,返回整數(shù)。 MONTH(日期表達(dá)式) 取日期表達(dá)式的月份值,返回整數(shù)。 DAY(日期表達(dá)式) 取日期表達(dá)式的月份值,返回整數(shù)。 LIST YEAR(出生日期),4、類型轉(zhuǎn)化函數(shù) STR(數(shù)值表
11、達(dá)式) 轉(zhuǎn)換數(shù)值表達(dá)式為數(shù)字字符串。 CTOD(表達(dá)式) 將字符串轉(zhuǎn)化為日期型。 DTOC(表達(dá)式) 將日期型表達(dá)式轉(zhuǎn)化為字符串。 86年出生的表達(dá)式: SUBSTR(DTOC(出生時(shí)間),7,2)=86 等價(jià)于: YEAR(出生時(shí)間)=1986 出生時(shí)間必須為日期型。,1、求3的10次方。 2、求199除以5得的余數(shù)。 3、 1995 + 年+ 8 + 月+ 日 結(jié)果為什么? 4、 聞雞 起舞 + 枕戈 待旦 5、 聞雞 起舞 枕戈 待旦 6、2008/11/11 - 3 結(jié)果為? 7、3#9 結(jié)果為 ?(或、!=) 8、菊$采菊東籬下 結(jié)果為? 9、陶潛=陶 精確匹配,結(jié)果為? 10、(1
12、8).AND.(24),習(xí)題:,11、(18).OR.(24) 12、求 a$bca .AND. (3!=5 .OR. .F.) 的值。 13、ALLTRIM( 123 ) =? 14、STR(表達(dá)式) 的作用? 15、CTOD(表達(dá)式) 的作用? 16、DTOC(表達(dá)式) 的作用? 17、YEAR(CTOD(01/01/08) 的值為什么? 18、MONTH(CTOD(11/01/86) 的值為什么? 19、DATE()、TIME()、DATETIME() 的值為什么?,7.1.6 VFP命令的語法 VFP命令由命令動(dòng)詞(關(guān)鍵字)+短語。 CREATE 數(shù)據(jù)庫文件名。 USE SHARED
13、EXCLUSIVE NOUPDATE 以共享方式打開,以獨(dú)占方式打開,以只讀方式打開。VFP中有些命令要求以獨(dú)占的方式打開才能執(zhí)行,如ALTER TABLE 、INDEX、INSERT、MODIFY STRUCTURE 、PACK等。 對記錄進(jìn)行操作的命令: 命令動(dòng)詞 FIELDS FOR OFF ( 表示可選,表示必選。),顯示表結(jié)構(gòu): LIST | DISPLAY STRUCTURE &多出來的一個(gè)字節(jié)是存放刪除標(biāo)記用的。 BROWSE &打開表的瀏覽窗口。,LIST (列出當(dāng)前表中所有記錄項(xiàng))。 命令: LIST &默認(rèn)范圍為ALL LIST NEXT 3 &只對包含當(dāng)前記錄在內(nèi)的n 個(gè)
14、記錄進(jìn)行操作。 LIST RECORD 5 &只對第5條記錄進(jìn)行操作。 Go 6 &跳轉(zhuǎn)到第6條記錄。 LISTREST &從當(dāng)前記錄一直到文件尾。 范圍子句的說明: 記錄范圍一般有種選擇: ALL: 對數(shù)據(jù)表文件的全部記錄進(jìn)行操作,省略時(shí),默認(rèn)為ALL。 NEXT n: 對包含當(dāng)前記錄在內(nèi)的以下n個(gè)記錄操作。 RECORD n : 只對第n個(gè)記錄操作。 REST :從當(dāng)前位置開始到文件尾。,默認(rèn)的數(shù)據(jù)表記錄范圍:,DELETE & 刪除當(dāng)前記錄行。(不帶FOR語句) DISPLAY & 顯示當(dāng)前記錄。 RECALL & 取消當(dāng)前記錄的刪除標(biāo)記 DELETE FOR 性別 &(刪除所有性別為男
15、的學(xué)生,僅打上刪除標(biāo)記,非物理刪除)。 DISPLAY FOR 入學(xué)成績=480 & 顯示入學(xué)成績大于480的所有記錄。 Go 2 RECALL ALL & 取消當(dāng)前表中所有記錄的刪除標(biāo)記。 FIELDS子句: 后面可以跟字段名和表達(dá)式。 LIST FIELDS 姓名,性別,出生時(shí)間,入學(xué)成績 & 后跟字段名 LIST FIELDS “姓名”+姓名,”性別”,性別,FOR子句: LIST FOR 性別 .AND. 入學(xué)成績=480 LIST FIELDS 姓名,入學(xué)成績 FOR 性別 .AND. 入學(xué)成績=480 LIST FIELDS “姓名”+姓名,”性別”,性別 FOR .NOT. 性別
16、 LIST ALL FIELDS 學(xué)號,入學(xué)成績 FOR 入學(xué)成績=460 .AND. 性別 DISPLAY FOR 出生時(shí)間的作用是:在規(guī)定的中,按檢查全部記錄。即從第1條記錄開始,滿足條件的就執(zhí)行該命令,不滿足條件就跳過去繼續(xù)搜索,直到最后一條記錄。若省略,則默認(rèn)為ALL。,命令書寫規(guī)則: 1)每條命令必須以一個(gè)命令動(dòng)詞開頭。 2).T. .F. 兩個(gè)邏輯值中的小數(shù)點(diǎn)與字母間不能有空格。 3)一個(gè)命令行的最大長度是254個(gè)字符,空格數(shù)也包括在內(nèi)。 4)如果一個(gè)命令太長,一行寫不下,可以使用續(xù)行符“;”。 5)不區(qū)分大小寫。 6)命令動(dòng)詞和子句中的短語可以用其前4個(gè)字符縮寫表示。如DISPL
17、AY STRUCTURE 可簡寫為DISP STRU。 7)不要用A到I之間的單個(gè)字母作為表名,因?yàn)樗鼈円驯槐A糇鲾?shù)據(jù)庫工作區(qū)的名稱。 8)不要用VFP的保留字作文件名、字段名、變量名等。 9)一行只能寫一條命令,每條命令的結(jié)束標(biāo)志是回車鍵。 10)數(shù)據(jù)庫文件后綴為.DBC、表文件名后綴為.DBF、備注文件.FPT。,7.2 VFP數(shù)據(jù)表 7.2.1 數(shù)據(jù)表的基本概念 數(shù)據(jù)表: 一些有組織數(shù)據(jù)的集合,由行、列組成的二維表格。簡稱表 (Table)。一個(gè)數(shù)據(jù)庫包含一個(gè)或多個(gè)二維表,表表示現(xiàn)實(shí)世界的關(guān)系 或?qū)嶓w,各個(gè)數(shù)據(jù)表之間可能存在某種關(guān)系。 字段:數(shù)據(jù)表中的每一列稱為一個(gè)字段,它對應(yīng)表格中的數(shù)
18、據(jù)項(xiàng), 每個(gè)數(shù)據(jù)項(xiàng)的名稱稱為字段名(屬性),如“年齡”、“性別”、“學(xué)號”、“入 學(xué)時(shí)間”等都是字段名。 記錄:表中每一數(shù)據(jù)行成為一條記錄,每條記錄由許多字段組成, 如“2006001、趙小霞、女、1987年6月12日、490、計(jì)算機(jī)、程家吉”。,St.dbf數(shù)據(jù)表,7.2.2 啟動(dòng)VFP 7.2.3 建立數(shù)據(jù)表 可以在VFP中建立兩種表:數(shù)據(jù)表和自由表。數(shù)據(jù)表是數(shù)據(jù)庫的一部分,自由表可以獨(dú)立存在于任何數(shù)據(jù)庫之外。數(shù)據(jù)庫文件后綴為.DBC、表文件名后綴為.DBF、備注文件.FPT。 1) 利用“表設(shè)計(jì)器”創(chuàng)建新表。 2) 追加記錄。 3) 使用命令創(chuàng)建新表 CREATE TABLE ( ()
19、,() ,字符型(C) 由字母(漢字)、數(shù)字、空格等任意字符串組成。每個(gè)字符占1字節(jié),漢字占2字節(jié)。長度0-254。 貨幣型(Y) 存儲(chǔ)與貨幣有關(guān)的數(shù)據(jù),如工資、價(jià)格等。 日期型(D) 保存不帶時(shí)間的日期,存儲(chǔ)格式為“yyyymmdd”。字段寬度8字節(jié)。 日期時(shí)間型(T) 包括年、月、日、時(shí)、分、秒。 邏輯型(L) 用于存儲(chǔ)只有兩個(gè)值的數(shù)據(jù),存入的值只有(.T.)和(.F.)兩種狀態(tài),占1個(gè)字節(jié)。如婚否,及格否等。,數(shù)值型(N) 用來存儲(chǔ)由數(shù)字、小數(shù)點(diǎn)和正負(fù)號組成的,可以進(jìn)行計(jì)算的數(shù)據(jù),如成績、重量、體積、訂貨數(shù)量等。 整型(I) 存放由數(shù)字和正負(fù)號構(gòu)成的整數(shù)型數(shù)據(jù)。其字段寬度為4字節(jié)。使用整
20、型比使用其它類型節(jié)省空間,運(yùn)算速度也快。 備注型(M) 占用10個(gè)字節(jié)的空間,單獨(dú)存在于一個(gè)備注文件中,備注文件擴(kuò)展名為.DBT。 1、創(chuàng)建新表命令 CREATE TABLE St_1(學(xué)號 c(7), 姓名 C(6), 性別 L(1), 出生時(shí)間 d(8),入學(xué)成績 n(6,1), 所在系 c(10), 系負(fù)責(zé)人 c(8) ),2、打開表命令 USE St 3、關(guān)閉表命令 USE 4、添加記錄命令 APPEND 7.2.4 瀏覽數(shù)據(jù)表 USE St (如果當(dāng)前表不在默認(rèn)路徑下,一定要加路徑) BROWSE USE “d:vfpst.dbf” 顯示數(shù)據(jù)還可以使用LIST和DISPLAY命令。命
21、令格式如下: LIST或DISPLAY FIELDS FOR OFF (DISPLAY若沒有FOR語句,則只顯示當(dāng)前行。若不指定FIELDS,則輸出所有字段。加上OFF,則顯示系統(tǒng)加上的記錄號,反之,不顯示。),顯示所有數(shù)據(jù): LIST 或 DISPLAY ALL。 顯示當(dāng)前記錄: DISPLAY 不帶記錄號現(xiàn)實(shí)當(dāng)前記錄: DISP OFF 顯示男同學(xué)的姓名和出生時(shí)間: DISPLAY 姓名,出生時(shí)間 FOR 性別 或 LIST 姓名,出生時(shí)間 FOR 性別,顯示入學(xué)成績在480分以上的女生的學(xué)號、姓名、性別、入學(xué)成績。 LIST OFF “學(xué)號:”+學(xué)號,姓名,性別,入學(xué)成績 FOR .no
22、t. 性別 .and. 入學(xué)成績=480 顯示女同學(xué)的姓名和年齡: DISP 姓名,year(date()-year(出生時(shí)間) FOR 性別 編輯模式:EDIT與CHANGE命令等價(jià)。 例如: 修改當(dāng)前記錄 EDIT 修改第n條記錄 EDIT n 修改包括當(dāng)前記錄在內(nèi)的n條記錄:EDIT NEXT n,列出8月份出生的女同學(xué)的姓名和出生時(shí)間? 列出年齡大于等于20歲的學(xué)生紀(jì)錄,要求不顯示記錄號?,記錄指針的移動(dòng): 絕對定位: GO TOP、GO BOTTOM、GO 。 相對定位: SKIP 。 n0 下移、n0 上移、無n向下移動(dòng)一條記錄,n包含小數(shù),則四舍五入取整。 條件定位:LOCATE
23、 FOR條件范圍 按順序搜索表,直到找到滿足制定條件的第一個(gè)記錄,若無滿 足條件的記錄,指針停在指定范圍的最后一條記錄。(所謂的“范圍”包 括ALL、NEXT n、RECORD n、REST)若要繼續(xù)查找滿足條件的記 錄,用CONTINUE(必須在LOCATE之后出現(xiàn))。,指針的定位: 定位到第1條記錄: GO TOP。 定位到最后一條記錄:GO BOTTOM。 下一個(gè): SKIP。 上一個(gè): SKIP-1。 定位到第n條記錄: GO n 。 當(dāng)前記錄的記錄號可用函數(shù) RECNO( ) 返回。 當(dāng)前表中記錄的總個(gè)數(shù)可用RECCOUNT( ) 函數(shù)返回。,指向文件頭的BOF( )函數(shù)和指向文件尾
24、的EOF( )函數(shù)。 由于大多數(shù)的操作都是針對表記錄的,那么就引入了一個(gè)概念: 當(dāng)前記錄。剛打開一個(gè)表時(shí),指針指向表的第一條記錄。第一條記錄前 還有一個(gè)位置稱為文件頭,在最后一條記錄的后面有一個(gè)位置稱為文件 尾。,記錄指針,文件頭,1,2,n,文件尾,第1條記錄,第2條記錄,第n條記錄,指針指向文件頭時(shí):函數(shù)BOF( )的值為 .T. 。當(dāng)指針指向文件尾 時(shí),文件尾函數(shù)EOF( )值為真。如果打開的是一個(gè)空表,則兩函數(shù)同 時(shí)為 .T. 。,USE st ?BOF(),EOF(),RECNO() &結(jié)果為 .F. .F. 1 SKIP ?BOF(),EOF(),RECNO() &結(jié)果為 .F.
25、.F. 2 GO TOP ?BOF(),EOF(),RECNO() &結(jié)果為 .F. .F. 1 SKIP-1 ?BOF(),EOF(),RECNO() &結(jié)果為 .T. .F. 1 GO BOTTOM SKIP ?BOF(),EOF(),RECNO() &結(jié)果為 .F. .T. 12,7.2.5 編輯表中的數(shù)據(jù) 1、在“瀏覽”模式下修改記錄 2、在“編輯”模式下修改記錄 EDIT 3、使用批替換命令 例:給女同學(xué)的“入學(xué)成績”加10分,將某數(shù)據(jù)表的總分字段設(shè) 置為“語文”和“數(shù)學(xué)”的成績和。 命令如下: REPLACE ALL 入學(xué)成績 WITH 入學(xué)成績+10 FOR 性別 REPLACE
26、 ALL 入學(xué)成績 WITH 語文+數(shù)學(xué),將計(jì)算機(jī)系學(xué)生的成績加10分? 將計(jì)算機(jī)系學(xué)生的系負(fù)責(zé)人改為”丁老師”?,批替換命令REPLACE可對字段內(nèi)容成批自動(dòng)地進(jìn)行修改(替 換),而不必在編輯狀態(tài)下逐條修改。語法格式如下: REPLACE WITH , WITH FOR 說明: 選項(xiàng)只能是ALL、NEXT、RECORD、REST4種。 若不選擇、FOR 子句,默認(rèn)為當(dāng)前記錄。,REPLACE 命令不重新定位記錄指針,因此在執(zhí)行該命令時(shí),必 須先把記錄指針定位到要修改的那個(gè)記錄,如果沒有FOR條件限制,只更改當(dāng)前行。 如果要用REPLACE命令填充一個(gè)新記錄的數(shù)據(jù),那么這個(gè)記 錄應(yīng)先用APPE
27、ND BLANK或INSERT BLANK命令生成一個(gè)空記 錄,再填入數(shù)據(jù)。例如: APPEND BLANK REPLACE 學(xué)號 WITH “2006200”,姓名 WITH “丁一”,性別 WITH .T.,出生時(shí)間 WITH CTOD(“07/19/87”),入學(xué)成績 WITH 505,所在系 WITH “計(jì)算機(jī)”,系負(fù)責(zé)人 WITH “程家吉”,將第2條記錄的名字改為“朱勤”。,例:新表的創(chuàng)建和數(shù)據(jù)的添加: create table ScoreTable(學(xué)號 c(8), 課程號 c(3), 成績 n(6,1) append blank replace 學(xué)號 with 2002001,
28、 課程號 with 003,成績 with 99 append blank replace 學(xué)號 with 2002200, 課程號 with 001,成績 with 80.5 append blank replace 學(xué)號 with 2002020, 課程號 with 002,成績 with 89 list,刪除記錄: 1、在“瀏覽”或“編輯”模式下刪除記錄 標(biāo)記刪除屬于邏輯刪除,不等同于物理刪除,要想真正刪除記錄 (物理刪除),應(yīng)選擇“表”菜單”徹底刪除”。 2、刪除滿足條件的記錄 3、刪除的命令 DELETE FOR &該命令屬于邏輯刪除, 刪除后記錄仍能夠被修改、復(fù)制、顯示等,只是前面
29、多了刪除標(biāo)記“*”。 例:將所有記錄加上刪除標(biāo)記。 DELETE ALL,例:刪除所有入學(xué)成績小于等于470的學(xué)生記錄。 DELETE ALL FOR 入學(xué)成績 FOR RECALL是DELETE的逆操作,作用是取消標(biāo)記,恢復(fù)成正常記錄。,刪除出生時(shí)間在1986年及以前的學(xué)生信息? 刪除中文系的所有學(xué)生? 物理刪除所有男同學(xué)的信息?,物理刪除記錄命令 將數(shù)據(jù)表中所有具有刪除標(biāo)記的記錄正式從表中刪除。 PACK 為物理刪除命令,一旦執(zhí)行,無法恢復(fù)。 物理刪除所有記錄命令 ZAP 命令等價(jià)于DELETE ALL 與 PACK連用,但速度更快,一旦執(zhí)行,無法恢復(fù)。 例如:徹底刪除表中所有記錄。 DE
30、LETE ALL PACK,7.2.6 修改數(shù)據(jù)表結(jié)構(gòu) 使用下面命令打開表設(shè)計(jì)器: MODIFY STRUCTURE 或 MODI STRU 。,7.3 數(shù)據(jù)表的索引、查詢和統(tǒng)計(jì) 通常我們輸入的數(shù)據(jù)是無序的,當(dāng)數(shù)據(jù)量很大,表中有成千上萬條 記錄時(shí),如果不按照某種順序排列,尋找數(shù)據(jù)必須從頭到尾搜索整個(gè)數(shù) 據(jù)表,這樣效率就大大降低了。為了解決這個(gè)問題,可以讓記錄按照某 種順序(如數(shù)字大小或字符順序)來排列,在數(shù)據(jù)庫中該方法稱為索 引 。有了索引,用戶可以快速查到所需的數(shù)據(jù)。 1 、 索引的概念 索引就是根據(jù)某字段值,創(chuàng)建一個(gè)有序的索引文件,并不實(shí)際調(diào)整 數(shù)據(jù)表中每個(gè)記錄的位置,因而記錄在數(shù)據(jù)表中的
31、位置不變,而索引文 件中的項(xiàng)是有序的。索引相當(dāng)于基本表的目錄,如同有一本書,它前面 設(shè)有目錄,目錄包括摘要內(nèi)容和對應(yīng)頁碼,索引則相應(yīng)地含有索引項(xiàng)和 元組地址。,基于學(xué)號的索引,基本表(無序),索引包括兩項(xiàng)內(nèi)容:,索引項(xiàng) 元組地址,無序表和有序表的查詢時(shí)間區(qū)別很大。,在沒有索引的表上進(jìn)行數(shù)據(jù)查詢,顯然,是對無序表的查詢,需要 花費(fèi)相當(dāng)多的時(shí)間,從第一行記錄開始一行一行地進(jìn)行查詢,這種方法 顯然效率很低。那么,如果是對于一個(gè)有序表,在查詢它的某一行記錄 時(shí),就可采用查詢速度快的快速查找方法。 這樣,對于數(shù)據(jù)含量非常大的表,就必須提取一列或若干列,建立 有序索引,才能大大加快數(shù)據(jù)的查詢速度。,1,n
32、,x,折半查找法,有序樹,2、索引的類別 主索引、候選索引、唯一索引、普通索引。 主索引強(qiáng)調(diào)“不允許出現(xiàn)重復(fù)值”,一個(gè)表只能有一個(gè)主索引。 候選索引也要求字段的唯一性,可建立多個(gè)候選索引。 普通索引允許字段中出現(xiàn)重復(fù)值,可建立多個(gè)普通索引。 獨(dú)立索引后綴為 .IDX,復(fù)合索引后綴為 .CDX。 3、建立索引 表設(shè)計(jì)器建立 命令建立 在VFP中,有時(shí)需要臨時(shí)建立一些普通索引或唯一索引,可以用命 令來建立,語法如下:,INDEX ON TO FOR 注意:組合索引(多列)要將非字符串類型的數(shù)據(jù)轉(zhuǎn)化為字符串 數(shù)據(jù),然后按照主關(guān)鍵字在前,次關(guān)鍵字在后的次序用“+”號連接在 一起。 例如:要按語文、數(shù)學(xué)
33、的順序?qū)τ涗浗⒔M合索引,則各關(guān)鍵字 轉(zhuǎn)化為字符后用“+”連接。索引表達(dá)式為:STR(語文,5,1)+STR(數(shù) 學(xué),5,1) 如果用多個(gè)數(shù)值型字段建立一個(gè)索引表達(dá)式,索引則按照表達(dá) 式的值進(jìn)行排序。STR(語文,5,1)+STR(數(shù)學(xué),5,1)與 語文+數(shù)學(xué)這兩個(gè)索 引含義不同,前者建立有主次關(guān)系的組合索引,后者按照兩個(gè)數(shù)值和 的值進(jìn)行排序。,若選用FOR子句,則只有符合條件的記錄才被索引。 這樣,既縮短了索引建立時(shí)間,又提高了FIND或SEEK命令的檢索速 度。索引默認(rèn)按升序排列,執(zhí)行創(chuàng)建命令后,索引就被打開,其記錄指 針指向邏輯首記錄(GO TOP處)。 幾個(gè)創(chuàng)建普通索引的命令: IND
34、EX ON 學(xué)號 TO xh LIST INDEX ON -入學(xué)成績 TO cj LIST INDEX ON 姓名 TO xm LIST,篩選年齡在19歲以上的記錄:(條件為YEAR(DATE( )-YEAR(出 生時(shí)間)19)。 INDEX ON 學(xué)號 to xh for year(date()-year(出生時(shí)間)=22 LIST 4、查詢記錄 使用普通索引、候選索引或主索引,可以進(jìn)行記錄排序,以便提 高顯示、查詢或打印的速度。 字符查找 例:在已經(jīng)建立的索引文件的基礎(chǔ)上,查找姓名為“李才”和學(xué) 號為“2006011”的記錄。,SET ORDER TO xm FIND 李才 DISP SE
35、T ORDER TO xh FIND 2006011 DISP FIND 2006001 DISP 注意:使用SET ORDER命令,可以改變表單中記錄的順序。格式 為:SET ORDER TO (索引名為已存在的索引)。FIND 字符查找命令,查找關(guān)鍵字與所給字符串相匹配的第一個(gè)記錄。若找 到,指針指向該記錄,否則指向文件尾。 FIND | ,表達(dá)式查找: 例:以性別為關(guān)鍵字建立索引,并查找第一個(gè)男生記錄和第一個(gè)女生記錄. INDEX ON 性別 TO xb SET ORDER TO xb LIST SEEK .T. DISP SEEK .F. DISP SEEK 命令查找關(guān)鍵字與所給字符串
36、相匹配的第一個(gè)記錄。若找到,指針指向該記錄,否則指向文件尾,給出信息“沒找到”。語法格式為: SEEK 刪除所有索引:DELETE TAG ALL。 刪除索引:DELETE TAG 索引名。,說明:只能找出符合條件的第一條記錄,該命令可以查找字符、數(shù)值、日期和邏輯型索引關(guān)鍵字。若為字符串,則必須用界限符號括起來(,“”,)。 若是找到了符合條件的首記錄,則函數(shù)FOUND( )的值為 .T. ,否則為 .F. 。 順序查詢 例:在數(shù)據(jù)表中依次查找86年出生的學(xué)生記錄。 USE ST LIST LOCATE FOR SUBSTR(DTOC(出生時(shí)間),7,2)=“86” DISP CONTINUE
37、 DISP CONTINUE DISP,將記錄指針定位在第一條中文系學(xué)生紀(jì)錄上? 將記錄指針定位在第一條成績大于500分的學(xué)生紀(jì)錄上?,LOCATE命令是在不建立索引的條件下,查找當(dāng)前數(shù)據(jù)表中滿足條件的第一條記錄。語法格式為: LOCATE FOR 統(tǒng)計(jì)記錄 建立數(shù)據(jù)表后,常常要對數(shù)據(jù)表中數(shù)值型字段的記錄進(jìn)行統(tǒng)計(jì)。 統(tǒng)計(jì)記錄數(shù)COUNT: 例:分別統(tǒng)計(jì)女生人數(shù)和入學(xué)成績480分的學(xué)生記錄。 USE st LIST COUNT FOR .NOT. 性別 TO n COUNT FOR 入學(xué)成績=480 TO x ? n,x,統(tǒng)計(jì)函數(shù)使用COUNT命令,格式為: COUNT FOR TO 求和SUM
38、: 例:求女生入學(xué)成績之和。 SUM 入學(xué)成績 FOR .NOT. 性別 TO nu 求平均值A(chǔ)VERAGE: 例:求86年出生的學(xué)生的平均入學(xué)成績,以及中文系男學(xué)生的平均入學(xué)成績。 AVERAGE 入學(xué)成績 FOR SUBSTR(DTOC(出生時(shí)間),7,2)=“86” TO pjcj,AVERAGE 入學(xué)成績 FOR SUBSTR(DTOC(出生時(shí)間),7,2)=“86” 另外一種寫法: AVERAGE 入學(xué)成績 FOR YEAR(出生時(shí)間)=1986 LIST YEAR(出生時(shí)間) &返回4位數(shù)整數(shù)。 LIST FOR YEAR(出生時(shí)間)=1987,AVERAGE FOR 所在系“中文
39、”TO pjszx ? “86年出生的學(xué)生的平均入學(xué)成績?yōu)椋骸?str(pjcj) ? “中文系學(xué)生的平均入學(xué)成績?yōu)椋骸?+str(pjszx) AVERAGE命令格式為: AVERAGE FOR TO ,補(bǔ)充內(nèi)容: 索引的降序處理: 如果是數(shù)字,可直接在前面加“-”號。如果是字符串,則格式如下: INDEX ON 出生時(shí)間 TAG sj DESC 求最大值最小值函數(shù)(MAX和MIN函數(shù)的使用)。 CALCULATE SUM(入學(xué)成績),MAX(入學(xué)成績),MIN(入學(xué)成績),AVG(入學(xué)成績) CALCULATE MAX(入學(xué)成績) TO maxcj,復(fù)制數(shù)據(jù)到新文件 命令如下:COPY TO FIELDS FOR COPY TO 學(xué)生2.dbf FIELDS 姓名,補(bǔ)助,出生日期 FOR 專業(yè)=計(jì)算機(jī),對計(jì)算機(jī)專業(yè)的學(xué)生按年齡的降序排列,生產(chǎn)新表table1.dbf,且只包含姓名、性別、出生時(shí)間3字段? 將1986年出生的同學(xué)按分?jǐn)?shù)升序排列,并生成新表table2?,常用的操作命令總結(jié): 子句 4種情況:ALL 操作對象為表中全部數(shù)據(jù)。 NEXT
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 苗木提供協(xié)議書
- 藕種購銷合同范本
- 認(rèn)慫協(xié)議書模板
- 試樣加工協(xié)議書
- 請業(yè)主發(fā)合同范本
- 待崗職業(yè)協(xié)議書
- 戶外寫生協(xié)議書
- 誤傷補(bǔ)償協(xié)議書
- 心理輔導(dǎo)協(xié)議書
- 帳篷借用協(xié)議書
- 2026富滇銀行公司招聘面試題及答案
- 2025年南京鐵道職業(yè)技術(shù)學(xué)院單招職業(yè)傾向性測試題庫附答案
- 2025年網(wǎng)絡(luò)維護(hù)管理人員工作總結(jié)例文(2篇)
- 城銀清算服務(wù)有限責(zé)任公司2026年校園招聘16人備考題庫附答案
- 2025年河南豫能控股股份有限公司及所管企業(yè)第二批社會(huì)招聘18人筆試歷年參考題庫附帶答案詳解
- 2025年《項(xiàng)目管理認(rèn)證考試》知識考試題庫及答案解析
- 安徽消防筆試題及答案
- 書籍借閱營銷方案
- 生態(tài)冷鮮牛肉銷售創(chuàng)業(yè)策劃書范文
- 2025年高級煤礦綜采安裝拆除作業(yè)人員《理論知識》考試真題(含解析)
評論
0/150
提交評論