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

下載本文檔

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

文檔簡(jiǎn)介

查詢和視圖

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

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

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

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

質(zhì)“查詢”(Query),是指向一個(gè)數(shù)據(jù)庫發(fā)出的檢索信7

1.用查詢向?qū)Щ虿樵冊(cè)O(shè)計(jì)器開始建立查詢2.選擇包含要搜索信息的表或視圖3.定義查詢結(jié)果的顯示順序及查詢條件4.設(shè)置用于組織查詢結(jié)果的排序、分組依據(jù)5.選擇查詢結(jié)果的輸出去向,如表、報(bào)表等6.運(yùn)行查詢創(chuàng)

驟1.用查詢向?qū)Щ虿樵冊(cè)O(shè)計(jì)器開始建立查詢創(chuàng)建查詢的8創(chuàng)建查詢的方法1.使用界面方法

1)查詢向?qū)?)查詢?cè)O(shè)計(jì)器用createquery命令打開查詢?cè)O(shè)計(jì)器窗口。選擇“文件”菜單中的“新建”或常用工具欄中的“新建”按鈕。在“項(xiàng)目管理器”窗口中的“數(shù)據(jù)”選項(xiàng)卡中選擇“查詢”,并選擇“新建”按鈕。2.命令方法用modifycommand命令進(jìn)入編輯窗口;輸入select-sql語句。創(chuàng)建查詢的方法1.使用界面方法9用查詢?cè)O(shè)計(jì)器創(chuàng)建查

詢創(chuàng)建基于一個(gè)表的查詢創(chuàng)建多表查詢用查詢?cè)O(shè)計(jì)器創(chuàng)建查詢創(chuàng)建基于一個(gè)表的查詢10

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

創(chuàng)建基于一個(gè)表的查詢注意:在使用查詢?cè)O(shè)計(jì)器前,先打開數(shù)據(jù)庫!【例1】查詢教師表中工齡滿30年的教工的工號(hào)和姓名,查111、打開查詢?cè)O(shè)計(jì)器2、“添加表或視圖”3、定義查詢的輸出內(nèi)容4、設(shè)置篩選條件5、設(shè)置排序依據(jù)6、保存查詢文件7、運(yùn)行查詢文件

創(chuàng)建基于一個(gè)表的查詢1、打開查詢?cè)O(shè)計(jì)器創(chuàng)建基于一個(gè)表的查詢12

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

創(chuàng)建基于一個(gè)表的查詢1、打開查詢?cè)O(shè)計(jì)器創(chuàng)建基于一個(gè)表的查詢14瀏覽:在瀏覽窗口顯示查詢結(jié)果臨時(shí)表:在臨時(shí)只讀表中存儲(chǔ)查詢結(jié)果

INTOCURSOR

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

INTOTABLE

TAB01.DBF

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

F01.TXT報(bào)表:將結(jié)果輸出到報(bào)表文件(.FRX)標(biāo)簽:將結(jié)果輸出至標(biāo)簽文件(.LBX)“查詢?nèi)ハ颉睂?duì)話框?yàn)g覽:在瀏覽窗口顯示查詢結(jié)果“查詢?nèi)ハ颉睂?duì)話框15“查詢?nèi)ハ颉睂?duì)話框“查詢?nèi)ハ颉睂?duì)話框16“添加表或視圖”對(duì)話框“添加表或視圖”對(duì)話框17查詢?cè)O(shè)計(jì)器的“雜項(xiàng)”選項(xiàng)卡查詢?cè)O(shè)計(jì)器的“雜項(xiàng)”選項(xiàng)卡18

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

1、添加數(shù)據(jù)源:KC表和CJ表2、確定聯(lián)接類型3、設(shè)置輸出內(nèi)容4、設(shè)置篩選條件5、設(shè)置排序依據(jù)創(chuàng)建基于多個(gè)表的查詢1、添加數(shù)據(jù)源:KC表和CJ表創(chuàng)建基于多個(gè)20創(chuàng)建基于多個(gè)表的查詢

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

【例5】基于教師表和任課表,查詢沒有授課任務(wù)的教師名單。兩種方法:1、左聯(lián)接2、子查詢創(chuàng)建基于多個(gè)表的查詢【例5】基于教師表和任課表,查詢沒22

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

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

MODIFYCOMMAND文件名.QPR2、在編輯窗口輸入一條SELECT-SQL命令3、關(guān)閉編輯窗口保存查詢文件二、用命令方式運(yùn)行查詢文件

在命令窗口輸入命令:

DO文件名.QPR注意:查詢文件的擴(kuò)展名.qpr不可以省略

用命令方式創(chuàng)建和運(yùn)行查詢文件一、創(chuàng)建查詢文件用命令方式創(chuàng)建和運(yùn)行查詢文件23

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

左聯(lián)接(LEFTJOIN)

右聯(lián)接(RIGHTJOIN)

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

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

基于成績(jī)表,查詢每個(gè)學(xué)生的成績(jī),要求:每個(gè)學(xué)生的各門課程的成績(jī)?cè)谝恍猩?,如下表所示。學(xué)號(hào)課程1課程2課程3課程4課程5課程6總分950201856591838777488950102767884659267462…………………………………………交叉表查詢基于成績(jī)表,查詢每個(gè)學(xué)生的成績(jī),要求:學(xué)號(hào)課25VFP課件-之ch4查詢和視圖26ODBC數(shù)據(jù)源:ODBC(開放式數(shù)據(jù)互連)是一種用于數(shù)據(jù)庫服務(wù)器的標(biāo)準(zhǔn)協(xié)議,通過ODBC可以訪問多種數(shù)據(jù)庫中的數(shù)據(jù),可以安裝多種數(shù)據(jù)庫的ODBC驅(qū)動(dòng)程序,從而使VFP可以與該數(shù)據(jù)庫相連,訪問數(shù)據(jù)庫中的數(shù)據(jù)。遠(yuǎn)程視圖:使用遠(yuǎn)程ODBC數(shù)據(jù)源。本地視圖:使用VFP的視圖或表作為數(shù)據(jù)源。視圖的本質(zhì)可以將一個(gè)或多個(gè)遠(yuǎn)程視圖添加到本地視圖中,以便能在同一個(gè)視圖中同時(shí)訪問VFP數(shù)據(jù)和遠(yuǎn)程ODBC數(shù)據(jù)源中的數(shù)據(jù)ODBC數(shù)據(jù)源:ODBC(開放式數(shù)據(jù)互連)是一種用27

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

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

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

1、使用查詢,得到的是一組只讀型的檢索結(jié)果;而使用視圖,可以從表中提取一組記錄,改變這些記錄的值,并把更新結(jié)果送回到源表中。2、視圖可以作為查詢和視圖的數(shù)據(jù)源;但查詢不可以作為數(shù)據(jù)源。3、查詢以命令文件形式獨(dú)立存儲(chǔ);而視圖必須保存在數(shù)據(jù)庫中。

4、用MODIFYCOMMAND命令創(chuàng)建查詢文件;用CREATESQLVIEW命令創(chuàng)建視圖。5、視圖是數(shù)據(jù)庫的一部分,是一個(gè)虛擬的表。用DO命令運(yùn)行查詢文件;用USE命令查看視圖。查

的比較一、查詢和視圖的共同之處查詢與視圖28

在“項(xiàng)目管理器”中選擇一個(gè)數(shù)據(jù)庫,選擇“本地視圖”,然后選擇“新建”按鈕,打開“視圖設(shè)計(jì)器”。或者在數(shù)據(jù)庫已打開時(shí),使用CREATESQLVIEW命令顯示“視圖設(shè)計(jì)器”。使用視圖設(shè)計(jì)器基本上與使用查詢?cè)O(shè)計(jì)器一樣,但視圖設(shè)計(jì)器多一個(gè)“更新條件”選項(xiàng)卡,它可以控制更新。使用視圖設(shè)計(jì)器創(chuàng)建本地視圖在“項(xiàng)目管理器”中選擇一個(gè)數(shù)據(jù)庫,選擇“本地視圖”29【例1】創(chuàng)建基于xs、kc、cj表,并可修改

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

1、打開視圖設(shè)計(jì)器,新建視圖,依次加入xs、cj、kc三個(gè)表作為數(shù)據(jù)源,設(shè)置聯(lián)接條件及聯(lián)接方式,選擇輸出字段。2、進(jìn)入“更新條件”選項(xiàng)卡使用視圖更新基表數(shù)據(jù)注意:1、要使得視圖中當(dāng)前記錄的成績(jī)字段能正確更新cj表中相應(yīng)記錄的成績(jī)字段,必須設(shè)置視圖中cj表的學(xué)號(hào)(xh)和課程代號(hào)(kcdh)為關(guān)鍵字段。2、視圖運(yùn)行后,在瀏覽窗口修改cj字段值,修改后必須使記錄指針離開這條記錄,才能在基表中看到修改后的結(jié)果?!纠?】創(chuàng)建基于xs、kc、cj表,并可修改cj表30

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

1、新建一視圖,加入cj表作為數(shù)據(jù)源,選擇所有的可用字段作為輸出字段。2、進(jìn)入“篩選”選項(xiàng)卡,插入一行,選擇字段為“cj.kcdh”,在“實(shí)例”框中輸入問號(hào)及參數(shù)名“?課程代號(hào)”。

注意:

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

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

“視圖參數(shù)”對(duì)話框視圖的參數(shù)可以是一個(gè)表達(dá)式,計(jì)算出來的值將作32命令格式:

CREATESQLVIEW<視圖名>;

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

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

CREATESQLVIEWCJ_KCDH;AS

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

1、訪問視圖

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

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

OPENDATABASESJK

USEJS_VIEW

BROWSE

USEJS_VIEWIN0

USE

USEINJS_VIEW視

使

用1、訪問視圖視圖的使用34

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

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

USEJS_VIEWBROWSESELECT0USEJS_VIEWNOREQUERYBROWSE可以使用帶NODATA子句的USE命令,僅打開視圖并顯示視圖結(jié)構(gòu)

USEJS_VIEWNODATABROWSELISTSTRUCTURE視

使

用若要不下載數(shù)據(jù)再次使用視圖,在USE命令中,使用N35(2)關(guān)閉視圖的基表在使用視圖時(shí),自動(dòng)打開的本地基表;但關(guān)閉視圖時(shí)不會(huì)自動(dòng)關(guān)閉基表,必須另用命令關(guān)閉它們。

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

MODIFYVIEWJS_VIEWRENAMEVIEWJS_VIEW

TOVIEW01DELETEVIEWVIEW01

使

用(2)關(guān)閉視圖的基表視圖的使用36

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

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

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

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

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

使

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

使

4、集成視圖

一個(gè)基于視圖的視圖,或基于集成了本地表、本地視圖或遠(yuǎn)程視圖的視圖,被稱為多級(jí)視圖。

視圖的使用4、集成視圖38

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

VFP支持如下SQL命令:

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

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

SELECT<輸出項(xiàng)表>

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

其中SELECT子句和FROM子句為必選項(xiàng)SELECT-SQL命

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

1.基于單個(gè)表的查詢示例P124【例1】查詢JS表中所有教師的工號(hào)和姓名

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

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

SELECTcj.xh,cj.cj;FROMcj;WHEREcj.kcdh="06";ORDERBYcjDESCSELECT-SQL應(yīng)用舉例1.基于單個(gè)表的查詢示例P124SELECT-41

2.基于多個(gè)表的查詢示例

【例4】基于XS表和ZY表,查詢學(xué)生的學(xué)號(hào)、姓名和專業(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表,查詢有不及格課程成績(jī)的學(xué)生的學(xué)號(hào)和姓名,且有多門課程不及格的學(xué)生只顯示一次。

SELECTDISTINCTcj.xh,xs.xm;FROMsjk!xsinnerjoinsjk!cjonxs.xh=cj.xh;WHEREcj.cj<60SELECT-SQL應(yīng)用舉例2.基于多個(gè)表的查詢示例SELECT-SQL應(yīng)用舉例423.含有計(jì)算字段的查詢

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

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

SELECT-SQL應(yīng)用舉例【例7】基于CJ表和KC表,查詢每門課程的課程代號(hào)、課程名稱、人數(shù)、平均分、最高分和最低分,并把查詢結(jié)果保存到kc_maxcj.dbf表文件中。SELECTcj.kcdhas課程代號(hào),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í)行查詢?cè)俨榭床樵兘Y(jié)果,且查詢結(jié)果不在瀏覽窗口顯示。SELECT-SQL應(yīng)用舉例【例7】基于C444.子查詢示例

【例8】基于JS表、XIM表和RK表,查詢已擔(dān)任課程的教師的姓名和系名。SELECTjs.xm,xim.ximing;FROMsjk!ximinnerjoinsjk!js;onxim.xdh=js.xdh;WHEREjs.ghIN;

(SELECTrk.ghFROMsjk!rk)

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

4.子查詢示例SELECT-SQL應(yīng)用舉例455.組合查詢示例【例9】基于js表和xs表,查詢?nèi)熒麊?。要求輸出字段為:系名、類別(教師或?qū)W生)、姓名和性別,并按系名排序。

SELECTxim.ximingas系名,"教師"as類別,;js.xmas姓名,js.xbas性別;FROMsjk!ximinnerjoinsjk!js;onxim.xdh=js.xdh;UNION;SELECTxim.ximingas系名,"學(xué)生"as類別,;xs.xmas姓名,xs.xbas性別;FROMsjk!xsinnerjoinsjk!bjinnerjoinsjk!xim;onxim.xdh=bj.xdhonbj.bjbh=xs.bjbh;ORDERBY1SELECT-SQL應(yīng)用舉例

5.組合查詢示例SELECT-SQL應(yīng)用舉例46

【例10】基于cj表,查詢各個(gè)分?jǐn)?shù)段的學(xué)生人數(shù)。要求輸出:分?jǐn)?shù)段類型、人數(shù),按分?jǐn)?shù)段類型降序排序。SELECT"90~100"as分?jǐn)?shù)段類型,count(*)as人數(shù);FROMsjk!cjwherecj.cj>=90;UNION;SELECT"80~89"as分?jǐn)?shù)段類型,count(*)as人數(shù);FROMsjk!cjwherecj.cj>=80andcj.cj<90;UNION;SELECT"70~79"as分?jǐn)?shù)段類型,count(*)as人數(shù);FROMsjk!cjwherecj.cj>=70andcj.cj<80;UNION;SELECT"60~69"as分?jǐn)?shù)段類型,count(*)as人數(shù);FROMsjk!cjwherecj.cj>=60andcj.cj<70;UNION;SELECT"

60以下"as分?jǐn)?shù)段類型,count(*)as人數(shù);FROMsjk!cjwherecj.cj<60;ORDERBY1desc【例10】基于cj表,查詢各個(gè)分?jǐn)?shù)段的學(xué)生人數(shù)。47

【說明】UNION子句遵守下列規(guī)則:不能使用UNION來組合子查詢。兩個(gè)SELECT命令的查詢結(jié)果中的列數(shù)必須相同。兩個(gè)SELECT查詢結(jié)果中的對(duì)應(yīng)列必須有相同的數(shù)據(jù)類型和寬度。只有最后的SELECT中可以包含ORDERBY子句,而且必須按編號(hào)指出所輸出的列。一個(gè)ORDERBY子句,將影響整個(gè)結(jié)果?!菊f明】UNION子句遵守下列規(guī)則:48查詢和視圖

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

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

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

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

質(zhì)“查詢”(Query),是指向一個(gè)數(shù)據(jù)庫發(fā)出的檢索信55

1.用查詢向?qū)Щ虿樵冊(cè)O(shè)計(jì)器開始建立查詢2.選擇包含要搜索信息的表或視圖3.定義查詢結(jié)果的顯示順序及查詢條件4.設(shè)置用于組織查詢結(jié)果的排序、分組依據(jù)5.選擇查詢結(jié)果的輸出去向,如表、報(bào)表等6.運(yùn)行查詢創(chuàng)

驟1.用查詢向?qū)Щ虿樵冊(cè)O(shè)計(jì)器開始建立查詢創(chuàng)建查詢的56創(chuàng)建查詢的方法1.使用界面方法

1)查詢向?qū)?)查詢?cè)O(shè)計(jì)器用createquery命令打開查詢?cè)O(shè)計(jì)器窗口。選擇“文件”菜單中的“新建”或常用工具欄中的“新建”按鈕。在“項(xiàng)目管理器”窗口中的“數(shù)據(jù)”選項(xiàng)卡中選擇“查詢”,并選擇“新建”按鈕。2.命令方法用modifycommand命令進(jìn)入編輯窗口;輸入select-sql語句。創(chuàng)建查詢的方法1.使用界面方法57用查詢?cè)O(shè)計(jì)器創(chuàng)建查

詢創(chuàng)建基于一個(gè)表的查詢創(chuàng)建多表查詢用查詢?cè)O(shè)計(jì)器創(chuàng)建查詢創(chuàng)建基于一個(gè)表的查詢58

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

創(chuàng)建基于一個(gè)表的查詢注意:在使用查詢?cè)O(shè)計(jì)器前,先打開數(shù)據(jù)庫!【例1】查詢教師表中工齡滿30年的教工的工號(hào)和姓名,查591、打開查詢?cè)O(shè)計(jì)器2、“添加表或視圖”3、定義查詢的輸出內(nèi)容4、設(shè)置篩選條件5、設(shè)置排序依據(jù)6、保存查詢文件7、運(yùn)行查詢文件

創(chuàng)建基于一個(gè)表的查詢1、打開查詢?cè)O(shè)計(jì)器創(chuàng)建基于一個(gè)表的查詢60

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

創(chuàng)建基于一個(gè)表的查詢1、打開查詢?cè)O(shè)計(jì)器創(chuàng)建基于一個(gè)表的查詢62瀏覽:在瀏覽窗口顯示查詢結(jié)果臨時(shí)表:在臨時(shí)只讀表中存儲(chǔ)查詢結(jié)果

INTOCURSOR

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

INTOTABLE

TAB01.DBF

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

F01.TXT報(bào)表:將結(jié)果輸出到報(bào)表文件(.FRX)標(biāo)簽:將結(jié)果輸出至標(biāo)簽文件(.LBX)“查詢?nèi)ハ颉睂?duì)話框?yàn)g覽:在瀏覽窗口顯示查詢結(jié)果“查詢?nèi)ハ颉睂?duì)話框63“查詢?nèi)ハ颉睂?duì)話框“查詢?nèi)ハ颉睂?duì)話框64“添加表或視圖”對(duì)話框“添加表或視圖”對(duì)話框65查詢?cè)O(shè)計(jì)器的“雜項(xiàng)”選項(xiàng)卡查詢?cè)O(shè)計(jì)器的“雜項(xiàng)”選項(xiàng)卡66

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

1、添加數(shù)據(jù)源:KC表和CJ表2、確定聯(lián)接類型3、設(shè)置輸出內(nèi)容4、設(shè)置篩選條件5、設(shè)置排序依據(jù)創(chuàng)建基于多個(gè)表的查詢1、添加數(shù)據(jù)源:KC表和CJ表創(chuàng)建基于多個(gè)68創(chuàng)建基于多個(gè)表的查詢

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

【例5】基于教師表和任課表,查詢沒有授課任務(wù)的教師名單。兩種方法:1、左聯(lián)接2、子查詢創(chuàng)建基于多個(gè)表的查詢【例5】基于教師表和任課表,查詢沒70

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

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

MODIFYCOMMAND文件名.QPR2、在編輯窗口輸入一條SELECT-SQL命令3、關(guān)閉編輯窗口保存查詢文件二、用命令方式運(yùn)行查詢文件

在命令窗口輸入命令:

DO文件名.QPR注意:查詢文件的擴(kuò)展名.qpr不可以省略

用命令方式創(chuàng)建和運(yùn)行查詢文件一、創(chuàng)建查詢文件用命令方式創(chuàng)建和運(yùn)行查詢文件71

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

左聯(lián)接(LEFTJOIN)

右聯(lián)接(RIGHTJOIN)

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

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

基于成績(jī)表,查詢每個(gè)學(xué)生的成績(jī),要求:每個(gè)學(xué)生的各門課程的成績(jī)?cè)谝恍猩希缦卤硭?。學(xué)號(hào)課程1課程2課程3課程4課程5課程6總分950201856591838777488950102767884659267462…………………………………………交叉表查詢基于成績(jī)表,查詢每個(gè)學(xué)生的成績(jī),要求:學(xué)號(hào)課73VFP課件-之ch4查詢和視圖74ODBC數(shù)據(jù)源:ODBC(開放式數(shù)據(jù)互連)是一種用于數(shù)據(jù)庫服務(wù)器的標(biāo)準(zhǔn)協(xié)議,通過ODBC可以訪問多種數(shù)據(jù)庫中的數(shù)據(jù),可以安裝多種數(shù)據(jù)庫的ODBC驅(qū)動(dòng)程序,從而使VFP可以與該數(shù)據(jù)庫相連,訪問數(shù)據(jù)庫中的數(shù)據(jù)。遠(yuǎn)程視圖:使用遠(yuǎn)程ODBC數(shù)據(jù)源。本地視圖:使用VFP的視圖或表作為數(shù)據(jù)源。視圖的本質(zhì)可以將一個(gè)或多個(gè)遠(yuǎn)程視圖添加到本地視圖中,以便能在同一個(gè)視圖中同時(shí)訪問VFP數(shù)據(jù)和遠(yuǎn)程ODBC數(shù)據(jù)源中的數(shù)據(jù)ODBC數(shù)據(jù)源:ODBC(開放式數(shù)據(jù)互連)是一種用75

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

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

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

1、使用查詢,得到的是一組只讀型的檢索結(jié)果;而使用視圖,可以從表中提取一組記錄,改變這些記錄的值,并把更新結(jié)果送回到源表中。2、視圖可以作為查詢和視圖的數(shù)據(jù)源;但查詢不可以作為數(shù)據(jù)源。3、查詢以命令文件形式獨(dú)立存儲(chǔ);而視圖必須保存在數(shù)據(jù)庫中。

4、用MODIFYCOMMAND命令創(chuàng)建查詢文件;用CREATESQLVIEW命令創(chuàng)建視圖。5、視圖是數(shù)據(jù)庫的一部分,是一個(gè)虛擬的表。用DO命令運(yùn)行查詢文件;用USE命令查看視圖。查

的比較一、查詢和視圖的共同之處查詢與視圖76

在“項(xiàng)目管理器”中選擇一個(gè)數(shù)據(jù)庫,選擇“本地視圖”,然后選擇“新建”按鈕,打開“視圖設(shè)計(jì)器”?;蛘咴跀?shù)據(jù)庫已打開時(shí),使用CREATESQLVIEW命令顯示“視圖設(shè)計(jì)器”。使用視圖設(shè)計(jì)器基本上與使用查詢?cè)O(shè)計(jì)器一樣,但視圖設(shè)計(jì)器多一個(gè)“更新條件”選項(xiàng)卡,它可以控制更新。使用視圖設(shè)計(jì)器創(chuàng)建本地視圖在“項(xiàng)目管理器”中選擇一個(gè)數(shù)據(jù)庫,選擇“本地視圖”77【例1】創(chuàng)建基于xs、kc、cj表,并可修改

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

1、打開視圖設(shè)計(jì)器,新建視圖,依次加入xs、cj、kc三個(gè)表作為數(shù)據(jù)源,設(shè)置聯(lián)接條件及聯(lián)接方式,選擇輸出字段。2、進(jìn)入“更新條件”選項(xiàng)卡使用視圖更新基表數(shù)據(jù)注意:1、要使得視圖中當(dāng)前記錄的成績(jī)字段能正確更新cj表中相應(yīng)記錄的成績(jī)字段,必須設(shè)置視圖中cj表的學(xué)號(hào)(xh)和課程代號(hào)(kcdh)為關(guān)鍵字段。2、視圖運(yùn)行后,在瀏覽窗口修改cj字段值,修改后必須使記錄指針離開這條記錄,才能在基表中看到修改后的結(jié)果?!纠?】創(chuàng)建基于xs、kc、cj表,并可修改cj表78

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

1、新建一視圖,加入cj表作為數(shù)據(jù)源,選擇所有的可用字段作為輸出字段。2、進(jìn)入“篩選”選項(xiàng)卡,插入一行,選擇字段為“cj.kcdh”,在“實(shí)例”框中輸入問號(hào)及參數(shù)名“?課程代號(hào)”。

注意:

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

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

“視圖參數(shù)”對(duì)話框視圖的參數(shù)可以是一個(gè)表達(dá)式,計(jì)算出來的值將作80命令格式:

CREATESQLVIEW<視圖名>;

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

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

CREATESQLVIEWCJ_KCDH;AS

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

1、訪問視圖

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

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

OPENDATABASESJK

USEJS_VIEW

BROWSE

USEJS_VIEWIN0

USE

USEINJS_VIEW視

使

用1、訪問視圖視圖的使用82

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

NOREQUERY子句。或者在USE命令中,使用AGAIN子句。

USEJS_VIEWBROWSESELECT0USEJS_VIEWNOREQUERYBROWSE可以使用帶NODATA子句的USE命令,僅打開視圖并顯示視圖結(jié)構(gòu)

USEJS_VIEWNODATABROWSELISTSTRUCTURE視

使

用若要不下載數(shù)據(jù)再次使用視圖,在USE命令中,使用N83(2)關(guān)閉視圖的基表在使用視圖時(shí),自動(dòng)打開的本地基表;但關(guān)閉視圖時(shí)不會(huì)自動(dòng)關(guān)閉基表,必須另用命令關(guān)閉它們。

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

MODIFYVIEWJS_VIEWRENAMEVIEWJS_VIEW

TOVIEW01DELETEVIEWVIEW01

使

用(2)關(guān)閉視圖的基表視圖的使用84

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

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

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

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

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

使

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

使

4、集成視圖

一個(gè)基于視圖的視圖,或基于集成了本地表、本地視圖或遠(yuǎn)程視圖的視圖,被稱為多級(jí)視圖。

視圖的使用4、集成視圖86

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

VFP支持如下SQL命令:

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

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

SELECT<輸出項(xiàng)表>

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

其中SELECT子句和FROM子句為必選項(xiàng)SELECT-SQL命

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

1.基于單個(gè)表的查詢示例P124【例1】查詢JS表中所有教師的工號(hào)和姓名

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

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

SELECTcj.xh,cj.cj;FROMcj;WHEREcj.kcdh="06";ORDERBYcjDESCSELECT-SQL應(yīng)用舉例1.基于單個(gè)表的查詢示例P124SELECT-89

2.基于多個(gè)表的查詢示例

【例4】基于XS表和ZY表,查詢學(xué)生的學(xué)號(hào)、姓名和專業(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表,查詢有不及格課程成績(jī)的學(xué)生的學(xué)號(hào)和姓名,且有多門課程不及格的學(xué)生只顯示一次。

SELECTDISTINCTcj.xh,xs.xm;FROMsjk!xsinnerjoinsjk!cjonxs.xh=cj.xh;WHEREcj.cj<60SELECT-SQL應(yīng)用舉例2.基于多個(gè)表的查詢示例SELECT-SQL應(yīng)用舉例903.含有計(jì)算字段的查詢

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

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

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論