Visual FoxPro程序設(shè)計課件第5章查詢與視圖_第1頁
Visual FoxPro程序設(shè)計課件第5章查詢與視圖_第2頁
Visual FoxPro程序設(shè)計課件第5章查詢與視圖_第3頁
Visual FoxPro程序設(shè)計課件第5章查詢與視圖_第4頁
Visual FoxPro程序設(shè)計課件第5章查詢與視圖_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第5章查詢與視圖5.1查詢設(shè)計器

5.2SQL語言5.3視圖5.1查詢設(shè)計器5.1.1打開查詢設(shè)計器5.1.2查詢設(shè)計器的組成1.查詢設(shè)計器窗口查詢設(shè)計器窗口分為兩部分。上半部分用于顯示查詢中要使用的表或視圖,每一張表都由可改變大小的窗口來表示,窗口中列舉了該表的字段信息。如果查詢包含多個表,并且其中兩個表之間有一條線相連,就表示這兩個表之間建立了關(guān)系。下半部分有6個選項卡,用戶對其進行相應的設(shè)置即可完成查詢。2.查詢設(shè)計器工具欄5.1.3使用查詢設(shè)計器創(chuàng)建、運行和修改查詢

1.新建查詢2.運行查詢查詢設(shè)計完成后,通過運行查詢可以瀏覽查詢的結(jié)果。運行查詢有以下三種方法。3.修改查詢?nèi)粢獙σ呀⒌牟樵兾募M行修改,只需要重新打開相應的查詢文件即可對其進行修改,打開查詢文件有以下兩種方法。(1)菜單法(2)命令法5.1.4查詢的輸出去向在查詢設(shè)計器中可以根據(jù)需要定制查詢的輸出去向。定制查詢?nèi)ハ蛞仍诓樵冊O(shè)計器中打開查詢文件,然后單擊“查詢”菜單中的“查詢?nèi)ハ颉泵?,或是單擊查詢設(shè)計器工具欄中的“查詢?nèi)ハ颉卑粹o,即可彈出“查詢?nèi)ハ颉睂υ捒颍琕isualFoxPro共提供了7種輸出去向,下面逐一進行介紹。(1)瀏覽(2)臨時表(3)表(4)圖形(5)屏幕(6)報表(7)標簽5.1.5查看SQL語句用戶通過查詢設(shè)計器創(chuàng)建查詢文件,查詢設(shè)計器根據(jù)用戶的設(shè)置自動生成一條SELECT語句,也就是說查詢結(jié)果實質(zhì)上是由一條SELECT語句實現(xiàn)的。5.2SQL語言

結(jié)構(gòu)化查詢語言SQL(StructuredQueryLanguage)是關(guān)系數(shù)據(jù)庫的標準語言。SQL由于其使用方便、功能豐富、語言簡潔易學等特點,很快得到推廣和應用,目前絕大多數(shù)商品化關(guān)系數(shù)據(jù)庫管理系統(tǒng),如Oracle、Sybase、SQLSever、Access、FoxPro等,都支持SQL作為查詢語言。VFP引入SQL語言后大大增強了自身功能,一條SQL命令可以替代多個VFP命令。用戶不僅可以直接利用SQL語言進行查詢,還可以將查詢設(shè)計器中的SQL-SELECT語句粘貼到過程或事件代碼中運行。SQL語言的主要功能是同各種數(shù)據(jù)表建立聯(lián)接、檢索和更新數(shù)據(jù)表,VFP支持SQL的數(shù)據(jù)定義、數(shù)據(jù)查詢和數(shù)據(jù)操縱功能,由于VFP在安全控制方面的不足,所以它沒有提供數(shù)據(jù)控制功能。5.2.1SQL數(shù)據(jù)定義語句數(shù)據(jù)定義語句包括三部分內(nèi)容:定義數(shù)據(jù)表、定義視圖和定義索引。對于定義數(shù)據(jù)表,又包括定義數(shù)據(jù)表的結(jié)構(gòu),例如創(chuàng)建、修改或者刪除數(shù)據(jù)表對象等。1.表的定義格式:CREATETABLE<表名>[FREE](<字段名1><類型>[(<寬度>[,<小數(shù)位數(shù)>])][,<字段名2><類型>[(<寬度>[,<小數(shù)位數(shù)>])]…)功能:建立數(shù)據(jù)表。說明:(1)表名是所要建立的數(shù)據(jù)表的名稱。(2)FREE表示建立一個自由表。(3)類型為字段的類型,如:C、N、D等。2.表的刪除格式1:

DROPTABLE<表名>功能:刪除表。格式2:DROPVIEW<視圖名>功能:刪除視圖。3.表結(jié)構(gòu)的修改格式1:ALTERTABLE<表名>ADD<字段名><類型>/ALTER<新字段名><新類型>功能:添加新的字段或修改已有字段的定義。格式2:ALTERTABLE<表名>DROP<字段名>/RENAME<字段名>TO<新字段名>功能:刪除字段或修改字段名。5.2.2SQL數(shù)據(jù)操縱語句數(shù)據(jù)操縱包括向表中插入數(shù)據(jù)、修改數(shù)據(jù)和刪除數(shù)據(jù),是實現(xiàn)表對數(shù)據(jù)管理的過程。1.記錄的插入格式:INSERTINTO<表名>[(<字段名表>)]VALUES(<表達式表>)功能:向指定表中添加一條記錄。說明:(1)<字段名表>可以是一個或多個字段,各字段間以逗號間隔,缺省情況下,按字段的順序依次賦值。(2)VALUES(<表達式表>)為要追加的記錄各字段的值。2.記錄的刪除格式:DELETEFROM<表名>[WHERE<條件表達式>]功能:根據(jù)給出的條件,邏輯刪除表中記錄。若省略WHERE子句,則邏輯刪除表中所有記錄。3.記錄的更新記錄更新是指對表中記錄進行修改。格式:UPDATE<表名>SET<字段1>=<表達式1>[,<字段2>=<表達式2>…][WHERE<條件>]5.2.3SQL數(shù)據(jù)查詢語句數(shù)據(jù)查詢是SQL語言中最重要、最核心的功能。SQL的數(shù)據(jù)查詢操作是通過SELECT查詢命令實現(xiàn)的。1.SELECT命令格式:SELECT[ALL│DISTINCT][TOPn[PERCENT]]<查詢項1[AS列標題1]>[,<查詢項2[AS列標題2]>…]FROM<表名1[[AS]別名1]>[,<表名2[[AS]別名2]>…][WHERE<篩選條件>|<聯(lián)接條件>][GROUPBY<分組選項>[HAVING<過濾條件>]][ORDERBY<排序選項>][ASC|DESC][INTO<目標>]|[TOFILE<文本文件名>]|[TOPRINTER]|[TOSCREEN]2.簡單查詢簡單查詢是基于一個表的查詢,即查詢的結(jié)果來自于一個表,查詢條件簡單。查詢時,在SELECT語句的FROM短語后只列出一個表名?!纠?-13】查詢“學生檔案”表中的所有記錄。SELECT*FROM學生檔案 說明:“*”為通配符,表示所有字段。如果只顯示部分字段,需要將要顯示的字段逐一列出?!纠?-14】查詢“學生檔案”表所有記錄的學號、姓名、性別和籍貫。SELECT學號,姓名,性別,籍貫FROM學生檔案【例5-15】查詢“學生檔案”表中籍貫為“陜西”和“湖北”的學生記錄。SELECT*FROM學生檔案WHERE籍貫="陜西"OR籍貫="湖北"3.特殊運算符在WHERE子句中可以使用以下特殊運算符構(gòu)造條件表達式。(1)BETWEEN<m>AND<n>:用來判斷某個介于[m,n]之間的值,m為區(qū)間的下限,n為區(qū)間的上限?!纠?-18】查詢“學生檔案”表中1990年出生的學生記錄。SELECT*FROM學生檔案WHERE出生年月BETWEEN{^1990-01-01}AND{^1990-12-31}(2)LIKE<字符表達式>,其中字符表達式中可使用“_”或“%”作為通配符;“%”表示0個或多個任意字符,“_”表示一個任意字符?!纠?-19】查詢“學生檔案”表中姓“王”的學生記錄,顯示其學號、姓名、出生年月字段,如圖5-19所示。SELECT學號,姓名,出生年月FROM學生檔案WHERE姓名LIKE"王%"4.統(tǒng)計函數(shù)SELECT語句不僅具備一般的查詢功能,還具有統(tǒng)計方式的查詢功能,比如查詢學生的平均成績,學生人數(shù)等。SQL提供的統(tǒng)計函數(shù)有:(1)COUNT():計數(shù);(2)SUM():求和;(3)AVG():求平均值;(4)MAX():求最大值;(5)MIN():求最小值。這些函數(shù)可以在SELECT語句中對查詢結(jié)果進行統(tǒng)計計算【例5-22】查詢“學生檔案”表中女生的人數(shù)。SELECTCOUNT(*)AS女生人數(shù)FROM學生檔案WHERE性別="女"5.高級查詢(1)分組查詢分組查詢是把待查詢的數(shù)據(jù)按某種方式分組,然后對分組后的數(shù)據(jù)進行查詢操作。SELECT語句的GROUPBY子句用來實現(xiàn)分組查詢,還可配合HAVING短語對分組后的待查詢數(shù)據(jù)設(shè)置過濾條件,即只對分組后滿足HAVING<條件>的數(shù)據(jù)記錄進行查詢操作?!纠?-23】查詢“學生檔案”表中來自不同地方的學生人數(shù)SELECT籍貫,COUNT(*)AS人數(shù)FROM學生檔案GROUPBY籍貫【例5-24】查詢“學生檔案”表中來自陜西和湖北的學生人數(shù)。SELECT籍貫,COUNT(*)AS人數(shù)FROM學生檔案GROUPBY籍貫;HAVING籍貫="陜西"OR籍貫="湖北"(2)排序通過SELECT語句,還可以對查詢的結(jié)果進行排序,這樣更便于用戶觀察查詢的結(jié)果。SELECT語句的ORDERBY子句用來實現(xiàn)查詢結(jié)果的排序功能?!纠?-26】查詢“學生檔案”表中的所有記錄,查詢結(jié)果按出生年月升序排列。SELECT*FROM學生檔案ORDERBY出生年月【例5-27】計算每名同學的總成績,并按總成績的降序排列,如圖5-23所示。SELECT學號,姓名,sum(成績)AS總成績FROM成績表GROUPBY學號ORDERBY總成績DESC【例5-28】查詢“學生檔案”表中的所有記錄,首先按“性別”的降序排列,如果性別相同,再按“出生年月”的升序排列。SELECT*FROM學生檔案ORDERBY性別DESC,出生年月(3)簡單的聯(lián)接查詢聯(lián)接是關(guān)系的基本運算之一。聯(lián)接查詢是一種基于多個關(guān)系的查詢,即查詢的結(jié)果出自多個表。實現(xiàn)簡單的聯(lián)接查詢的方法是在WHERE后面給出聯(lián)接條件,聯(lián)接條件是兩個表的公共字段值相等,也就是說,進行聯(lián)接查詢的兩個表必須要存在公共字段?!纠?-29】查詢商務秘書系學生的院系名稱、學號、姓名、性別、出生年月和籍貫,如圖5-24所示。SELECTA.院系名稱,B.學號,B.姓名,B.性別,B.出生年月,B.籍貫FROM院系信息A,學生檔案BWHEREA.院系代碼=B.院系代碼ANDA.院系名稱="商務秘書系"(4)嵌套查詢嵌套查詢與簡單的聯(lián)接查詢的相同之處在于查詢的條件都涉及多個表,不同之處在于嵌套查詢的結(jié)果出自一個表而非多個表?!纠?-30】查詢學生數(shù)據(jù)庫中成績不及格的學生的學號、姓名和班級信息。SELECT學號,姓名,班級FROM學生檔案WHERE學號IN(SELECT學號FROM成績表WHERE成績<60)說明:①本例中含有兩個查詢塊,即內(nèi)層查詢塊和外層查詢塊,內(nèi)層查詢塊的功能為在“成績表”中查詢成績不及格的學生的學號,外層查詢塊利用內(nèi)層查詢塊的結(jié)果進一步在“學生檔案”表中查詢這些學生的學號、姓名和班級信息。②IN的作用相當于集合運算符∈(包含于)。(5)利用空值(.NULL.)查詢在VFP中有兩個容易混淆的概念,空值和“空”值。所謂“空”值,是指該字段沒有輸入任何值,“空”值依字段的數(shù)據(jù)類型不同而不同,對于字符型來說,“空”值就是空格或空串;對于數(shù)值型來說,“空”值就是0;對于邏輯型來說,“空”值就是.F.。所謂空值(.NULL.)是一個特定的值,是一個需要輸入的值,其含義是目前尚待確定的值。SELECT支持利用空值進行查詢。因為空值不是一個確定的值,查詢是否為空值時要使用“ISNULL”,而不能使用“=NULL”。(6)顯示部分結(jié)果當查詢結(jié)果包含的記錄數(shù)較多時,可以只顯示部分記錄。若只需顯示前幾條記錄時,可以在SELECT語句中使用TOPn進行查詢,n為1至32767間的整數(shù),作用為只顯示前n條記錄;當使用TOPnPERCENT時,n為0.01至99.99之間的實數(shù),作用為顯示結(jié)果中前百分之n的記錄,TOPn[PERCENT]短語要與ORDERBY子句同時使用才有效?!纠?-34】查詢學生成績表中總成績最高的三名學生。SELECTTOP3學號,姓名,SUM(成績)AS總成績FROM成績表GROUPBY學號ORDERBY總成績DESC(7)定制查詢的輸出可以在SELECT語句中使用[INTO<目標>]來控制查詢結(jié)果的輸出去向,下面介紹兩種特殊的用法。①將查詢結(jié)果存放到數(shù)組中INTOARRAY<數(shù)組名>可以將查詢結(jié)果存放到數(shù)組中。一般情況下,存放結(jié)果的數(shù)組為二維數(shù)組,每行為一條記錄,每列對應一個字段,將查詢結(jié)果存放在數(shù)組中,使得在程序中使用數(shù)據(jù)更加方便。②將查詢結(jié)果存放到臨時文件中INTOCURSOR<文件名>可以將查詢結(jié)果存放到臨時的表文件中。所謂臨時表就是一個只讀的.dbf文件,查詢結(jié)束后該臨時文件自動打開成為當前表,可以象一般的表文件一樣使用,當關(guān)閉此文件時該文件會自動刪除。(8)超聯(lián)接查詢在VisualFoxPro中,支持SQL的超聯(lián)接查詢,格式如下:SELECT<……>FROM<表名>[INNER]|LEFT|RIGHT|FULLJOIN<表名>ON<聯(lián)接條件>WHERE<……>【例5-37】從學生數(shù)據(jù)庫中查詢學生的學號、姓名、班級、和成績。SELECT學生檔案.學號,學生檔案.姓名,學生檔案.班級,成績表.成績FROM學生檔案INNERJOIN成績表ON學生檔案.學號=成績表.學號上面的查詢語句作用等價于:SELECT學生檔案.學號,學生檔案.姓名,學生檔案.班級,成績表.成績FROM學生檔案,成績表WHERE學生檔案.學號=成績表.學號5.3視圖

視圖提供了一種存取或編輯存儲在多個相關(guān)文件中數(shù)據(jù)的方法。使用視圖能夠從表中提取一組記錄,改變這些記錄的值,并將改變后的值存入表中。視圖提取數(shù)據(jù)的來源可以是本地表、其它視圖、存儲在服務器上的表或遠程數(shù)據(jù)源。根據(jù)數(shù)據(jù)源的不同,VisualFoxPro中的視圖分為本地視圖和遠程視圖。使用當前數(shù)據(jù)庫中的表建立的視圖稱為本地視圖,使用當前數(shù)據(jù)庫以外的數(shù)據(jù)源建立的視圖稱為遠程視圖。5.3.1視圖的基本概念1.視圖的概念視圖是一個虛擬表,它的數(shù)據(jù)來源于數(shù)據(jù)庫表,這些數(shù)據(jù)在數(shù)據(jù)庫中并不實際存儲,僅在數(shù)據(jù)庫的數(shù)據(jù)字典中存儲視圖的定義,但視圖一經(jīng)定義,就成為數(shù)據(jù)庫的一個組成部分。對視圖可以進行查詢操作,也可以利用它實現(xiàn)對數(shù)據(jù)庫表的修改。視圖兼有“表”和“查詢”兩者的特點。它可以象查詢一樣進行數(shù)據(jù)的檢索,也可以瀏覽和修改表中數(shù)據(jù),但視圖在使用上比表更靈活。2.建立視圖的優(yōu)點(1)保障數(shù)據(jù)的安全性和完整性。(2)簡化對數(shù)據(jù)庫的操作。(3)從多角度看待同樣的數(shù)據(jù)。5.3.2創(chuàng)建本地視圖在VisualFoxPro中創(chuàng)建視圖是通過“視圖設(shè)計器”完成的。1.打開視圖設(shè)計器2.視圖設(shè)計器視圖設(shè)計器與查詢設(shè)計器界面非常相似,設(shè)計方法也基本相同,其不同點主要有以下幾個方面。(1)查詢設(shè)計器的結(jié)果是將查詢以.qpr文件的形式保存在磁盤上;而視圖設(shè)計完成后,是保存在數(shù)據(jù)庫文件中的,沒有生成獨立的文件。(2)查詢可以單獨運行,而視圖的運行依賴于數(shù)據(jù)庫中的數(shù)據(jù)表,它本身并不保存數(shù)據(jù),它的數(shù)據(jù)來源于數(shù)據(jù)表。(3)查詢不可更新,視圖可以更新數(shù)據(jù)。所以,視圖設(shè)計器相比查詢設(shè)計器增加了一個“更新條件”選項卡。(4)“視圖設(shè)計器”工具欄中沒有“查詢?nèi)ハ颉卑粹o,即視圖不能設(shè)置查詢?nèi)ハ颉?.使用視圖(1)打開視圖的方法在數(shù)據(jù)庫設(shè)計器中,在視圖窗口的標題欄上單擊鼠標的右鍵,從彈出的快捷菜單中選擇“修改”,即可彈出視圖設(shè)計器窗口。(2)運行視圖的方法運行視圖的方法有以下三種:①打開數(shù)據(jù)庫后,使用命令:USE<視圖名>②雙擊數(shù)據(jù)庫設(shè)計器窗口中視圖窗口的標題欄。③在視圖設(shè)計器中打開

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論