VFP課件之ch4查詢和視_第1頁
VFP課件之ch4查詢和視_第2頁
VFP課件之ch4查詢和視_第3頁
VFP課件之ch4查詢和視_第4頁
VFP課件之ch4查詢和視_第5頁
已閱讀5頁,還剩43頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

查詢和視圖

第4章4.1查詢和視圖概述4.2

查詢的創(chuàng)建和使用4.3

SELECT–SQL語句4.4視圖的創(chuàng)建和使用結(jié)束放映?YES(是)NO(否)4.1查詢和視圖概述查詢的本質(zhì)視圖的本質(zhì)查詢與視圖的比較4.2查詢的創(chuàng)建和使用創(chuàng)建查詢的方法創(chuàng)建查詢的步驟用查詢設(shè)計器創(chuàng)建查詢用命令方式創(chuàng)建和運行查詢交叉表查詢4.3SELECT-SQL語句SQL語言概述SELECT-SQL命令SELECT-SQL應(yīng)用舉例用視圖設(shè)計器創(chuàng)建本地視圖用命令方式創(chuàng)建本地視圖視圖的使用4.4視圖的創(chuàng)建和使用

“查詢”(Query),是指向一個數(shù)據(jù)庫發(fā)出的檢索信息的請求,它根據(jù)給定的條件提取特定的記錄。查詢的運行結(jié)果是一個基于表和視圖的動態(tài)的數(shù)據(jù)集合。查詢的數(shù)據(jù)源可以是一個或多個相關(guān)的自由表、數(shù)據(jù)庫表或視圖。一個查詢可以用一條SELECT-SQL語句來完成。一個查詢可保存為一個擴展名為.QPR的文件即查詢文件。查詢文件中保存的是實現(xiàn)查詢的SELECT-SQL命令,而非查詢的結(jié)果。查詢和視圖設(shè)計器在本質(zhì)上都是SELECT-SQL命令的可視化設(shè)計方法。查

質(zhì)

1.用查詢向?qū)Щ虿樵冊O(shè)計器開始建立查詢

2.選擇包含要搜索信息的表或視圖

3.定義查詢結(jié)果的顯示順序及查詢條件

4.設(shè)置用于組織查詢結(jié)果的排序、分組依據(jù)

5.選擇查詢結(jié)果的輸出去向,如表、報表等

6.運行查詢創(chuàng)

驟創(chuàng)建查詢的方法1.使用界面方法

1)查詢向?qū)?/p>

2)查詢設(shè)計器用createquery命令打開查詢設(shè)計器窗口。選擇“文件”菜單中的“新建”或常用工具欄中的“新建”按鈕。在“項目管理器”窗口中的“數(shù)據(jù)”選項卡中選擇“查詢”,并選擇“新建”按鈕。2.命令方法用modifycommand命令進入編輯窗口;

輸入select-sql語句。用查詢設(shè)計器創(chuàng)建查

詢創(chuàng)建基于一個表的查詢創(chuàng)建多表查詢

【例1】查詢教師表中工齡滿30年的教工的工號和姓名,查詢結(jié)果按工號的降序排列,顯示在瀏覽窗口中。

創(chuàng)建基于一個表的查詢注意:在使用查詢設(shè)計器前,先打開數(shù)據(jù)庫!1、打開查詢設(shè)計器2、“添加表或視圖”3、定義查詢的輸出內(nèi)容4、設(shè)置篩選條件5、設(shè)置排序依據(jù)6、保存查詢文件7、運行查詢文件

創(chuàng)建基于一個表的查詢

【例2】基于學(xué)生表,查詢各班級的男女生人數(shù)及各自所占比例,要求輸出字段為:班級(bjbh)、男生人數(shù)、男生比例、女生人數(shù)、女生比例,按班級的升序排列,在主窗口中顯示前30%的記錄。創(chuàng)建基于一個表的查詢1、打開查詢設(shè)計器2、添加表或視圖3、定義查詢的輸出內(nèi)容4、設(shè)置分組依據(jù)5、設(shè)置排序依據(jù)6、對查詢結(jié)果的其它設(shè)置7、設(shè)定查詢?nèi)ハ?、保存查詢文件9、運行查詢文件

創(chuàng)建基于一個表的查詢?yōu)g覽:在瀏覽窗口顯示查詢結(jié)果臨時表:在臨時只讀表中存儲查詢結(jié)果

INTOCURSOR

TEMP01表:將查詢結(jié)果作為表保存

INTOTABLE

TAB01.DBF

圖形:使查詢結(jié)果用于MicrosoftGraph屏幕:在VFP主窗口或當前窗口中顯示查詢結(jié)果

TOSCREEN/TOPRINTER/TOFILE

F01.TXT報表:將結(jié)果輸出到報表文件(.FRX)標簽:將結(jié)果輸出至標簽文件(.LBX)“查詢?nèi)ハ颉睂υ捒颉安樵內(nèi)ハ颉睂υ捒颉疤砑颖砘蛞晥D”對話框查詢設(shè)計器的“雜項”選項卡

【例3】查詢成績在80分以上(含80分)的課程代號、課程名、學(xué)生學(xué)號和成績,且要求結(jié)果按課程代號升序排序,課程相同時按成績的降序排序。(P111例4.1)創(chuàng)建基于多個表的查詢

1、添加數(shù)據(jù)源:KC表和CJ表

2、確定聯(lián)接類型

3、設(shè)置輸出內(nèi)容

4、設(shè)置篩選條件

5、設(shè)置排序依據(jù)創(chuàng)建基于多個表的查詢創(chuàng)建基于多個表的查詢

【例4】基于課程表和成績表,查詢每門課選課人數(shù)、平均成績、最高分和最低分,查詢輸出字段包含課程代號、課程名、選課人數(shù)、平均成績、最高分和最低分,且按平均成績降序排列。(P114例4.2)若加上篩選條件:平均成績在70分以上,應(yīng)如果實現(xiàn)?創(chuàng)建基于多個表的查詢

【例5】基于教師表和任課表,查詢沒有授課任務(wù)的教師名單。兩種方法:

1、左聯(lián)接

2、子查詢

一、創(chuàng)建查詢文件

1、在命令窗口輸入命令:

MODIFYCOMMAND文件名.QPR2、在編輯窗口輸入一條SELECT-SQL命令

3、關(guān)閉編輯窗口保存查詢文件二、用命令方式運行查詢文件

在命令窗口輸入命令:

DO文件名.QPR

注意:查詢文件的擴展名.qpr

不可以省略

用命令方式創(chuàng)建和運行查詢文件

內(nèi)部聯(lián)接(INNERJOIN)

左聯(lián)接(LEFTJOIN)

右聯(lián)接(RIGHTJOIN)

完全聯(lián)接(FULLJOIN)

聯(lián)接類型

基于成績表,查詢每個學(xué)生的成績,要求:每個學(xué)生的各門課程的成績在一行上,如下表所示。學(xué)號課程1課程2課程3課程4課程5課程6總分950201856591838777488950102767884659267462…………………………………………交叉表查詢ODBC數(shù)據(jù)源:ODBC(開放式數(shù)據(jù)互連)是一種用于數(shù)據(jù)庫服務(wù)器的標準協(xié)議,通過ODBC可以訪問多種數(shù)據(jù)庫中的數(shù)據(jù),可以安裝多種數(shù)據(jù)庫的ODBC驅(qū)動程序,從而使VFP可以與該數(shù)據(jù)庫相連,訪問數(shù)據(jù)庫中的數(shù)據(jù)。遠程視圖:使用遠程ODBC數(shù)據(jù)源。本地視圖:使用VFP的視圖或表作為數(shù)據(jù)源。視圖的本質(zhì)可以將一個或多個遠程視圖添加到本地視圖中,以便能在同一個視圖中同時訪問VFP數(shù)據(jù)和遠程ODBC數(shù)據(jù)源中的數(shù)據(jù)

一、查詢和視圖的共同之處

不論是查詢還是視圖,其本質(zhì)都是靠一條SELECT–SQL命令從指定的數(shù)據(jù)源中獲取所需信息。

二、查詢和視圖的不同之處

1、使用查詢,得到的是一組只讀型的檢索結(jié)果;而使用視圖,可以從表中提取一組記錄,改變這些記錄的值,并把更新結(jié)果送回到源表中。

2、視圖可以作為查詢和視圖的數(shù)據(jù)源;但查詢不可以作為數(shù)據(jù)源。

3、查詢以命令文件形式獨立存儲;而視圖必須保存在數(shù)據(jù)庫中。

4、用MODIFYCOMMAND

命令創(chuàng)建查詢文件;用CREATESQLVIEW

命令創(chuàng)建視圖。

5、視圖是數(shù)據(jù)庫的一部分,是一個虛擬的表。用DO

命令運行查詢文件;用

USE

命令查看視圖。查

的比較

在“項目管理器”中選擇一個數(shù)據(jù)庫,選擇“本地視圖”,然后選擇“新建”按鈕,打開“視圖設(shè)計器”。或者在數(shù)據(jù)庫已打開時,使用CREATESQLVIEW命令顯示“視圖設(shè)計器”。使用視圖設(shè)計器基本上與使用查詢設(shè)計器一樣,但視圖設(shè)計器多一個“更新條件”選項卡,它可以控制更新。使用視圖設(shè)計器創(chuàng)建本地視圖

【例1】創(chuàng)建基于xs、kc、cj表,并可修改

cj表中的cj字段的視圖ST01。

1、打開視圖設(shè)計器,新建視圖,依次加入xs、cj、kc三個表作為數(shù)據(jù)源,設(shè)置聯(lián)接條件及聯(lián)接方式,選擇輸出字段。

2、進入“更新條件”選項卡使用視圖更新基表數(shù)據(jù)注意:1、要使得視圖中當前記錄的成績字段能正確更新cj表中相應(yīng)記錄的成績字段,必須設(shè)置視圖中cj表的學(xué)號(xh)和課程代號(kcdh)為關(guān)鍵字段。

2、視圖運行后,在瀏覽窗口修改cj字段值,修改后必須使記錄指針離開這條記錄,才能在基表中看到修改后的結(jié)果。

【例2】基于CJ表創(chuàng)建一個參數(shù)化視圖,根據(jù)提供的課程代號下載該課程的成績記錄。

1、新建一視圖,加入cj表作為數(shù)據(jù)源,選擇所有的可用字段作為輸出字段。

2、進入“篩選”選項卡,插入一行,選擇字段為“cj.kcdh”,在“實例”框中輸入問號及參數(shù)名“?課程代號”。

注意:

“?”必須是半角的“?”與“課程代號”之間不能有空格。創(chuàng)建參數(shù)化視圖

視圖的參數(shù)可以是一個表達式,計算出來的值將作為視圖SQL語句的組成部分。若計算無效,VFP將顯示“操作符/操作數(shù)類型不匹配”。

“視圖參數(shù)”對話框命令格式:

CREATESQLVIEW<視圖名>;

AS<SQLSELECT

語句>【例3】用命令方式創(chuàng)建包括JS表中所有字段的視圖JS_VIEW。

CREATESQLVIEWJS_VIEW; ASSELECT*FROMsjk!js【例4】基于CJ表用命令創(chuàng)建一個參數(shù)化視圖,根據(jù)課程代號下載該課程的成績。

CREATESQLVIEWCJ_KCDH;AS

SELECT*FROMsjk!cj;WHEREcj.kcdh=?課程代號用命令方式創(chuàng)建視圖

1、訪問視圖

視圖是一個虛擬的表,所以可以用USE命令打開和關(guān)閉表,多個視圖可以在多個工作區(qū)打開,在瀏覽窗口顯示視圖記錄;與表一樣視圖可以作為查詢、視圖、表單、報表、標簽等的數(shù)據(jù)源。

(1)視圖的打開、瀏覽、關(guān)閉

OPENDATABASESJK

USEJS_VIEW

BROWSE

USEJS_VIEWIN0

USE

USEINJS_VIEW視

使

若要不下載數(shù)據(jù)再次使用視圖,在USE命令中,使用

NOREQUERY子句?;蛘咴赨SE命令中,使用AGAIN子句。

USEJS_VIEWBROWSESELECT0USEJS_VIEWNOREQUERYBROWSE可以使用帶NODATA

子句的USE命令,僅打開視圖并顯示視圖結(jié)構(gòu)

USEJS_VIEWNODATABROWSELISTSTRUCTURE視

使

用(2)關(guān)閉視圖的基表在使用視圖時,自動打開的本地基表;但關(guān)閉視圖時不會自動關(guān)閉基表,必須另用命令關(guān)閉它們。

2、視圖的修改、重命名和刪除

MODIFYVIEWJS_VIEWRENAMEVIEWJS_VIEW

TOVIEW01DELETEVIEWVIEW01

使

3、用數(shù)據(jù)字典定制視圖

為視圖字段設(shè)置屬性界面方式:

打開視圖設(shè)計器/進入“字段”選項卡/選定某字段/按“屬性”按鈕用=DBSETPROP()命令

=DBSETPROP("ST01.CJ","FIELD";"RULEEXPRESSION","CJ>=60")

=DBGETPROP("ST01.CJ","FIELD";"RULEEXPRESSION")

使

用視

使

4、集成視圖

一個基于視圖的視圖,或基于集成了本地表、本地視圖或遠程視圖的視圖,被稱為多級視圖。

SQL(StructuredQueryLanguage,結(jié)構(gòu)化查詢語言)是美國國家標準局ANSI確認的關(guān)系數(shù)據(jù)庫語言的標準。VFP的SQL命令使用Rushmore技術(shù)來優(yōu)化性能,并且一個SQL命令可以代替多個VFP命令。

VFP支持如下SQL命令:

1、SELECT-SQL5、DELETE-SQL2、ALTERTABLE-SQL6、INSERT-SQL3、CREATECURSOR-SQL7、UPDATE-SQL4、CREATETABLE-SQL

SQL語

述SELECT-SQL命令的語法結(jié)構(gòu):

SELECT<輸出項表>

FROM<數(shù)據(jù)源表>WHERE<篩選條件/聯(lián)接條件>GROUPBY<分組依據(jù)>……HAVING<分組結(jié)果篩選條件>ORDERBY<排序依據(jù)>into|to查詢?nèi)ハ?/p>

其中SELECT子句和FROM子句為必選項

SELECT-SQL命

1.基于單個表的查詢示例P124【例1】查詢JS表中所有教師的工號和姓名

SELECTjs.gh,js.xmFROMsjk!js【例2】查詢XS表中學(xué)號以“03”開頭的學(xué)生情況。

SELECT*;FROMsjk!xs;WHERElike("03*",xh)【例3】查詢CJ表中課程代號為“06”的學(xué)生的學(xué)號和成績,且要求查詢結(jié)果按成績降序排列。

SELECTcj.xh,cj.cj;FROMcj;WHEREcj.kcdh="06";ORDERBYcjDESCSELECT-SQL應(yīng)用舉例

2.基于多個表的查詢示例

【例4】基于XS表和ZY表,查詢學(xué)生的學(xué)號、姓名和專業(yè)名稱。

SELECTxs.xh,xs.xm,zy.zymc;FROMsjk!xsINNERJOINsjk!zy; ONxs.zydh=zy.zydh;

或:SELECTxs.xh,xs.xm,zy.zymc; FROMsjk!xs,sjk!zy; WHERExs.zydh=zy.zydh

【例5】基于CJ表和XS表,查詢有不及格課程成績的學(xué)生的學(xué)號和姓名,且有多門課程不及格的學(xué)生只顯示一次。

SELECTDISTINCTcj.xh,xs.xm;FROMsjk!xsinnerjoinsjk!cjonxs.xh=cj.xh;WHEREcj.cj<60

SELECT-SQL應(yīng)用舉例3.含有計算字段的查詢

【例6】基于CJ表,查詢各門課程的最高分,要求輸出課程代號和最高分。SELECTcj.kcdhas課程代號,max(cj.cj)as最高分;FROMsjk!cj;GROUPBYkcdh

SELECT-SQL應(yīng)用舉例

SELECT-SQL應(yīng)用舉例【例7】基于CJ表和KC表,查詢每門課程的課程代號、課程名稱、人數(shù)、平均分、最高分和最低分,并把查詢結(jié)果保存到kc_maxcj.dbf表文件中。SELECTcj.kcdhas課程代號,kc.kcmas課程名稱,;count(*)as人數(shù),avg(cj.cj)as平均分,;

max(cj.cj)as最高分,min(cj.cj)as最低分;FROMsjk!kcinnerjoinsjk!cj;oncj.kcdh=kc.kcdh;GROUPBYcj.kcdh;INTOTABLEkc_maxcj改變輸出去向后,必須先執(zhí)行查詢再查看查詢結(jié)果,且查詢結(jié)果不在瀏覽窗口顯示。4.子查詢示例

【例8】基于JS表、XIM表和RK表,查詢已擔任課程的教師的姓名和系名。SELECTjs.xm

,xim.ximing;FROMsjk!ximinnerjoinsjk!js;onxim.xdh=js.xdh;WHEREjs.ghIN;

(SELECTrk.ghFROMsjk!rk)

SELECT-SQL應(yīng)用舉例

5.組合查詢示例【例9】基于js表和xs表,查詢?nèi)熒麊巍R筝敵鲎侄螢椋合得?、類別(教師或?qū)W生)、姓名和性別,并按系名排序。

SELECTxim.ximingas系名,"教師"as類別,;

js.xmas姓名,js.xbas性別;FROMsjk!ximinnerjoinsjk!js;onxim.xdh=js.xdh;UNION;SELECTxim.ximing

as系名,"學(xué)生"as類別,;

xs.xmas姓名,xs.xbas性別;FROMsjk!xsinnerjoinsjk!bj

溫馨提示

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

評論

0/150

提交評論