




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第4章 查詢與視圖在軟件開發(fā)中經(jīng)常用到數(shù)據(jù)的查詢,如學(xué)生成績管理,人事檔案,圖書檢索等軟件,查詢的準(zhǔn)確、速度直接影響軟件的質(zhì)量、效率、應(yīng)用及維護(hù),VFP開發(fā)工具用三個途徑解決查詢問題。第一個途徑就是運(yùn)用SQL語句查詢,第二個途徑就是用查詢設(shè)計(jì)器建立快速查詢,第三個途徑是用視圖設(shè)計(jì)器建立視圖,實(shí)現(xiàn)快速查詢。4.1 查詢的一般概念4.1.1 查詢VFP中的查詢使用查詢設(shè)計(jì)器,從數(shù)據(jù)庫表或自由表中獲取有用數(shù)據(jù),經(jīng)過對查詢條件、查詢要求的設(shè)置,形成一個*.QPR文件,通過DO命令來執(zhí)行。4.1.2 視圖VFP中的視圖是用視圖設(shè)計(jì)器從數(shù)據(jù)庫表中獲取有用數(shù)據(jù),與查詢一樣經(jīng)過查詢條件、查詢要求的設(shè)置形成視圖
2、。視圖是以視圖名的形式存在數(shù)據(jù)庫中。視圖中數(shù)據(jù)的更新可以使源表相應(yīng)數(shù)據(jù)更新。視圖的執(zhí)行要在數(shù)據(jù)庫中執(zhí)行。4.1.3 SQL查詢SQL是關(guān)系數(shù)據(jù)庫的國際標(biāo)準(zhǔn)語言。為此,世界上許多語言開發(fā)商都將SQL語言作為數(shù)據(jù)庫對數(shù)據(jù)存取的共同標(biāo)準(zhǔn)接口。有的已將SQL語言嵌入到語言開發(fā)工具中,使得人們在軟件開發(fā)時運(yùn)用數(shù)據(jù)庫是極為方便。之所以SQL能成為國際標(biāo)準(zhǔn)語言,主要原因它是結(jié)構(gòu)化的查詢語言。它的綜合統(tǒng)一體現(xiàn)在它集數(shù)據(jù)定義語言、數(shù)據(jù)操縱語言、數(shù)據(jù)控制語言的功能為一體。再就是它高度的非過程化,無需一步步地告訴計(jì)算機(jī)如何做,只要指名怎么做系統(tǒng)就可以自動完成。SQL語言簡單便于掌握,特別是在查詢復(fù)雜可視化工具無法解
3、決時,SQL可以解決。4.2 SQL語句4.2.1 SELECT查詢語句1基本語句格式:SELECT <行列限制表達(dá)式> INTO DBF | TABLE<新表名> FROM <表名列表> WHERE <條件>功能:從表名列表的表中查找符合條件的,按<行列限制表達(dá)式>的形式顯示。若選INTO DBF | TABLE<新表名>子句,查詢結(jié)果存入新表。說明:<行列限制表達(dá)式>格式:ALL | DISTINCT TOP <數(shù)值表達(dá)式> PERCENT 別名. 列名 AS 欄目名, 別名. 列名 AS 欄目
4、名(1)ALL | DISTINCT子句:ALL輸出結(jié)果有重復(fù)記錄,是子句默認(rèn)值。DISTINCT輸出結(jié)果無重復(fù)記錄。(2)TOP <數(shù)值表達(dá)式> PERCENT子句:此子句TOP <數(shù)值表達(dá)式>是符合條件的內(nèi)容中取前<數(shù)值表達(dá)式>個記錄。PERCENT是取前面分之<數(shù)值表達(dá)式>個記錄。(3)別名. 列名 AS 欄目名 , 別名. 列名 AS 欄目名子句:列名可以是字段、含字段的表達(dá)式或表達(dá)式。指定輸出結(jié)果中的字段,此子句也可用*代替此時顯示表中所有字段。例4.1 SELECT 基本語句應(yīng)用USE 學(xué)生1SELECT * FROM 學(xué)生1OPEN
5、 DATABASE 學(xué)生 &&打開學(xué)生數(shù)據(jù)庫SELECT * FROM 學(xué)生 INTO TABLE 學(xué)生y &&顯示學(xué)生表中所有內(nèi)容SELECT 姓名,入學(xué)成績 FROM 學(xué)生 WHERE 入學(xué)成績>=500SELECT DISTINCT 姓名,入學(xué)成績 FROM 學(xué)生 WHERE 入學(xué)成績>=500SELECT 學(xué)生.學(xué)號,學(xué)生.姓名,學(xué)生成績.數(shù)學(xué) FROM 學(xué)生,學(xué)生成績 WHERE 學(xué)生.性別=女' AND 學(xué)生成績.數(shù)學(xué)>=60 AND 學(xué)生.學(xué)號=學(xué)生成績.學(xué)號SELECT TOP 2 * FROM 學(xué)生 ORDER BY
6、學(xué)號CLOSE DATABASE ALL2SELECT中常用的系統(tǒng)函數(shù)在實(shí)際應(yīng)用中經(jīng)常在查詢結(jié)果進(jìn)行統(tǒng)計(jì)、求平均值、匯總等基本要求。SQL提供了一些常用的系統(tǒng)函數(shù)。如表4.1所示。表4.1 常用系統(tǒng)函數(shù)函數(shù)說明AVG(<SELECT 表達(dá)式>)求<SELECT 表達(dá)式>的平均值COUNT(<SELECT 表達(dá)式>)統(tǒng)計(jì)記錄個數(shù)MIN(<SELECT 表達(dá)式>)求<SELECT 表達(dá)式>的最小值MAX(<SELECT 表達(dá)式>)求<SELECT 表達(dá)式>的最大值SUM(<SELECT 表達(dá)式>)求&l
7、t;SELECT 表達(dá)式>的和<SELECT 表達(dá)式>:為DISTINCT|ALL 表達(dá)式。說明:DISTINCT在計(jì)算時去掉重復(fù)值,ALL在計(jì)算所有值是默認(rèn)值,表達(dá)式可為*、字段名、數(shù)學(xué)函數(shù)、常量、函數(shù)或表達(dá)式。3SELECT分組子句格式:GROUP BY <表達(dá)式1>, <表達(dá)式2>, HAVING <篩選條件>功能:對查詢結(jié)果進(jìn)行分組。HAVING <篩選條件>為指定分組必須滿足的條件。例4.2 分組查詢應(yīng)用。OPEN DATABASE 學(xué)生SELECT AVG(入學(xué)成績) FROM 學(xué)生SELECT COUNT(*) F
8、ROM 學(xué)生SELECT SUM(入學(xué)成績) FROM 學(xué)生 GROUP BY 性別SELECT COUNT(*) AS '學(xué)生人數(shù)' FROM 學(xué)生 GROUP BY 性別 HAVING (入學(xué)成績)>460SELECT 學(xué)生.學(xué)號,AVG(學(xué)生.入學(xué)成績),學(xué)生成績.VFP FROM 學(xué)生,學(xué)生成績 GROUP BY 性別 HAVING (入學(xué)成績)>=500 WHERE 學(xué)生.學(xué)號=學(xué)生成績.學(xué)號4排序子句格式:ORDER BY <關(guān)鍵字表達(dá)式> ASC | DESC , <關(guān)鍵字表達(dá)式> ASC | DESC功能:查詢結(jié)果按關(guān)鍵字排序
9、,ASC升序?yàn)槟J(rèn)值,DESC為降序。例4.3 查詢排序應(yīng)用OPEN DATABASE 學(xué)生SELECT 學(xué)號,姓名,入學(xué)成績 FROM 學(xué)生 ORDER BY 入學(xué)成績 DESCSELECT 學(xué)生.學(xué)號,學(xué)生.姓名,學(xué)生成績.英語 FROM 學(xué)生,學(xué)生成績 WHERE 學(xué)生.學(xué)號=學(xué)生成績.學(xué)號 GROUP BY 學(xué)生.學(xué)號 ORDER BY 學(xué)生成績.英語SELECT AVG(入學(xué)成績) AS "入學(xué)成績平均分" FROM 學(xué)生 GROUP BY 性別 ORDER BY 入學(xué)成績 DESCCLOSE DATABASE ALL5嵌套查詢嵌套查詢就是在SELECT語句中套有
10、SELECT語句,被套在內(nèi)的SELECT子句通常稱為子查詢。(1)IN等謂詞及比較運(yùn)算符結(jié)合使用。例4.4 IN與NOT IN在嵌套查詢中的應(yīng)用OPEN DATABASE 學(xué)生SELECT * FROM 學(xué)生 WHERE 學(xué)號 IN(SELECT 學(xué)號 FROM 學(xué)生成績 WHERE 英語>=90)SELECT * FROM 學(xué)生 WHERE 學(xué)號 NOT IN(SELECT 學(xué)號 FROM 學(xué)生成績 WHERE 英語<90)CLOSE DATABASE ALL例4.5 比較運(yùn)算符在嵌套查詢中的應(yīng)用。OPEN DATABASE 學(xué)生SELECT * FROM 學(xué)生 a1 WHERE
11、 入學(xué)成績=(SELECT 入學(xué)成績 FROM 學(xué)生a2 WHERE a1.學(xué)號=a2.學(xué)號 AND 入學(xué)成績>=500)CLOSE DATABASE ALL(2)使用量詞和謂詞的嵌套查詢格式:<表達(dá)式> <比較表達(dá)式> ANY | ALL | SOME (子查詢) NOT EXIST(子查詢)說明:ANY、ALL、SOME為量詞,ANY與SOME是同義詞,在查詢時,只要子查詢中有一行能使結(jié)果為.T.,則結(jié)果就為.T.。ALL要求子查詢中所有行結(jié)果為.T.時,結(jié)果才能為.T.。EXIST或NOT EXIST是檢查在子查詢中是否有結(jié)果返回。EXIST為有結(jié)果返回為真
12、否則為假。NOT EXIST 剛好與EXIST 相反。例4.6 查詢數(shù)學(xué)成績高于90分的學(xué)生的學(xué)號,姓名。OPEN DATABASE 學(xué)生SELECT 學(xué)號,姓名 FROM 學(xué)生 WHERE EXIST(SELECT * FROM 學(xué)生成績 WHERE 學(xué)號=學(xué)生.學(xué)號 AND 數(shù)學(xué)>=90)例4.7 查找所有入學(xué)成績大于等于500分年齡都小的學(xué)生。OPEN DATABASE 學(xué)生SELECT * FROM 學(xué)生 WHERE 出生>ALL (SELECT 出生 FROM 學(xué)生 WHERE 入學(xué)成績<500)CLOSE DATABASE ALL6幾個特殊運(yùn)算符(1)BETWEE
13、N AND運(yùn)算符格式:BETWEEN <表達(dá)式1> AND <表達(dá)式2>說明:表示在的范圍。例4.8 查詢?nèi)雽W(xué)成績480-600分的學(xué)生情況,與不在500-600之間的學(xué)生。OPEN DATABASE 學(xué)生SELECT * FROM 學(xué)生 WHERE 入學(xué)成績 BETWEEN 490 AND 600SELECT * FROM 學(xué)生 WHERE 入學(xué)成績 NOT BETWEEN 500 AND 600CLOSE DATABASE ALL(2)LIKE 運(yùn)算符說明:LIKE 后含有%或_通配符的字符型表達(dá)式。%表示0個或多個字符,_表示一個字符。例4.9 查詢姓王的所有學(xué)生
14、情況,查詢姓名前兩個字為王麗的學(xué)生情況。OPEN DATABASE 學(xué)生SELECT * FROM 學(xué)生 WHERE 姓名 LIKE "王%"SELECT * FROM 學(xué)生 WHERE 姓名 LIKE "王麗_"CLOSE DATABASE ALL7連接查詢格式:<表名1> INNER | LEFT OUTER | RIGHT OUTER | FULL OUTER JOIN ON <連接條件> <表名2>說明:(1)INNER為內(nèi)聯(lián)接。內(nèi)連接是指按連接條件合并兩個表,只要滿足條件的記錄出現(xiàn)在結(jié)果中,內(nèi)聯(lián)接可以省略IN
15、NER。例4.10 查找學(xué)生專業(yè)庫中,學(xué)生情況及選修課成績情況OPEN DATABASE 學(xué)生專業(yè)SELECT * FROM 學(xué)生專業(yè) INNER JOIN 選修 ON 學(xué)生專業(yè).學(xué)號=選修.學(xué)號CLOSE DATABASE ALL(2)LEFT JOIN為左連接,在滿足連接條件的記錄出現(xiàn)在結(jié)果中基礎(chǔ)上,第一個表不滿足條件的記錄也出現(xiàn)在結(jié)果中。若加OUTER只是除了同以上連接為外連接,OUTER表示強(qiáng)調(diào),OUTER通常省略。例4.11用左聯(lián)接查找學(xué)生情況與選修課情況。OPEN DATABASE 學(xué)生專業(yè)SELECT * FROM 學(xué)生專業(yè) LEFT JOIN 選修 ON 學(xué)生專業(yè).學(xué)號=選修.
16、學(xué)號CLOSE DATABASE ALL(3)RIGHT JOIN為右連接,在滿足連接條件的記錄出現(xiàn)在結(jié)果中基礎(chǔ)上,第二個表不滿足條件的記錄也出現(xiàn)在結(jié)果中。例4.12 用右連接查找學(xué)生情況與選修課情況OPEN DATABASE 學(xué)生專業(yè)SELECT * FROM 學(xué)生專業(yè) RIGHT JOIN 選修 ON 學(xué)生專業(yè).學(xué)號=選修.學(xué)號CLOSE DATABASE ALL(4)FULL JOIN為全連接。即滿足連接條件的記錄出現(xiàn)在結(jié)果上,兩表不滿足連接條件的記錄也出現(xiàn)在結(jié)果上。例4.13 用全連接查找學(xué)生情況與選修課情況OPEN DATABASE 學(xué)生專業(yè)SELECT * FROM 學(xué)生專業(yè) FU
17、LL JOIN 選修 ON 學(xué)生專業(yè).學(xué)號=選修.學(xué)號CLOSE DATABASE ALL8UNION子句也稱集合并運(yùn)算,用此子句可以將多個表的查詢結(jié)果,合并成一個結(jié)果,要求查詢結(jié)果具有相同字段與個數(shù),且對應(yīng)字段類型要兼容。例4.14 建立三個表,計(jì)算機(jī)應(yīng)用、計(jì)算機(jī)軟件、計(jì)算機(jī)硬件它們的結(jié)構(gòu)為專業(yè) C(3),學(xué)號C(9),姓名C(6),數(shù)學(xué) C(N, 3),英語C(N, 3),C語言C(N, 3)然后建立一個數(shù)據(jù)庫,計(jì)算機(jī)并將三個表添入庫中,然后用UNION查看所有內(nèi)容。3個表內(nèi)容如表4.2所示表4.2 計(jì)算機(jī)專業(yè)學(xué)生成績專業(yè)學(xué)號姓名數(shù)學(xué)英語C語言計(jì)算機(jī)應(yīng)用105010101劉曉華809060
18、計(jì)算機(jī)應(yīng)用105010102李立明9010070計(jì)算機(jī)軟件105020101王雪梅9070100計(jì)算機(jī)軟件105020102李德勇608068計(jì)算機(jī)硬件105030101方芳8090100計(jì)算機(jī)硬件105030102王良909260CREATE 計(jì)算機(jī)應(yīng)用INDEX ON 學(xué)號 TAG t1CREATE 計(jì)算機(jī)軟件INDEX ON 學(xué)號 TAG t2CREATE 計(jì)算機(jī)硬件INDEX ON 學(xué)號 TAG t3CREATE DATABASE 計(jì)算機(jī)ADD TABLE 計(jì)算機(jī)應(yīng)用ADD TABLE 計(jì)算機(jī)軟件ADD TABLE 計(jì)算機(jī)硬件SELECT * FROM 計(jì)算機(jī)應(yīng)用 UNION ALL;
19、SELECT * FROM 計(jì)算機(jī)軟件 UNION ALL;SELECT * FROM 計(jì)算機(jī)硬件 CLOSE DATABASE ALL9關(guān)于查詢結(jié)果的存放(1)用INTO DBF | TABLE<表名>可將查詢結(jié)果存放表中。(2)用INTO ARRAY <數(shù)組名>將查詢結(jié)果存入數(shù)組。(3)用INTO CURSOR <臨時表名>將查詢結(jié)果存入臨時表。(4)用TO FILE <文件名> ADDTIVE將結(jié)果存入文本文件,用ADDITIVE將結(jié)果追加到由<文件名>指定的文本文件尾部。否則將覆蓋原有文件。(5)用TO PRINT PROMP
20、T將查詢結(jié)果輸出到打印機(jī),若選PROMPT 選項(xiàng)在打印前打開打印機(jī)設(shè)置對話框。例4.15 關(guān)于結(jié)果存放的應(yīng)用。OPEN DATABASE 學(xué)生SELECT * FROM 學(xué)生 INTO TABLE 新學(xué)生SELECT * FROM 學(xué)生 INTO ARRAY aSELECT * FROM 學(xué)生 INTO CURSOR 臨時學(xué)生SELECT * FROM 學(xué)生 TO FILE 學(xué)生文本CLOSE DATABASE ALL10SELECT 完整語句格式格式:SELECT ALL | DISTINCT TOP <數(shù)值表達(dá)式> PERCENT 別名. 列名 AS 欄目名 , 別名. 列名
21、AS 欄目名FROM FORCE 數(shù)據(jù)庫名! <表名> AS <本地名>INNER | LEFT OUTER | RIGHT OUTER | FULL OUTER JOIN <數(shù)據(jù)庫>! <表名> AS <本地名> ON <連接條件>INTO <目標(biāo)> | TO FILE <文件名> ADDITIVE | TO PRINT PROMPT | TO SCREENPREFERENCE 參數(shù)名 NOCONSOLE PLAIN NOWAITWHERE <聯(lián)接條件> AND <聯(lián)接條件>
22、; AND | OR <篩選條件>GROUP BY <表達(dá)式1> , <表達(dá)式2>HAVING <篩選條件>UNION ALL SELECT 命令ORDER BY <關(guān)鍵字表達(dá)式> ASC | DESC ,<關(guān)鍵字表達(dá)式> ASC | DESC從以上SELECT 格式看很長也很復(fù)雜,但在前面已將常用的重要的部分介紹過了。下面對不常用的子句的作用、形式作一介紹。說明:(1)FORCE用來在按連接條件來連接表查詢時,VFP 不進(jìn)行優(yōu)化。(2)PREFERENCE<參數(shù)名>子句:用于記載瀏覽窗口的配置參數(shù),再次使用該
23、子句時可用參數(shù)名引用此配置參數(shù)。(3)NOCONSOLE子句:禁止將查詢結(jié)果在屏幕顯示,若選INTO子句忽略它的設(shè)置。(4)PLAIN子句:輸出時省略字段名,若選用INTO子句忽略它的設(shè)置。(5)NO WAIT子句:顯示結(jié)果后,程序繼續(xù)執(zhí)行。(6)<數(shù)據(jù)庫>!表名是指非當(dāng)前數(shù)據(jù)庫的表。4.2.2操作功能(插入、更新、刪除)1插入格式1:INSERT INTO <表名> 字段名1, 字段名2, VALUES (表達(dá)式1, 表達(dá)式2)格式2:INSERT INTO <表名> FROM ARRAY 數(shù)組名 | MEMVAR功能:在表尾添加一個指定字段的記錄。說明:
24、(1)格式1中字段名1,字段名2, 是用于指定添加記錄的字段名,若省略,說明所有字段,表達(dá)式1,表達(dá)式2,是添加字段1,字段2,的具體值。(2)格式2 ARRAY 數(shù)組名是從指定的數(shù)組中添加記錄的值,MEMVAR 是從與字段同名的內(nèi)存變量中添加記錄的值。例4.16 插入應(yīng)用。OPEN DATABASE 學(xué)生COPY FILES 學(xué)生成績.* TO 學(xué)生成績1.*USE 學(xué)生成績1LISTINSERT INTO 學(xué)生成績1 VALUE ("10501012",90,80,72)LISTGO 1SCATTER MEMVAR &&將當(dāng)前記錄讀到內(nèi)存變量INSERT
25、 INTO 學(xué)生成績1 FROM MEMVARGO 2SCATTER TO a &&將當(dāng)前記錄讀到a數(shù)組INSERT INTO 學(xué)生成績1 FROM ARRAY aUSE2更新格式:UPDATE <表名> SET 字段名1=<表達(dá)式1> , 字段名2=<表達(dá)式2> WHERE <條件>功能:更新滿足條件的記錄的值,若省略WHERE,更新全部記錄的值。例4.17 更新應(yīng)用。Use 學(xué)生成績1UPDATE 學(xué)生成績1 SET 數(shù)學(xué)=數(shù)學(xué)+10 WHERE 數(shù)學(xué)<80UPDATE 學(xué)生成績1 SET 英語=英語+10USE3刪除格
26、式:DELETE FROM <表名>WHERE <條件>功能:刪除符合條件的記錄,若省略WHERE將刪除全部記錄。例4.18 刪除應(yīng)用。USE 學(xué)生成績1DELETE FROM 學(xué)生成績1 WHERE 英語>100USE4.2.3定義功能SQL語句也可以定義表、視圖?,F(xiàn)在簡單加以介紹。1定義表在2.1.2中用命令創(chuàng)建表,此格式為SQL創(chuàng)建表的基本語句,現(xiàn)給出它的完整形式。格式:CREATE TABLE|DBF <表名1>(<字段名1>, 類型, (<寬度>) NULL | NOT NULLCHECK <邏輯表達(dá)式1>
27、 ERROR <出錯信息> DEFAULT <表達(dá)式1>PRIMARY KEY | UNIQUE REFERENCE <表名2> TAG <索引標(biāo)識符名1> NOCPTRANS, <字段名2> | FROM ARRAY <數(shù)組名>, PRIMARY KEY <表達(dá)式2> TAG <索引標(biāo)識符名2>, UNIQUE <表達(dá)式3> TAG <索引標(biāo)識符3>, FOREIGN KEY <表達(dá)式4> TAG <索引標(biāo)識符名4>NODUPREFERNCES &l
28、t;表名3> TAG <索引標(biāo)識符名5>, CHECK <邏輯表達(dá)式> ERROR <出錯信息2>說明:(1)NULL | NOT NULL子句說明字段是否可取空值(NULL)。(2)CHECK <邏輯表達(dá)式> ERROR <出錯信息>子句用于說明字段的有效性規(guī)則。<邏輯表達(dá)式>是有效性規(guī)則,<出錯信息>是為字段有效性規(guī)則檢查出錯時給出的提示信息。(3)DEFAULT <表達(dá)式1>子句使用表達(dá)式值給出字段的默認(rèn)值。(4)PRIMARY KEY|UNIQUE子句是以該字段創(chuàng)建索引,取PRIMAR
29、Y KEY 創(chuàng)建的是主索引,取UNIQUE創(chuàng)建的是候選索引。(5)REFERENCE <表名2>TAG <索引標(biāo)識名>子句用于指定與建立永久關(guān)系的父表名。<表名2>為父表名,若省略TAG <索引標(biāo)識符名>就在父表已存在的索引標(biāo)識上建立聯(lián)系。(6)NOCPTRANS子句用于指定C或M型。主字段不進(jìn)行代碼頁轉(zhuǎn)換。只能用于C、M型字段。(7)PRIMARY KEY <表達(dá)式2> TAG <索引標(biāo)識符2>子句指定要創(chuàng)建的主索引。<表達(dá)式2>為表中字段組合。一個表只能有一個主索引,如已建立主索引就不可以用此子句。(8)U
30、NIQUE <表達(dá)式3> TAG <索引標(biāo)識符名3>創(chuàng)建候選索引。<表達(dá)式3>為表中字段組合。(9)FOREIGN KEY <表達(dá)式4> TAG <索引標(biāo)識符名4>NODUP子句,用于建立普通索引。并與父表建立聯(lián)系。(10)CHECK <邏輯表達(dá)式>ERROR <出錯信息2>子句,與2的意義相同。(11)REFERNCES <表名3>TAG <索引標(biāo)識符名5>子句與5含義同。(12)FROM ARRAY <數(shù)組名>子句用于從一個已存在數(shù)組中取出字段名、類型、寬度。例4.19
31、建表應(yīng)用。OPEN DATABASE 學(xué)生CREATE TABLE 學(xué)生成績x(學(xué)號 C(9) PRIMARY KEY ,編譯 N(3) CHECK (編譯>=0 AND 編譯<=100) ERROR "編譯成績再0-100之間" DEFAULT 0, FOREIGN KEY 學(xué)號 tag 學(xué)號 REFERENCES 學(xué)號)CLOSE DATABASE ALL2定義視圖格式:CREATE VIEW 視圖名 AS SELECT 語句功能:建立視圖。用SELECT語句限定視圖數(shù)據(jù)。例4.20 建立視圖OPEN DATABASE 學(xué)生CREATE VIEW 學(xué)生視圖
32、AS SELECT * FROM 學(xué)生 WHERE 入學(xué)成績>=500CLOSE DATABASE ALL3刪除視圖格式:DROP VIEW 視圖名功能:刪除視圖。例4.21 視圖的刪除。OPEN DATABASE 學(xué)生DROP VIEW 學(xué)生視圖CLOSE DATABASE ALL4.3查詢在4.2節(jié)中介紹了SELECT語句,它適合于復(fù)雜條件的查詢。VFP提供了用查詢設(shè)計(jì)器進(jìn)行查詢,它的每一個查詢都對應(yīng)一個SELECT語句。由于已學(xué)完SELECT 語句,現(xiàn)在再學(xué)查詢設(shè)計(jì)器,就會感到它的方便簡單。它很形象,可以將查詢結(jié)果用瀏覽器、報(bào)表、表、圖形等來表示出來。4.3.1建立查詢1用向?qū)Ы?/p>
33、查詢(1)建立文件菜單新建或常用工具欄新建按鈕,選文件類型為查詢向?qū)?,打開向?qū)нx取對話框(見圖4.1),選擇查詢向?qū)Т_定,打開向?qū)υ捒虿襟E1字段選?。ㄒ妶D4.2)3個點(diǎn)按鈕,打開打開對話框,文件類型選數(shù)據(jù)庫,選學(xué)生庫確定,在數(shù)據(jù)庫和表列表框中選學(xué)生表將可用字段中字段選入選定字段中,再在數(shù)據(jù)庫和表列表框中選學(xué)生成績表將可用字段中字段選入選定字段中下一步,進(jìn)入查詢向?qū)Р襟E2為表建立關(guān)系(見圖4.3)。添加下一步進(jìn)入查詢向?qū)Р襟E2a字段選?。ㄒ妶D4.4)下一步進(jìn)入查詢向?qū)Р襟E3篩選記錄(見圖4.5)下一步進(jìn)入查詢向?qū)Р襟E4排序記錄(見圖4.6),選學(xué)生.學(xué)號添加下一步,進(jìn)入查詢向?qū)Р襟E4a限制記錄
34、對話框(見圖4.7)下一步進(jìn)入步驟5完成對話框(見圖4.8)預(yù)覽完成。打開另存為對話框,在文件名文本框輸入查詢學(xué)生保存。在查詢設(shè)計(jì)器打開下,通過查詢菜單,查詢SQL選項(xiàng)可查看對應(yīng)的SQL SELECT 語句。圖4.1 向?qū)нx取對話框圖4.2 查詢向?qū)Р襟E1對話框圖4.3 查詢向?qū)Р襟E2對話框圖4.4 查詢向?qū)Р襟E2a圖4.5 查詢向?qū)Р襟E3篩選記錄圖4.6 查詢向?qū)Р襟E4排序記錄圖4.7 查詢向?qū)Р襟E4a限制記錄圖4.8 查詢向?qū)Р襟E5完成對話框2用查詢設(shè)計(jì)器建立查詢文件新建或常用工具欄的新建按鈕,打開新建對話框,選查詢新建文件按鈕,打開打開對話框,選學(xué)生表確定(見圖4.9)。在添加表或視圖對
35、話框中選學(xué)生表添加,選學(xué)生成績表添加關(guān)閉。進(jìn)入如圖4.10所示查詢設(shè)計(jì)器中。圖4.9 添加表或視圖對話框圖4.10 查詢設(shè)計(jì)器在查詢設(shè)計(jì)器中有幾個選項(xiàng)卡,含義為:(1)字段選項(xiàng)卡,對應(yīng)于SELECT 中的輸出結(jié)果字段。(2)聯(lián)接選項(xiàng)卡,對應(yīng)于SELECT 中的JOIN子句。(3)篩選選項(xiàng)卡,對應(yīng)于SELECT 中WHERE子句。(4)分組選項(xiàng)卡,對應(yīng)于SELECT 中GROUP 與HAVING 子句。(5)排序選項(xiàng)卡,對應(yīng)于SELECT 中ORDER BY子句。(6)雜項(xiàng)選項(xiàng)卡,對應(yīng)于SELECT 中ALL|DISTINCT子句與TOP 子句。在字段選項(xiàng)卡中函數(shù)和表達(dá)式,3點(diǎn)按鈕用于在可用字段
36、中設(shè)函數(shù)和表達(dá)式。全部添加聯(lián)接選項(xiàng)卡、取默認(rèn)內(nèi)聯(lián)接在類型內(nèi)容左邊有一個水平向外雙向箭頭按鈕,若單擊此按鈕打開聯(lián)接條件對話框,顯示聯(lián)接條件的一些信息。若單擊類型下面的列表框,顯示所有可選的連接類型。篩選選項(xiàng)卡字段名下拉表框選學(xué)生.學(xué)號條件為=,單擊條件下拉列表框,顯示所有可選條件。在實(shí)例文本框中輸入學(xué)生成績.學(xué)號排序選項(xiàng)卡,在字段列表框框中選學(xué)生.學(xué)號添加分組選項(xiàng)卡在可用字段列表框中選學(xué)生.性別添加雜項(xiàng)取默認(rèn)全部常用工具欄中的執(zhí)行按鈕或程序菜單中運(yùn)行,顯示查詢對話框查詢中關(guān)閉按鈕查詢設(shè)計(jì)器中關(guān)閉組,打開確認(rèn)對話框是,打開另存對話框,在保存文件名中輸入查詢學(xué)生1保存。3定向輸出查詢結(jié)果在查詢設(shè)計(jì)器
37、打開基礎(chǔ)上:查詢菜單查詢?nèi)ハ?,打開查詢?nèi)ハ驅(qū)υ捒颍ㄒ妶D4.11),默認(rèn)為瀏覽即屏幕輸出。圖4.11 查詢?nèi)ハ蚩筛鶕?jù)需要選擇臨時表、表、圖形、屏幕、報(bào)表、標(biāo)簽,確定即可。這些選擇的說明如表4.3所示。表4.3 查詢輸出去向類型說明輸出類型說明瀏覽在BROWSE窗口顯示結(jié)果臨時表結(jié)果存在一個命名的臨時表中表結(jié)果存在一個命名的表中圖形查詢結(jié)果與Microsoft Graph一起應(yīng)用屏幕結(jié)果顯示VPF窗口或當(dāng)前活動輸出窗口中報(bào)表輸出到報(bào)表文件(*.FRX)中標(biāo)簽輸出到標(biāo)簽文件(*.LBX)中4.3.2執(zhí)行查詢1文件打開,再打開對話框中選文件類型為查詢,選文件名為查詢學(xué)生1確定。程序運(yùn)行或單擊常用工具欄
38、中的運(yùn)行按鈕。2在命令窗口中輸入DO查詢學(xué)生1.qpr。4.3.3查詢設(shè)計(jì)器的局限性用查詢設(shè)計(jì)器建立的查詢,簡單,易學(xué),但在應(yīng)用中有一定的局限性,它實(shí)用于比較規(guī)范的查詢,而對于較復(fù)雜的查詢是無法實(shí)現(xiàn)的,下面來看一個用SELECT查詢的例子。例4.22 查詢?nèi)雽W(xué)成績建一個查詢X.qpr程序文件OPEN DATABASE 學(xué)生SELECT a1.學(xué)號, a1.姓名, a1.入學(xué)成績 FROM 學(xué)生 AS a1;WHERE 入學(xué)成績=(SELECT MAX(入學(xué)成績) FROM 學(xué)生 AS b1WHERE a1.學(xué)號=b1.學(xué)號)這個例子用查詢分析器是無法完成查詢的,若用查詢設(shè)計(jì)器修改常出現(xiàn)如圖4.
39、12所示的對話框。圖4.12 提示信息對話框4.4視圖查詢數(shù)據(jù)庫中只存放視圖的定義,視圖的定義被保存在數(shù)據(jù)庫中,數(shù)據(jù)庫不存放視圖的對應(yīng)數(shù)據(jù),這些數(shù)據(jù)仍然存放在表中。視圖與查詢一樣都是要從表中獲取數(shù)據(jù),它查詢的基礎(chǔ)實(shí)質(zhì)上都是SELECT語句,它們的創(chuàng)建步驟也是相似的。視圖與查詢的區(qū)別主要是:視圖是一個虛表,而查詢是以*.qpr文件形式存放在磁盤中,更新視圖的數(shù)據(jù)同時也就更新了表的數(shù)據(jù),這一點(diǎn)與查詢是完全不同的。視圖從獲取數(shù)據(jù)來源可將它分為本地視圖和遠(yuǎn)程視圖兩種。本地視圖是指使用當(dāng)前數(shù)據(jù)庫中表建立的視圖,遠(yuǎn)程視圖是指使用非當(dāng)前數(shù)據(jù)庫的數(shù)據(jù)源中的表建立的視圖。4.4.1建立本地視圖1 用向?qū)Ы⒈镜?/p>
40、視圖在打開所需數(shù)據(jù)庫的基礎(chǔ)上,文件新建或使用工具欄中的新建按鈕,打開新建對話框選文件類型視圖向?qū)В缓蟀聪驅(qū)崾就瓿刹僮鳌? 用視圖設(shè)計(jì)器建立本地視圖在打開所需數(shù)據(jù)庫的基礎(chǔ)上,文件新建或使用工具欄中的新建按鈕文件類型視圖新建文件按鈕,打開添加表或視圖對話框在數(shù)據(jù)庫的下拉列表框中選擇所需數(shù)據(jù)庫在數(shù)據(jù)庫的列表框中選表添加,若需多表可反復(fù)選表單擊“添加”按鈕關(guān)閉,打開如圖4.13所示的視圖設(shè)計(jì)器,它與查詢設(shè)計(jì)器幾乎一樣,就多一個更新條件選項(xiàng)卡,以后步驟除更新條件選項(xiàng)卡外都與查詢設(shè)計(jì)器在建立查詢時一樣的步驟。圖4.13 視圖設(shè)計(jì)器最后關(guān)閉視圖設(shè)計(jì)器,打開確認(rèn)對話框是,打開保存對話輸入視圖名確認(rèn)。3 遠(yuǎn)
41、程視圖與連接(1)建立連接文件新建或使用工具欄中的新建按鈕,打開新建對話框文件類型選連接新建文件按鈕,打開連接設(shè)計(jì)器如圖4.14所示。新建數(shù)據(jù)源,打開ODBC Data Source Administrator 對話框,如圖4.15所示。User Data Source卡,如圖4.16所示add打開如圖4.17所示。Microsoft Visual Foxpro driver 對話框完成打開如圖4.18所示。在Data Source None文本框中輸入數(shù)據(jù)源名qqq打開如圖4.19的select DataSource 對話框選所需數(shù)據(jù)庫打開ok確定在數(shù)據(jù)源下拉列表框中選qqq驗(yàn)證連接,顯示連
42、接設(shè)計(jì)器連接成功對話框確定關(guān)閉,打開Microsoft Visual Foxpro對話框打開保存對話框在連接文本框中輸入連接名確定。圖4.14圖4.15圖4.17圖4.18圖4.19(2)建立遠(yuǎn)程試圖1)用向?qū)В?在數(shù)據(jù)庫打開的基礎(chǔ)上,文件新建或使用工具欄中的新建按鈕,打開新建對話框在文件類型選遠(yuǎn)程試圖向?qū)Т蜷_如圖4.20所示遠(yuǎn)程向?qū)Р襟E數(shù)據(jù)源選取對話框在不用數(shù)據(jù)源列表框選數(shù)據(jù)源qqq下一步步驟2字段選取對話框如圖4.21所示在列表框中選表在可用字段列表框中選字段,若為多表,可重復(fù)選表與選字段操作下一步,進(jìn)入步驟3為表建立關(guān)系,如圖4.22所示添加下一步,步驟3字段選取如圖4.23所示下一步,
43、進(jìn)入步驟4排列記錄,如圖4.24選字段下一步進(jìn)入步驟5篩選記錄如圖4.25所示下一步進(jìn)入步驟6完成如圖4.26完成打開視圖對話框,如圖4.27在遠(yuǎn)程視圖各文本框中輸入視圖確定。圖4.20圖4.21圖4.22圖4.23圖4.24圖4.25圖4.26圖4.272)用視圖設(shè)計(jì)器建立遠(yuǎn)程視圖文件新建或使用工具欄中的新建按鈕,打開新建對話框如圖4.28在文件類型中選遠(yuǎn)程視圖新鍵文件按鈕,打開選擇按鈕或數(shù)據(jù)源對話框,在數(shù)據(jù)庫的連接列表框中選一個需要的連接確定,打開對話框如圖4.29所示選表添加,多表時可重復(fù)選表與添加操作關(guān)閉進(jìn)入視圖設(shè)計(jì)器;以后步驟與本地視圖步驟一樣。圖4.28圖4.294.4.3視圖與更新通過視圖進(jìn)行查詢時,其結(jié)果時只讀的。要想對視圖查詢結(jié)果進(jìn)行修改,必須在視圖設(shè)計(jì)器中的更新條件選項(xiàng)卡中進(jìn)行一些相應(yīng)的設(shè)置,視圖的修改可以使得原表隨著修改1 設(shè)置關(guān)鍵字段與更新字段在視圖設(shè)計(jì)中更新條件選項(xiàng)卡,如圖4.30所示。字段各列表框中顯示著視圖查詢結(jié)果中的字段名字段名左側(cè)帶鑰匙的為關(guān)鍵字段,此時出現(xiàn)V,
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家居空間設(shè)計(jì)中的生活動線優(yōu)化考核試卷
- 流動小吃轉(zhuǎn)讓合同范本
- 酒店吧臺員工合同范本
- 吊頂合資協(xié)議合同范本
- 辦公區(qū)域清潔與維護(hù)工作計(jì)劃
- 農(nóng)村污水處理合同
- 企業(yè)增資擴(kuò)股方案及協(xié)議
- 環(huán)境保護(hù)的重要性征文
- 貨物公路運(yùn)輸合同
- 私人公寓樓房產(chǎn)轉(zhuǎn)讓合同
- 《急性冠狀動脈綜合征》課件
- 《馬克思生平故事》課件
- 2024-2025學(xué)年四川省成都市高一上學(xué)期期末教學(xué)質(zhì)量監(jiān)測英語試題(解析版)
- HRBP工作總結(jié)與計(jì)劃
- 八大危險(xiǎn)作業(yè)安全培訓(xùn)考試試題及答案
- 2025年湖南高速鐵路職業(yè)技術(shù)學(xué)院高職單招語文2018-2024歷年參考題庫頻考點(diǎn)含答案解析
- 2025年上半年中電科太力通信科技限公司招聘易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年沙洲職業(yè)工學(xué)院高職單招語文2018-2024歷年參考題庫頻考點(diǎn)含答案解析
- DB3502T052-2019 家政服務(wù)規(guī)范 家庭搬家
- 【化學(xué)】常見的鹽(第1課時)-2024-2025學(xué)年九年級化學(xué)下冊(人教版2024)
- 2024甘肅省公務(wù)員(省考)行測真題
評論
0/150
提交評論