版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、2007-5-10,1,5.1 數(shù)據(jù)查詢5.2 數(shù)據(jù)視圖,2007-5-10,2,5.1 數(shù)據(jù)查詢,在Visual FoxPro中,查詢是向一個數(shù)據(jù)庫發(fā)出檢索信息的請求,并使用一些條件提取特定的記錄,以供瀏覽。 在Visual FoxPro應(yīng)用程序的數(shù)據(jù)表中,儲存了大量的數(shù)據(jù)。經(jīng)常需要對這些數(shù)據(jù)進(jìn)行瀏覽和分析,數(shù)據(jù)查詢就是一種重要方式。 一個查詢可以使用一系列的數(shù)據(jù)源,可以將這些數(shù)據(jù)源、指定條件的記錄、要操縱的數(shù)據(jù)、排序的結(jié)果等用
2、一個功能強(qiáng)大的SELECT-SQL語句組合起來。 Visual FoxPro提供了許多記錄查詢、搜索命令以及提升查詢速度的Rushmore技術(shù),可以容易地實現(xiàn)查詢的快、準(zhǔn)要求。,2007-5-10,3,5.1 數(shù)據(jù)查詢,5.1.1 Rushmore技術(shù) Rushmore技術(shù)是一種數(shù)據(jù)搜索技術(shù),它使用標(biāo)準(zhǔn)的Visual FoxPro索引優(yōu)化對數(shù)據(jù)的訪問。使用Rushmore技術(shù),對一些復(fù)雜的表操作比不使用這種技術(shù)要快上幾百上千倍
3、。可以對任何Visual FoxPro索引使用Rushmore技術(shù),包括獨(dú)立索引(.idx)和復(fù)合索引(.cdx)。獨(dú)立索引和復(fù)合索引文件都使用了壓縮技術(shù),壓縮后的索引大小是壓縮前的六分之一。,2007-5-10,4,5.1 數(shù)據(jù)查詢,5.1.2 SQL查詢 Visual FoxPro提供了四個查詢命令: LOCATE、SEEK、FIND 和 SELECT-SQL。 這幾個命令有著各自的側(cè)重點。如果使用索引文件,以SEE
4、K命令表現(xiàn)最好,雖然LOCATE的FOR子句可以使用Rushmore功能,但表現(xiàn)仍次于SEEK命令;在多用戶編程或關(guān)聯(lián)數(shù)據(jù)環(huán)境中,則以SELECT-SQL語句表現(xiàn)最佳。FIND命令只是為了保持向后兼容而提供的命令。,2007-5-10,5,5.1 數(shù)據(jù)查詢,在Visual FoxPro中,SELECT-SQL語句可被加入到一些過程或事件代碼中,以此來控制這些過程和事件對Visual FoxPro中表和記錄的操作。生成SQL查詢的方法有兩
5、種:① 人工編寫查詢程序,再插入到應(yīng)用程序中;② 使用查詢設(shè)計器自動生成代碼。,2007-5-10,6,5.1 數(shù)據(jù)查詢,1. SELECT-SQL查詢語句的基本格式 (1)SQL查詢語句的基本格式為:SELECT [ALL|DISTINCT][別名l,][AS列名1][[,別名2.];[AS列名2]…]FROM 表名1[別名1][,表名2[別名2]…]; [[INTO DBF|CURSOR|ARRAY]|[TO FIL
6、E [ADDITIVE]; |TO PRINERT [PROMPT]]; [PLAIN][NOWAIT][WHERE ]; [GROUP BY [,列名2…]; [HAVING ]]; [UNION SELECT ]; [ORDER BY[ASC|DESC][,列名2[ASC|DESC]…]],2007-5-10,7,5.1 數(shù)據(jù)查詢,(2)參數(shù)說明 :指定包括在查詢結(jié)果中的項。一個項可以是:①
7、FROM子句所包含的表中的字段名稱。② 一個常量,查詢結(jié)果中每一行都出現(xiàn)這個常量值。③ 一個表達(dá)式,可以是用戶自定義函數(shù)名。④ SELECT中的用戶自定義函數(shù)。,2007-5-10,8,5.1 數(shù)據(jù)查詢,:指定查詢結(jié)果中列的重新定義的標(biāo)題。當(dāng)是一個表達(dá)式或一個字段函數(shù)或常量時,如果要給此列取一個有含義的名稱,可以使用這個子句。列名必須滿足Visual FoxPro的命名規(guī)則。 [INTO DBF|CURSOR|ARRAY
8、]:指定在何處保存查詢結(jié)果。 如果沒有包括INTO子句,查詢結(jié)果將顯示在瀏覽窗口中。,2007-5-10,9,5.1 數(shù)據(jù)查詢,:指定查詢結(jié)果中列的重新定義的標(biāo)題。當(dāng)是一個表達(dá)式或一個字段函數(shù)或常量時,如果要給此列取一個有含義的名稱,可以使用這個子句。列名必須滿足Visual FoxPro的命名規(guī)則。 [INTO DBF|CURSOR|ARRAY]:指定在何處保存查詢結(jié)果。 如果沒有包括INTO子句,查詢結(jié)果將顯示在瀏覽窗口中。
9、 TO FILE:將查詢結(jié)果輸出到指定的文件、打印機(jī)或屏幕上。 ADDITIVE:將查詢結(jié)果追加到 TO FILE文件名所指定文本文件的內(nèi)容后面。,2007-5-10,10,5.1 數(shù)據(jù)查詢,PROMPT:將彈出對話框,可以調(diào)整打印機(jī)設(shè)置。 PLAIN:防止列標(biāo)題出現(xiàn)在顯示的查詢結(jié)果中。 如果SELECT語句中包括INTO子句,則忽略PLAIN子句。 NOWAIT:打開瀏覽窗口并將查詢結(jié)果輸出到這個窗口后繼續(xù)程序的
10、執(zhí)行。程序并不等待關(guān)閉瀏覽窗口,而是立即執(zhí)行緊接在 SELECT 語句后面的程序行。 HAVING:指定包括在查詢結(jié)果中的組必須滿足的篩選條件。 UNION:把一個 SELECT 語句的最后查詢結(jié)果同另一個 SELECT 語句最后查詢結(jié)果組合起來。,2007-5-10,11,5.1 數(shù)據(jù)查詢,WHERE:指定 Visual FoxPro 的查詢結(jié)果中只包括符合指定條件的記錄。 GROUP BY:按列的值對查詢結(jié)果的行進(jìn)行分組。
11、ORDER BY:根據(jù)列的數(shù)據(jù)對查詢結(jié)果進(jìn)行排序。,2007-5-10,12,5.1 數(shù)據(jù)查詢,2.利用SQL進(jìn)行數(shù)據(jù)查詢(1)基本查詢語句 命令格式:SELECT [ALL|DISTINCT] FROM ; [TO ] 功能:無條件查詢。 說明: ALL:顯示全部查詢記錄,包括重復(fù)記錄。 DISTINCT:顯示無重復(fù)結(jié)果的記錄。 TO:查詢結(jié)果的輸出去向:文件、打印機(jī)或屏幕。如果省略,則輸
12、出到瀏覽窗口中。,2007-5-10,13,5.1 數(shù)據(jù)查詢,2.利用SQL進(jìn)行數(shù)據(jù)查詢(1)基本查詢語句 命令格式:SELECT [ALL|DISTINCT] FROM ; [TO ] 功能:無條件查詢。 說明: ALL:顯示全部查詢記錄,包括重復(fù)記錄。 DISTINCT:顯示無重復(fù)結(jié)果的記錄。 TO:查詢結(jié)果的輸出去向:文件、打印機(jī)或屏幕。如果省略,則輸出到瀏覽窗口中。,2007-5-1
13、0,14,5.1 數(shù)據(jù)查詢,例5.1 顯示表xsda.dbf(學(xué)生檔案表)中的所有記錄。 SELECT * FROM xsda.dbf 命令中的*表示輸出顯示所有的字段,數(shù)據(jù)來源是xsda.dbf表,表中的內(nèi)容以瀏覽方式顯示。 例5.2 顯示表xsda.dbf中的所有的學(xué)號及與之對應(yīng)的姓名,同時能去除重名。 SELECT DISTINCT xh, xm ;
14、 From xsda.dbf,2007-5-10,15,5.1 數(shù)據(jù)查詢,例5.3 對表xscj.dbf(學(xué)生成績表)中有記錄的xh、xm、jsj、dxyy四個字段進(jìn)行查詢,并將jsj和dxyy兩項相加得總分(zf)。 SELECT xh,xm,jsj+dxyy AS zf; FROM xscj,2007-5-10,16,5.1 數(shù)據(jù)查詢,表xscj的原始記錄,對表xsc
15、j的查詢結(jié)果,,2007-5-10,17,5.1 數(shù)據(jù)查詢,(2)帶條件(WHERE)的查詢語句 命令格式: SELECT [ALL | DISTINCT] FROM ; [WHERE ] 功能:從一個表中查詢滿足條件的數(shù)據(jù)。 說明: 由一系列用AND 或 OR 連接的條件表達(dá)式組成。 SQL支持的關(guān)系運(yùn)算符如下: =、<>、!=、#、==、>、>=、<、<=,
16、2007-5-10,18,5.1 數(shù)據(jù)查詢,例5.5 顯示xsda.dbf表中出生日期在1985年的學(xué)生的學(xué)號,姓名和出生日期。 SELECT xh, xm, csrq ; FROM xsda; WHERE csrq BETWEEN {^01/01/1985} AND {^12/31/1985},2007-5-10,19,5.1 數(shù)據(jù)查詢,例5.6 顯示
17、xsda.dbf表中姓劉的學(xué)生的學(xué)號,姓名和出生日期。 SELECT xh,xm,csrq; FROM xsda ; WHERE xm Like “劉%”,2007-5-10,20,5.1 數(shù)據(jù)查詢,(3)排序查詢 命令格式: SELECT [ALL | DISTINCT] ; FROM ; ORDER
18、BY [ASC | DESC] 功能:包括排序、函數(shù)運(yùn)算和謂詞演算。,2007-5-10,21,5.1 數(shù)據(jù)查詢,(4)分組查詢 命令格式: SELECT [ALL | DISTINCT] ;FROM ; GROUP BY … [HAVING ],2007-5-10,22,5.1 數(shù)據(jù)查詢,(5)集合的并運(yùn)算 命令格式: SELECT ; FR
19、OM ; WHERE UNION SELECT ; FROM ; WHERE 功能: 將兩個SELECT語句的查詢結(jié)果通過并運(yùn)算合并成一個查詢結(jié)果。為了進(jìn)行并運(yùn)算,要求兩個查詢結(jié)果具有相同的字段個數(shù),并且對應(yīng)字段具有相同的數(shù)據(jù)類型和取值范圍。,2007-5-10,23,5.1 數(shù)據(jù)查詢,5.1.3 查詢設(shè)計器 在Visual FoxP
20、ro,除了直接使用SQL語言進(jìn)行查詢,另一種工具就是查詢設(shè)計器。查詢設(shè)計器用于設(shè)計和生成查詢文件。利用查詢設(shè)計器可生成獨(dú)立的查詢文件,這是與SELECT語句的不同之處。,2007-5-10,24,5.1 數(shù)據(jù)查詢,1.啟動查詢設(shè)計器① 在系統(tǒng)菜單中單擊【文件(F)】→【新建(N)】,可打開 【新建】對話框,在對話框的“文件類型”中選【查詢】,再按【新建(N)】或【向?qū)В╓)】。 ② 在【項目管理器】中創(chuàng)建查詢。 不管采用“新建”還
21、是“向?qū)А?,都將打開查詢設(shè)計器。由于查詢是依賴于數(shù)據(jù)庫的,如果采用第一種方式,系統(tǒng)將花一定時間尋找數(shù)據(jù)庫。最好是在項目管理器中創(chuàng)建查詢,這樣更便于對數(shù)據(jù)的管理。,2007-5-10,25,5.1 數(shù)據(jù)查詢,,在【項目管理器】中創(chuàng)建查詢,2007-5-10,26,5.1 數(shù)據(jù)查詢,2. 查詢設(shè)計器窗口,2007-5-10,27,5.1 數(shù)據(jù)查詢,查詢設(shè)計器共有六個選項卡,其意義如下: Fields:設(shè)定查詢輸出字段 Join:設(shè)置表間
22、關(guān)聯(lián) Filter:設(shè)置記錄篩選條件 Order By:設(shè)置查詢排序方式 Group By:設(shè)置查詢分組方式 Miscellaneous:雜項,指定是否對重復(fù)記錄做檢索,2007-5-10,28,5.1 數(shù)據(jù)查詢,例5-8例 對學(xué)生檔案表(xsda.dbf)和學(xué)生成績表(xscj.dbf)進(jìn)行查詢分析,并統(tǒng)計每條記錄的平均分。 步驟一:設(shè)置查詢數(shù)據(jù)源(表),2007-5-10,29,5.1 數(shù)據(jù)查詢,步驟二:選取查詢字段,2
23、007-5-10,30,5.1 數(shù)據(jù)查詢,步驟三:設(shè)置表間聯(lián)接,2007-5-10,31,5.1 數(shù)據(jù)查詢,聯(lián)接類型共有五種。各種聯(lián)接的意義說明如下:① Inner Join(內(nèi)部聯(lián)接):只返回完全滿足連接條件的記錄; ② Left Outer Join(左外聯(lián)接):返回聯(lián)接條件左邊表中的全部記錄和 聯(lián)接條件右邊的表中符合條件的記錄; ③ Right Outer Join(右外聯(lián)接):與左外聯(lián)接相反,返回
24、聯(lián)接條件右邊表中的全部記錄和聯(lián)接條件左邊的表中符合條件的記錄;④ Full Join(完全聯(lián)接):返回兩個表中的匹配和不匹配的所有記錄。 ⑤ Cross Join(交叉聯(lián)接):返回被連接的兩個表所有數(shù)據(jù)行的笛卡爾積,返回的結(jié)果集合中,數(shù)據(jù)行數(shù)等于第一個表中符合查詢條件的數(shù)據(jù)行數(shù)乘以第二個表中符合查詢條件的數(shù)據(jù)行數(shù)。,2007-5-10,32,5.1 數(shù)據(jù)查詢,步驟四:定義查詢條件 查詢條件是:
25、 a.表xsda.dbf中字段xb(性別)的值為“男”; b.表xscj.dbf中字段jsj(計算機(jī))的值“大于或等于80”,2007-5-10,33,5.1 數(shù)據(jù)查詢,步驟五:設(shè)置查詢的排序方式 排序是對查詢結(jié)果的記錄按指定字段進(jìn)行排序,排序方式可以是遞增或遞減。 在查詢設(shè)計器中,單擊【Order By】選項卡,可以指定排序字段及排序方式。這里選取的排序字段為xsda.xh,排序方式為Ascending(升序)。
26、 步驟六:設(shè)置查詢的分組方式 所謂分組是將一組類似的記錄壓縮成一個結(jié)果記錄,這樣就可以進(jìn)行基于一組記錄的計算。(本例本步驟略),2007-5-10,34,5.1 數(shù)據(jù)查詢,步驟七:設(shè)定查詢輸出去向,2007-5-10,35,5.1 數(shù)據(jù)查詢,查詢運(yùn)行結(jié)果,2007-5-10,36,5.1 數(shù)據(jù)查詢,查詢設(shè)計器生成的SELECT-SQL語句,2007-5-10,37,5. 2數(shù)據(jù)視圖,數(shù)據(jù)視圖(簡稱視圖)是從一個或多個表或其他視圖上導(dǎo)
27、出來的虛擬表。在應(yīng)用程序設(shè)計中,如果要創(chuàng)建自定義并且可更新的數(shù)據(jù)集合,就需要使用視圖。 Visual FoxPro的視圖有兩種類型:本地視圖和遠(yuǎn)程視圖。遠(yuǎn)程視圖使用遠(yuǎn)程SQL 語句從遠(yuǎn)程 ODBC 數(shù)據(jù)源表中選擇信息,本地視圖使用 Visual FoxPro中的SQL子句從中本地表或視圖中選擇信息??梢詫⒁粋€或多個遠(yuǎn)程視圖添加到本地視圖中,以便能在同一個視圖中同時訪問 Visual FoxPro 數(shù)據(jù)和遠(yuǎn)程ODBC 數(shù)據(jù)源中的數(shù)據(jù)。
28、,2007-5-10,38,5. 2數(shù)據(jù)視圖,視圖只能作為數(shù)據(jù)庫的一部分保存,而不能以獨(dú)立的文件保存在磁盤中。視圖可以包含存放在遠(yuǎn)程服務(wù)器上的表,而無需把它們的數(shù)據(jù)裝載到本地計算機(jī)上。用戶在本地計算機(jī)上對數(shù)據(jù)的修改不會發(fā)送到服務(wù)器上。遠(yuǎn)程表可以增加到Visual FoxPro數(shù)據(jù)庫上,這些表也可用于數(shù)據(jù)庫的視圖上。 視圖的活動期在一次打開數(shù)據(jù)庫和關(guān)閉數(shù)據(jù)庫之間。使用視圖時會在多個工作區(qū)分別打開視圖和基本表;關(guān)閉數(shù)據(jù)庫后視圖中的數(shù)
29、據(jù)將消失,當(dāng)再次打開數(shù)據(jù)庫時視圖從基本表中重新檢索,并生成一個獨(dú)立的基本表供使用。,2007-5-10,39,5. 2數(shù)據(jù)視圖,在程序開發(fā)中使用視圖有以下幾方面的優(yōu)點: (1)視點集中:視圖機(jī)制能使用戶把注意力集中在所關(guān)心的數(shù)據(jù)上,使用戶看到的數(shù)據(jù)結(jié)構(gòu)簡單而直截了當(dāng)。 (2)簡化操作:視圖可以把若干張表或視圖連接在一起,為用戶隱蔽了表與表、表與視圖、視圖與視圖之間的連接操作。 (3)多角度:視圖機(jī)制可使不同用戶從多角度處理同一數(shù)
30、據(jù),當(dāng)許多不同種類用戶使用同一個集成數(shù)據(jù)庫時,這種靈活性顯然是很重要的。 (4)安全性:可針對不同的用戶形成不同的視圖窗口,使不同的用戶了解不同的數(shù)據(jù),對數(shù)據(jù)的安全保密性起到了保護(hù)作用。,2007-5-10,40,1.4 Visual FoxPro集成開發(fā)環(huán)境,5.2.1創(chuàng)建本地視圖 因為視圖是依附于數(shù)據(jù)庫的,所以創(chuàng)建視圖之前必須創(chuàng)建所需的數(shù)據(jù)庫。創(chuàng)建本地視圖的方法有: (1)使用SQL語句新建視圖: CREA
31、TE SQL VIEW 注意:使用此語句時必須先打開相應(yīng)的數(shù)據(jù)庫。 (2)在項目管理器中創(chuàng)建視圖。,2007-5-10,41,1.4 Visual FoxPro集成開發(fā)環(huán)境,在項目管理器中創(chuàng)建視圖,2007-5-10,42,1.4 Visual FoxPro集成開發(fā)環(huán)境,視圖設(shè)計器,【更新條件】選項卡,2007-5-10,43,1.4 Visual FoxPro集成開發(fā)環(huán)境,5.2.2使用視圖更新數(shù)據(jù) 視
32、圖設(shè)計器比查詢設(shè)計器多了一個【更新條件】選項,其余基本是相同的。創(chuàng)建視圖與創(chuàng)建查詢的步驟也很相似,如選擇包含在視圖中的表和字段,指定用來連接表的連接條件,指定過濾器選擇指定的記錄。與查詢不同的是,視圖可選擇如何半將在視圖中所做的數(shù)據(jù)修改傳給原始文件,或建立視圖的虛擬表。創(chuàng)建視圖時,Visual FoxPro 在當(dāng)前數(shù)據(jù)庫中保存了一個視圖定義,該定義包括視圖中的表名、字段名以及它們的屬性設(shè)置。使用視圖時,Visual FoxPro 根據(jù)視
33、圖定義構(gòu)造一條 SQL 語句,定義視圖的數(shù)據(jù)。,2007-5-10,44,1.4 Visual FoxPro集成開發(fā)環(huán)境,例5.10 利用視圖更新表中的數(shù)據(jù)本例通過視圖來更新學(xué)生檔案表(xsda.dbf)和學(xué)生成績表(xscj.dbf)。 步驟一: 指定可更新的表。新建一個視圖,并向視圖添加兩個表: xsda.dbf和xscj.dbf。設(shè)置兩表為內(nèi)聯(lián)接(Inner Join),聯(lián)接關(guān)鍵字段為“xh”。,2007-
34、5-10,45,1.4 Visual FoxPro集成開發(fā)環(huán)境,步驟二:指定顯示字段。在【字段】選項卡中添加字段: Xsda.Xh,Xsda.Xm,Xscj.Xh, Xscj.Jsj,Xscj.Dxyy,Xscj.Zyjn。,2007-5-10,46,1.4 Visual FoxPro集成開發(fā)環(huán)境,步驟三: 指定可更新字段的更新選項。,圖中的字段列表左側(cè)有兩列,分別是“關(guān)鍵字段”列()和“更改字段列”()?!瓣P(guān)鍵字段列
35、”用于設(shè)定哪些字段為關(guān)鍵字段。單擊該列方框“”按鈕可設(shè)置當(dāng)前字段為關(guān)鍵字段,再次單擊該按鈕可取消。“更改字段列”用于定義該字段是否可以更新。單擊該列方框“”按鈕可設(shè)置當(dāng)前字段為可更新字段,再次單擊該按鈕可取消。,2007-5-10,47,1.4 Visual FoxPro集成開發(fā)環(huán)境,步驟四:控制更新沖突和使用更新 如果在一個多用戶環(huán)境中工作,當(dāng)多個用戶同時使用一個表或更新同一個記錄,則可能引起表中數(shù)據(jù)的丟失。為避免上述問題,
36、Visual FoxPro要在保存記錄之前檢查數(shù)據(jù)源上的記錄是否被他人修改過。,2007-5-10,48,1.4 Visual FoxPro集成開發(fā)環(huán)境,步驟五:視圖的保存和運(yùn)行 視圖不是獨(dú)立的文件,而是依賴于數(shù)據(jù)庫的。運(yùn)行視圖時必須打開相應(yīng)的數(shù)據(jù)庫。與運(yùn)行查詢一樣,在項目管理器中,選定要運(yùn)行的視圖名,單擊系統(tǒng)菜單欄上的運(yùn)行按鈕“”就可以運(yùn)行視圖。下面的命令也可運(yùn)行視圖: open database xsgl
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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
提交評論