VFP第四章ppt.ppt_第1頁
VFP第四章ppt.ppt_第2頁
VFP第四章ppt.ppt_第3頁
VFP第四章ppt.ppt_第4頁
VFP第四章ppt.ppt_第5頁
已閱讀5頁,還剩71頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、1,第4章 數(shù)據(jù)庫操作與SQL語言,講述數(shù)據(jù)庫的概念和相關(guān)操作以及SQL結(jié)構(gòu)化查詢語言,2,數(shù)據(jù)庫(DataBase)就是按一定的組織結(jié)構(gòu)存儲在計(jì)算機(jī)內(nèi)可共享使用的相關(guān)數(shù)據(jù)的集合。它以文件的形式組織管理一個或多個數(shù)據(jù)文件,并被多個用戶所共享,它是數(shù)據(jù)庫管理系統(tǒng)的重要組成部分。 在Visual FoxPro中,數(shù)據(jù)庫包含有數(shù)據(jù)庫表、視圖等數(shù)據(jù)實(shí)體,又提供了數(shù)據(jù)字典、各種數(shù)據(jù)保護(hù)和數(shù)據(jù)管理功能,可將數(shù)據(jù)庫看成是個收集表的“容器”。 數(shù)據(jù)庫文件的擴(kuò)展名是.dbc,在建立數(shù)據(jù)庫時,系統(tǒng)還會建立一個擴(kuò)展名是.dct的數(shù)據(jù)庫備注文件和一個擴(kuò)展名是.dcx的數(shù)據(jù)庫索引文件,因此Visual FoxPro數(shù)據(jù)

2、庫包括這3個文件。,4.1.1 數(shù)據(jù)庫建立 數(shù)據(jù)庫的建立有兩種方法:使用“數(shù)據(jù)庫設(shè)計(jì)器”和使用建立數(shù)據(jù)庫的命令 。 1. 用數(shù)據(jù)庫設(shè)計(jì)器建立數(shù)據(jù)庫 菜單“文件” | “新建”,打開“新建”對話框,選定“文件類型”為“數(shù)據(jù)庫”選項(xiàng)按鈕,單擊“新建文件”,打開“創(chuàng)建”對話框,在“數(shù)據(jù)庫名”文本框中輸入所建的數(shù)據(jù)庫名,單擊“保存”按鈕建立數(shù)據(jù)庫,同時打開“數(shù)據(jù)庫設(shè)計(jì)器”窗口 。 利用“數(shù)據(jù)庫設(shè)計(jì)器”提供的工具或菜單,可以方便的建立數(shù)據(jù)庫表或建立視圖,也可以將自由表添加到數(shù)據(jù)庫中,成為數(shù)據(jù)庫表,以及建立數(shù)據(jù)庫表間的永久關(guān)聯(lián)關(guān)系等數(shù)據(jù)庫操作。,3,4.1 數(shù)據(jù)庫基本操作,4,例4-1 利用“數(shù)據(jù)庫設(shè)計(jì)器

3、”,新建數(shù)據(jù)庫rsgzk.dbc,并將表rsb.dbf、gzb.dbf、bmdm.dbf和zz.dbf添加到新數(shù)據(jù)庫中,成為數(shù)據(jù)庫表。 建立數(shù)據(jù)庫:菜單“文件” | “新建”命令,選“文件類型”為“數(shù)據(jù)庫”選項(xiàng)按鈕,單擊“新建文件”,在“數(shù)據(jù)庫名”文本框中輸入rsgzk.dbc,單擊“保存”按鈕,此時建立數(shù)據(jù)庫rsgzk.dbc,同時打開“數(shù)據(jù)庫設(shè)計(jì)器”窗口。 添加數(shù)據(jù)表:在“數(shù)據(jù)庫設(shè)計(jì)器”窗口,單擊“數(shù)據(jù)庫設(shè)計(jì)器”工具中的“添加表”按鈕,在“打開”對話框中選定rsb.dbf,單擊“確定”按鈕,rsb.dbf就添加到了rsgzk數(shù)據(jù)庫中,用同樣的方法添加表gzb.dbf、bmdm.dbf和zz

4、.dbf。,5,2. 用命令方式建立數(shù)據(jù)庫 命令格式: CREATE DATABASE 功能:建立一個數(shù)據(jù)庫同時打開它。 例如建立gzk.dbc的命令如下: CREATE DATABASE gzk,6,3. 數(shù)據(jù)庫表 數(shù)據(jù)庫表:歸屬于某個數(shù)據(jù)庫的表稱為數(shù)據(jù)庫表。 自由表:獨(dú)立存在、不與任何數(shù)據(jù)庫相關(guān)聯(lián)的表稱為自由表。 數(shù)據(jù)庫表與自由表是Visual FoxPro中表的兩種存在狀態(tài),這兩種表是可以相互轉(zhuǎn)化的,需要注意的是當(dāng)數(shù)據(jù)庫表轉(zhuǎn)化成自由表時,其數(shù)據(jù)庫表特有的屬性將會丟失。 數(shù)據(jù)庫表的優(yōu)點(diǎn):可以使用長表名,可以使用長字段名;可以為字段制定標(biāo)題和添加注釋;可以為字段制定默認(rèn)值和輸入掩碼;字段有默

5、認(rèn)的控件類;可以為字段設(shè)定字段級規(guī)則和記錄級規(guī)則;支持插入、更新和刪除事件的觸發(fā)器;支持主關(guān)鍵字,表間永久關(guān)系和參照完整性規(guī)則等。,7,4.1.2 數(shù)據(jù)庫操作命令,1. 打開數(shù)據(jù)庫命令 命令格式: OPEN DATABASE 功能:打開一個數(shù)據(jù)庫。 例如打開數(shù)據(jù)庫gzk.dbc的命令如下: OPEN DATABASE gzk,8,4.1.2 數(shù)據(jù)庫操作命令,2. 關(guān)閉數(shù)據(jù)庫命令 命令格式: CLOSE DATABASE ALL 功能:關(guān)閉當(dāng)前的數(shù)據(jù)庫和它的表。選擇ALL表示關(guān)閉所有打開的數(shù)據(jù)庫和它們的表、所有的自由表以及索引文件,返回1號工作區(qū)。 例如關(guān)閉當(dāng)前數(shù)據(jù)庫gzk.dbc的命令如下:

6、CLOSE DATABASE,9,3. 查看和修改數(shù)據(jù)庫結(jié)構(gòu) 命令格式: MODIFY DATABASE 功能:打開數(shù)據(jù)庫設(shè)計(jì)器,以交互方式查看和修改當(dāng)前數(shù)據(jù)庫。 例如查看和修改數(shù)據(jù)庫gzk.dbc的命令如下: MODIFY DATABASE gzk.dbc,4.1.2 數(shù)據(jù)庫操作命令,10,4. 向數(shù)據(jù)庫中添加表命令 命令格式: ADD TABLE 功能:向當(dāng)前數(shù)據(jù)庫添加一個自由表。 例如向數(shù)據(jù)庫gzk.dbc添加自由表gzb1.dbf(它為gzb.dbf的復(fù)制表)和zz1.dbf(zz.dbf的復(fù)制表)。 OPEN DATABASE gzk ADD TABLE gzb1 ADD TABLE

7、 zz1 MODIFY DATABASE 職稱, 基本工資 FROM rsb 例4-12 查詢bmdm.dbf中的全部字段以及所有記錄,并將結(jié)果輸出在屏幕上。 SELECT * FROM bmdm TO SCREEN 例4-13 查詢表rsb.dbf中基本工資字段的最高值、最低值、平均值,合計(jì)值以及參與統(tǒng)計(jì)的人數(shù)。 SELECT MAX(基本工資) AS 最高, MIN(基本工資) AS 最低, ; AVG(基本工資) AS 平均, SUM(基本工資) AS 合計(jì),; COUNT(*) AS 統(tǒng)計(jì)人數(shù) ; FROM rsb,2020/8/10,46,(2)按條件查詢記錄。 條件表達(dá)式可以使用運(yùn)

8、算符(=, , !=, #, =, , =, , =)、關(guān)系運(yùn)算(BETWEENAND, IN( ), LIKE)和邏輯運(yùn)算符(NOT, AND, OR)。 例4-15 查詢表rsb.dbf中“陳”姓職工的記錄,要求顯示編號,姓名,性別,出生日期和職稱字段。 SELECT 編號, 姓名, 性別, 職稱, 出生日期 FROM rsb; WHERE 姓名 LIKE 陳% 例4-16 查詢表rsb.dbf中基本工資在1500元2000元的職工記錄,要求顯示編號,姓名,職稱和基本工資字段。 SELECT 編號, 姓名, 職稱, 基本工資 FROM rsb ; WHERE 基本工資 BETWEEN 15

9、00 AND 2000 例4-17 從表rsb.dbf和gzb.dbf中查詢職工的編號,姓名,職稱,崗位津貼和獎勵工資。 SELECT rsb.編號, 姓名, 職稱, 崗位津貼, 獎勵 FROM rsb, gzb; WHERE rsb.編號=gzb.編號,2020/8/10,47,(3)查詢結(jié)果分組 分組操作主要用于對每一組中的記錄進(jìn)行記錄個數(shù)統(tǒng)計(jì)COUNT()、數(shù)值求和SUM()、求平均值A(chǔ)VG()、求最大值MAX()和最小值MIN()等。 例4-18 統(tǒng)計(jì)表rsb.dbf中各類職稱的人數(shù),并求出基本工資的最高、最低和平均值。 SELECT 職稱, COUNT(*) AS 人數(shù), MAX(基

10、本工資) AS 最高,; MIN(基本工資) AS 最低, AVG(基本工資) AS 平均; FROM rsb; GROUP BY 職稱 例4-19 按職稱分組統(tǒng)計(jì)表rsb.dbf中基本工資的最高值、最低值和平均值,只顯示基本工資平均值大于1000元統(tǒng)計(jì)結(jié)果。 SELECT 職稱, MAX(基本工資) AS 最高, MIN(基本工資) AS 最低, ; AVG(基本工資) AS 平均; FROM rsb; GROUP BY 職稱 HAVING 平均1000,2020/8/10,48,(4)查詢結(jié)果排序 對查詢結(jié)果按指定的排序項(xiàng)進(jìn)行排序,ASC表示按排序項(xiàng)升序排序記錄,DESC表示按排序項(xiàng)降序排

11、序記錄。系統(tǒng)默認(rèn)為升序。 例4-20 查詢表rsb.dbf中姓名,性別,出生日期和職稱字段內(nèi)容,結(jié)果按出生日期字段的降序排序輸出。 SELECT 姓名, 性別, 出生日期, 職稱 FROM rsb; ORDER BY 出生日期 DESC 例4-21 從表rsb.dbf和gzb.dbf中查詢職工的姓名,性別,職稱,基本工資和保險(xiǎn)內(nèi)容,先按性別字段升序,然后按職稱字段降序,最后按保險(xiǎn)字段的降序排序輸出。 SELECT 姓名, 性別, 職稱, rsb.基本工資, 保險(xiǎn) FROM rsb, gzb; WHERE rsb.編號=gzb.編號; ORDER BY 性別, 職稱 DESC, 保險(xiǎn) DESC,

12、2020/8/10,49,(5)嵌套查詢的使用 一個查詢(子查詢)的結(jié)果嵌套在另一個查詢(父查詢)的條件所形成的查詢稱為嵌套查詢。系統(tǒng)在處理嵌套查詢時,首先查詢出子查詢的結(jié)果,然后將子查詢結(jié)果作為父查詢的查詢條件。 嵌套查詢的語法格式: SELECT WHERE (SELECT WHERE ) 常用子查詢形式有:帶有比較運(yùn)算符號的子查詢、帶IN謂詞的子查詢、帶EXISTS謂詞的子查詢、帶有ANY、ALL或SOME量詞的子查詢。,2020/8/10,50, 帶有比較運(yùn)算符號的子查詢 在嵌套查詢中,當(dāng)子查詢的返回結(jié)果是一個單值時,可以用、=、等比較運(yùn)算符來生成父查詢的查詢條件。 例如查詢獎勵工資大

13、于平均獎勵工資的職工,輸出姓名、職稱和獎勵工資,命令如下: SELECT 姓名, 職稱, 獎勵 FROM rsb,gzb WHERE rsb.編號=gzb.編號 .AND. 獎勵 ; (SELECT AVG(獎勵) FROM gzb) 說明:子查詢的結(jié)果AVG(獎勵)是一個單值,可以使用比較運(yùn)算符號。,2020/8/10,51, 帶IN謂詞的子查詢 在嵌套查詢中,當(dāng)子查詢的返回結(jié)果是一個集合時,常常用IN謂詞來作為父查詢的條件,來判斷條件值是否在子查詢的結(jié)果中。IN謂詞的使用格式是: 父查詢 WHERE 字段 IN(子查詢)。 例4-22 列出部門代碼是“A01”的職工的工資詳細(xì)清單。 分析:

14、由于在gzb.dbf中沒有部門代碼字段,所以無法直接從gzb.dbf查找到。因而首先需要在rsb.dbf中查找“A01”的職工編號,再根據(jù)找到的編號,在gzb.dbf中找出對應(yīng)的記錄。 SELECT * FROM gzb WHERE 編號 IN (SELECT 編號; FROM rsb WHERE 部門代碼=A01),2020/8/10,52, 帶EXISTS謂詞的子查詢 在嵌套查詢中,常用EXISTS或NOT EXISTS來檢查在子查詢中是否有結(jié)果返回。使用EXISTS謂詞,若子查詢結(jié)果為非空,則父查詢的條件返回值為“真”,否則返回值為“假”;使用NOT EXISTS謂詞,則結(jié)果跟EXIST

15、S謂詞正好相反。其使用格式為: 父查詢 WHERE NOT EXISTS (子查詢) 例如查詢計(jì)算機(jī)系的職工的姓名和職稱,命令如下: SELECT 姓名,職稱 FROM rsb WHERE EXISTS ; (SELECT * FROM bmdm WHERE bmdm.代碼=rsb.部門代碼 ; .AND. 部門名稱=計(jì)算機(jī)系) 說明:首先,含EXIST謂詞的查詢總是相關(guān)查詢:即,子查詢必需引用父查詢的字段(如例中的“部門代碼”字段)。這使得存在謂詞的子查詢相當(dāng)慢,因?yàn)閷τ诟覆樵兊拿恳挥涗?子查詢都要執(zhí)行一遍。父查詢中要處理的記錄數(shù)越多,則查詢執(zhí)行時間越長。 其次,EXIST謂詞的子查詢輸出一

16、般使用通配符“*”。這是由于結(jié)果只是真或假,對輸出什么字段無關(guān)緊要,因此可用通配符。,2020/8/10,53, 帶有ALL、ANY或SOME量詞的子查詢 ALL、ANY或SOME是量詞,其中ANY或SOME是相同的,都表示子查詢結(jié)果中某個記錄值,ALL表示子查詢結(jié)果中所有記錄值。其使用格式為: 父查詢 WHERE (子查詢) 例如查詢基本工資大于所有未婚職工基本工資的職工信息,命令如下: SELECT * FROM rsb WHERE 基本工資; ALL(SELECT 基本工資 FROM rsb WHERE 婚否=.F.),2020/8/10,54,(6)查詢結(jié)果輸出 SELECT-SQL命

17、令除了將查詢結(jié)果輸出到屏幕和瀏覽窗口外,還可以將查詢結(jié)果保存為一個表、文本文件和數(shù)組,或輸出到打印機(jī)。 例4-23 查詢所有“講師”的工資情況,結(jié)果按“實(shí)發(fā)工資”降序排列,分別保存到臨時表js、表js1.dbf和文本文件js2.txt。 *將結(jié)果輸出到臨時表 SELECT * FROM gzb WHERE 編號 IN ; (SELECT 編號 FROM rsb WHERE 職稱=講師); ORDER BY 實(shí)發(fā)工資 DESC INTO CURSOR js BROWSE (SELECT 編號 FROM rsb WHERE 職稱=講師); ORDER BY 實(shí)發(fā)工資 DESC INTO TABLE

18、 js1 BROWSE * 將查詢結(jié)果保存到文本文件js2.txt中,命令如下: SELECT * FROM gzb WHERE 編號 IN ; (SELECT 編號 FROM rsb WHERE 職稱=講師); ORDER BY 實(shí)發(fā)工資 DESC TO FILE js2 TYPE js2.txt FROM rsb GROUP BY 職稱 USE zcst BROWSE,2020/8/10,64,例4-28 在數(shù)據(jù)庫rsgzk.dbc中建立一個包含表rsb.dbf和表gzb.dbf的所有字段視圖,視圖取名rsgzst。 代碼如下: OPEN DATABASE rsgzk CREATE SQL

19、 VIEW rsgzst ; AS SELECT * FROM rsb, gzb WHERE rsb.編號=gzb.編號 USE rsgzst BROWSE,2020/8/10,65,4.4.2 界面操作創(chuàng)建視圖,視圖設(shè)計(jì)器類似于查詢設(shè)計(jì)器,只是比查詢設(shè)計(jì)器多出一個“更新條件”選項(xiàng)卡,用于設(shè)置更新的條件,如圖4-36所示。 打開“視圖設(shè)計(jì)器”的方法: 打開相關(guān)的數(shù)據(jù)庫,選擇菜單“文件”“新建”命令,選擇新建“視圖”選項(xiàng)按鈕,單擊“新建文件”按鈕。 使用“項(xiàng)目管理器”和使用命令CREATE SQL VIEW來打開“視圖設(shè)計(jì)器”窗口。,2020/8/10,66,(1) “表”下拉列表框,(2)“重

20、置關(guān)鍵字”按鈕,(3)“全部更新”按鈕,(4)“發(fā)送 SQL 更新”復(fù)選框,(5)“字段名”窗格,關(guān)鍵字段列,可更新字段 列,字段名列,(6)“SQL WHERE 子句包括”區(qū),(7)“使用更新”區(qū),2020/8/10,67,1. “更新條件”選項(xiàng)卡的各項(xiàng)功能 (1)“表”下拉列表框:指定視圖所使用的哪些表可以修改。此列表中所顯示的表都包含了“字段”選項(xiàng)卡“選定字段”列表中的字段。 (2)“重置關(guān)鍵字”按鈕:從每個表中選擇主關(guān)鍵字字段作為視圖的關(guān)鍵字字段,對于“字段名”列表中的每個主關(guān)鍵字字段,在鑰匙符號下面打一個“對號”。關(guān)鍵字字段可用來使視圖中的修改與表中的原始記錄相匹配。 (3)“全部更

21、新”按鈕:選擇除了關(guān)鍵字字段以外的所有字段來進(jìn)行更新,并在“字段名”列表的鉛筆符號下打一個“對號”。 (4)“發(fā)送 SQL 更新”復(fù)選框:指定是否將視圖記錄中的修改傳送給原始表。,2020/8/10,68,(5)“字段名”窗格:顯示所選的、用來輸出(因此也是可更新的)的字段。 關(guān)鍵字段(使用鑰匙符號作標(biāo)記):指定該字段是否為關(guān)鍵字段。 可更新字段(使用鉛筆符號作標(biāo)記):指定該字段是否為可更新字段。 字段名:顯示可標(biāo)志為關(guān)鍵字字段或可更新字段的輸出字段名。 (6)“SQL WHERE 子句包括”區(qū)的選項(xiàng)用來檢查更新沖突,在多用戶環(huán)境下,由系統(tǒng)檢查在用視圖更新前原始表的數(shù)據(jù)是否被別的用戶修改過,如

22、果這些記錄被修改,就不允許更新操作。 “關(guān)鍵字段”選項(xiàng):如果在原始表中有一個關(guān)鍵字字段被改變,設(shè)置 WHERE 子句來檢測沖突,使更新失敗。對于由另一用戶對表中原始記錄的其它字段所做修改,不進(jìn)行比較。 “關(guān)鍵字和可更新字段”選項(xiàng):如果另一用戶修改了原始表中標(biāo)記關(guān)鍵字字段或任何可更新的字段,設(shè)置 WHERE 子句來檢測沖突,使更新失敗。 “關(guān)鍵字和已修改字段”選項(xiàng):如果從視圖首次檢索后,本地改變的任一字段在源表中已被改變時,設(shè)置 WHERE 子句來檢測沖突,使更新失敗。 “關(guān)鍵字段和時間戳”選項(xiàng):如果自原始表記錄的時間戳首次檢索以后,它被修改過,設(shè)置 WHERE 子句來檢測沖突。只有當(dāng)遠(yuǎn)程表有時

23、間戳列時,此選項(xiàng)才有效。,2020/8/10,69,(7)“使用更新”區(qū)的選項(xiàng)用來設(shè)置更新方式。 “SQL DELETE 然后 INSERT”選項(xiàng):指先刪除原始表中的舊記錄,再由視圖中被修改的記錄在原始表末尾創(chuàng)建一個新的記錄。 “SQL UPDATE”選項(xiàng):用視圖字段中的變化來修改原始表記錄的字段。 例4-29 在數(shù)據(jù)庫rsgzk.dbc中利用視圖設(shè)計(jì)器建立一個包含有編號、姓名、職稱、和包含gzb所有字段的視圖,視圖取名st,并要求在gzb中除編號之外所有字段設(shè)置為可更新源表字段。 操作步驟: (1)打開數(shù)據(jù)庫rsgzk.dbc (2)打開“視圖設(shè)計(jì)器”窗口 (3)設(shè)置輸出字段 (4)設(shè)置更新

24、條件,2020/8/10,70,例題中“更新條件”對話框設(shè)置,(5)瀏覽視圖和更新數(shù)據(jù) USE st BROWSE &在瀏覽器中將5號記錄的崗位津貼從25修改為30,2020/8/10,71,2. 設(shè)置視圖字段屬性 視圖雖然是虛擬表,但用戶還是可以像數(shù)據(jù)庫表一樣對視圖中的字段設(shè)置顯示格式、有效性規(guī)則等屬性。 操作方法是:在“視圖設(shè)計(jì)器”的“字段”選項(xiàng)卡中,單擊“屬性”按鈕,出現(xiàn)如下圖所示的“視圖字段屬性”對話框。,2020/8/10,72,3. 創(chuàng)建參數(shù)化視圖 參數(shù)化視圖用來限定視圖的作用范圍,參數(shù)化視圖在視圖的 SQL SELECT 語句中加一條 WHERE 子句,從而僅下載那些符合 WHERE 子句條件的記錄,其中的子句是根據(jù)所提供的參數(shù)值建立的,參數(shù)值可以在運(yùn)行時傳遞,也可通過編程方式傳遞。 創(chuàng)建參數(shù)化視圖的步驟: (1)打開“視圖設(shè)計(jì)器”,然后從“查詢”菜單中選擇“視圖參數(shù)”項(xiàng),設(shè)定參數(shù)名和類型,如設(shè)定參數(shù)名:職稱,類型:字符型。 (2)在“視圖設(shè)計(jì)器”對話框的“篩選”選項(xiàng)卡中設(shè)置篩選條件。如rsb.職稱=?職稱,其中?后“職稱”是在步驟1中設(shè)定的視圖參數(shù)名。,2020/8/10,73,例4-30 將上例4-

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論