8.1 查詢和統計
目的與要求: 通過本次課的學習,掌握數據表查詢和數據統計。 | ||
教學內容與時間安排、教學方法: 教學安排: 查詢 40分鐘 統計 40分鐘 教學方法: CAI、圖形、表格 | ||
教學重點及如何突出重點、難點及如何突破難點: 教學重點: 表查詢、統計 教學難點: 表的查詢 | ||
基本內容 | 教學 | 課堂設計 |
5.3查詢 對建立的數據表,VFP提供了兩種查詢的方法:順序查詢和索引查詢 一、順序查詢(也稱條件定位查詢) 【格式】LOCATE [范圍] [FOR〈條件〉] [WHILE〈條件〉] 【功能】在當前表文件中按照記錄的物理順序,由上到下依次查找在指定范圍內的滿足條件的第一條記錄(因此可以對查找表不建立索引),若找到(即查找成功),則將記錄指針定位到該記錄,可用DISP命令或BROWSE命令進行顯示。此時FOUND()=.T. (查找成功),若FOUND()=.F. (查找不成功) 說明: 1)若省略范圍,系統默認為ALL,此時,若查不到,記錄指針定位于最后一個記錄的后邊(即文件尾),EOF()=.T. ;FOUND()=.F. 2)若指定范圍(除ALL外):查不到時,記錄指針定位到指定范圍的最后一條記錄上EOF()=.F.;FOUND()=.F. 3)若在查找前執(zhí)行了“SET EXACT ON”命令,用LOCATE查找字符串時一定要將字符串寫的和庫中查找的數據一致,即不能模糊查找 4)當找到一條符合條件的記錄時,可用DISPLAY命令進行顯示該記錄 二、繼續(xù)查找命令 【格式】CONTINUE 【功能】繼續(xù)執(zhí)行LOCATE命令的查找,找到后,將記錄指針定位到LOCATE命令中指定條件的下一個記錄 說明: 1)使用該命令前,必須使用一次LOCATE命令,即所謂的LOCATE和CONTINUE匹配使用問題 2)CONTINUE命令可多次使用,直到超出查找范圍或遇到文件尾為止 3)本命令查找是否成功,可用FOUND()函數檢測,.T.——成功;.F.——失敗 本命令查找是否成功,可用eof()函數檢測,.F.——成功;.T.——失敗 【例】在student.dbf表中查找年齡大于18的所有記錄 USE STUDENT LOCATE FOR 年齡>18 DISP 姓名, 年齡 CONTINUE DISP 姓名, 年齡 CONTINUE ?EOF() ?FOUND()
三、索引查詢 索引查詢是在索引文件中進行查詢的一種方法。VFP提供了兩條查詢命令:FIND和SEEK命令。 1. FIND查找命令 【格式】FIND〈常量〉 功能:查找打開索引文件的數據表中,是否有與命令中的〈常量〉相一致的關鍵字值的第一個記錄,找到后,把記錄指針指向該記錄號,便停止查找,如果沒找到“則給出有關沒有找到”的信息,此時,記錄指針指向尾記錄的下面(即記錄總和值+1),函數EOF()=.T.,FOUND()=.F. 【說明】 1) 當庫中有多個索引關鍵字的值與命令中字符串相一致的記錄時,FIND只找相一致的第一個,可使用DISPLAY命令將該記錄顯示出來 2) FIND命令只能查找C型和N型索引關鍵字段的值,不能查找日期型、邏輯型和MEMO型關鍵字的值 3) FIND命令查找字符串(字符常量)時,如果無前導空格時,可以不用限界符(單引號、雙引號或方括號)括起來,如果字符串有前導空格時,應使用限界符(單引號、雙引號或方括號)括起來 如:查找姓名的值: 王海 用 FIND " 王海" 張洋 用 FIND 張洋 4) 查找的字符串可以是關鍵字的全部,也可以是最左邊的一部分字符(稱模糊查詢) 例:FIND 李 5) 查找的常數為N型關鍵字的值時,命令中的數據一定按確切的值寫。如:128.28不能寫成:FIND 128.00 6) FIND可以查找復合索引關鍵字的值,可寫成字符串或字符串表達式的形式,但給出的字符串的寬度一定要與庫中的寬度相一致,否則找不到 【例】打開student1.dbf表文件,按姓名和高考成績建立索引(.idx)其中:姓名字段寬度=8,高考成績寬度=6, 1位小數。 查找姓名為"王琪",高考成績?yōu)?10分的記錄. use student1 INDEX ON 姓名+STR(高考成績,6,1) TO xmcj FIND "王琪 610" 或FIND "王琪 "+" 610" 5) FIND 不能直接查找內存變量的值,對于C型內存變量,要用宏代換函數代換出其值,對N型變量,應將其轉換成C型后,再用宏代換函數代換出其值后查找 【例】FIND 查找示例 USE D:\MYVFP\STUDENT INDEX ON 姓名 TO D:\MYVFP\xm FIND 周慶國 ? found() &&函數返回值為.T.時,表示查找成功. DISP
2.SEEK查找命令 格式: SEEK <表達式> SEEK命令的作用和使用方法與FIND基本一致,但SEEK功能更強,它們的區(qū)別: 1)FIND只能查找C型和N型的索引關鍵字的值;SEEK表達式>可以查找:N、C、L、D型索引關鍵字的值。 2) FIND查找C型索引關鍵字的值時,可用或不用限界符('、"、[ ])括起來或不括起來;SEEK查找字符型索引關鍵字的值時,必須用單引號或雙引號或方括號限界符括起來 3) FIND命令不能直接查找字符型內存變量的值,需使用宏代換函數,對數值型內存變量值需用轉換成字符串后,再用宏代換代換后查找。如:高考成績=570,應高考成績=STR(高考成績,6,1), FIND &高考成績;SEEK可以直接查找內存變量的值,如:SEEK 高考成績 說明: 1)不管是FIND還是SEEK查找,找到后,記錄指針定位到該記錄,可用DISPLAY或BROWSE命令顯示出找到的記錄內容,若數據庫中還有符合條件的記錄,可以用SKIP 命令繼續(xù)定位到符合條件的記錄,再用DISP或BROWSE顯示其內容,若一個也沒找到,記錄指針定位到索引文件尾部 2)SEEK 和FIND查詢后,可使用FOUND()函數檢測查找是否成功 【例】 SEEK查找示例 SET DEFAULT TO D:\MYVFP USE STUDENT1 INDEX XM,GK,XMCJ,RQ SEEK " 秦飛" DISP SET ORDER TO 2 SEEK 610 DISP GK=586.6 SEEK GK &&直接查找數值型內存變量的值,不用&函數 DISP
-----------本節(jié)課結束-----------
5.4 計算與統計命令 計算和統計是數據庫應用的重要內容,VFP具有多項計算統計功能,,如按指定條件統計數據表中記錄的個數,對指定數值字段的全部或部分值求和或求平均計算,以及按要求對其中的某些數據做綜合匯總等。本節(jié)主要介紹VFP提供的“記錄個數的統計、求和求平均值、匯總求和及綜合統計命令的使用。 1. 統計命令 【格式】COUNT [<范圍>] [FOR <條件表達式1>] [WHILE <條件表達式2>][TO <內存變量名表>] 【功能】計算當前表中指定范圍內符合條件的記錄數。 【說明】 FOR <條件表達式1>或WHILE <條件表達式2>項:表示對符合條件的記錄進行統計個數,省略,統計整個表中記錄的個數。 省略范圍和條件短語時,則對表中所有記錄進行統計。 TO <內存變量名表>項:選,表示將統計的結果依次存入變量中。 省略TO <內存變量名表>項,只將統計的結果顯示在屏幕上。 【例】統計STUDENT.DBF表中年齡大于18歲的記錄。 SET DEFAULT TO D:\myvfp USE STUDENT COUNT ALL FOR 年齡>18 &&統計結果顯示在狀態(tài)欄上。 2. 求和及求平均值 【格式】SUM|AVERAGE [<數值表達式表>] [<范圍>][FOR <條件表達式1>] [WHILE <條件表達式2>] [TO <內存變量名表>|ARRAY <數組名>] 【功能】對<數值表達式表>的各個表達式求和(SUM)或者求平均值(AVERAGE)。 【說明】 <范圍>:有四種情況:RECORD<n>,NEXT <N>,REST,ALL <數值表達式表>中各表達式的和或均值可依次存入<內存變量表>或數組中,內存變量的數目要與表達式表的數量相同,其間用逗號分隔。如果省略表達式表,則對當前表的所有數值型字段求和(或求平均值)。 缺省范圍和條件短語,則對所有數值字段進行列向求和或求平均值。 3. 綜合計算 綜合計算,指通過調用函數計算某個字段或某些字段的計數值、累加值、平均值、最大值和最小值等。 【格式】calculate [<表達式表>][<范圍>][FOR <條件表達式1>][WHILE <條件表達式2>][TO <內存變量名表>|ARRAY <數組名>] 【功能】分別計算<表達式表>中各個表達式的值。 【說明】表達式常用的函數分別為別有:計數值函數cnt()、累加值函數sum()、平均值函數avg()、最大值函數max()和最小值函數min()。除cnt()函數外,其余四個函數的括號內都需指定字段名或表達式。 1)〈范圍〉有四種情況:同SUM命令 2)〈條件〉:選對符合條件的記錄的字段組成的表達式作統計計算 3) 范圍和條件都省略時對所有記錄 4)〈表達式〉必選項,由下列函數組成: CNT():無參數,用于計算數據庫中記錄的個數; MAX(〈表達式〉):返回〈表達式〉中的最大值,〈表達式〉的內容可以是數值型、字符型、日期型、邏輯型字段; MIN(〈表達式〉):返回〈表達式〉中的最小值,〈表達式〉可以是數值型、字符型、日期型、邏輯型字段; AVG(〈數值表達式〉):計算數值表達式的平均值 SUM(〈數值表達式〉):計算數值表達式的和值 5) 命令中使用上述函數時,若不選〈條件〉和〈范圍〉項時,則對數據庫中的全部記錄進行操作,否則,對范圍內符合條件的記錄進行操作 6) TO〈內存變量表〉子句:選將各函數求出的表達式的值依次賦值給各個內存變量,省略TO〈內存變量〉統計計算的結果不保存。 【例】要計算表student.dbf的記錄數,統計所有學生的最小年齡和平均年齡。 use student calculate cnt(),min(年齡),avg(年齡) TO JS,ZXNL,PJNL 4. 分類匯總 【格式】TOTAL TO 〈匯總表文件名〉 [范圍] ON〈關鍵字〉[FIELDS〈數值表達式〉] [FOR〈條件〉] [WHILE 〈條件〉] 【功能】對當前表文件中的數值字段進行分類匯總,并產生一個新的匯總表文件(.dbf) 【說明】 1) TO 〈匯總表文件名〉:表示匯總結果的新表文件名 2) ON〈關鍵字〉:表示分類匯總的表文件必須按〈關鍵字〉字段排序或索引(按哪個字段分類,就需按哪個字段排序或索引) 3) 范圍:選表示分類匯總表記錄的范圍 4) FOR〈條件〉:用來指定一個條件,表示只有對符合條件的記錄進行分類匯總 5) WHILE〈條件〉:表示表中的記錄一直被分類匯總,直到WHILE中規(guī)定的條件為假,即執(zhí)行到第一個條件為假的記錄,便停止操作 6) 若條件、范圍子句都不選,則對全部記錄 7) TOTAL匯總時,每遇到一個新〈關鍵字〉的值(即分類的類別)改變,就將具有該值的第一條記錄存入匯總表文件,然后對該值的記錄指定的N型字段匯總,匯總結果填入匯總表中相應字段內,即把具有該關鍵字值的第一個記錄存入〈匯總表〉文件中。 【例】對STUDENT。DBF表按性別字段分類,對高考成績匯總,產生新的匯總表文件為XBGKHZ.DBF, 要求把匯總表保存到D:\MYVFP文件夾中. USE D:\MYVFP\STUDENT INDEX ON 性別 TO D:\MYVFP\XBSY LIST TOTAL ON 性別 TO D:\MYVFP\XBGKHZ FIELDS 高考成績 USE D:\MYVFP\XBGKHZ LIST
-----------本節(jié)課結束-----------
|
講述
|
順序查詢
繼續(xù)查找命令5分鐘
Find查找命令10分鐘
Seek查找命令15分鐘
統計命令
求和及平均值8分鐘
綜合計算
分類匯總
|
上一條:8.2查詢和統計實驗
下一條:7.2排序與索引實驗
CopyRight ? 2016 宣城市信息工程學校 地址:宣城市梅溪路902號 后臺登錄
郵編:242000 電話(傳真):0563-2629508 如有問題,歡迎惠賜 Email:xclmq@163.com