第4章 查詢和視圖_第1頁
第4章 查詢和視圖_第2頁
第4章 查詢和視圖_第3頁
第4章 查詢和視圖_第4頁
第4章 查詢和視圖_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、1第四章第四章查詢和視圖查詢和視圖u查詢的創(chuàng)建和使用查詢的創(chuàng)建和使用u視圖的創(chuàng)建和使用視圖的創(chuàng)建和使用uSELECT-SQL語句語句上一頁下一頁退 出2 212/31/202112/31/2021n查詢:查詢: 從數(shù)據(jù)源(從數(shù)據(jù)源(一張或多張表、視圖一張或多張表、視圖)中檢索或)中檢索或統(tǒng)計(jì)出符合條件的記錄數(shù)據(jù)。(統(tǒng)計(jì)出符合條件的記錄數(shù)據(jù)。(結(jié)果是只讀的結(jié)果是只讀的)n視圖:視圖: 從數(shù)據(jù)源中(從數(shù)據(jù)源中(一張或多張表、視圖一張或多張表、視圖)提取一組)提取一組符合條件的記錄數(shù)據(jù),并可改變這些記錄的值,符合條件的記錄數(shù)據(jù),并可改變這些記錄的值,還可把更新結(jié)果送回源表中。(還可把更新結(jié)果送回源表

2、中。(結(jié)果可更新、變結(jié)果可更新、變動(dòng)動(dòng))n VFP工具:工具:查詢設(shè)計(jì)器、視圖設(shè)計(jì)器查詢設(shè)計(jì)器、視圖設(shè)計(jì)器4.1 查詢和視圖概述上一頁下一頁退 出3 312/31/202112/31/20211、查詢的本質(zhì)、查詢的本質(zhì)n查詢查詢:向數(shù)據(jù)源發(fā)出檢索信息的請求向數(shù)據(jù)源發(fā)出檢索信息的請求,它設(shè)置一些它設(shè)置一些條件條件提提取特定的數(shù)據(jù)取特定的數(shù)據(jù)記錄記錄。其運(yùn)行結(jié)果是一個(gè)基于表和視圖的。其運(yùn)行結(jié)果是一個(gè)基于表和視圖的動(dòng)態(tài)動(dòng)態(tài)的數(shù)據(jù)集合。的數(shù)據(jù)集合。n數(shù)據(jù)源數(shù)據(jù)源:是一張或是一張或多張多張相關(guān)相關(guān)表表(自由表或庫表自由表或庫表)或視圖?;蛞晥D。n查詢條件:查詢條件:要那些字段?那些記錄?按什么要求收集?

3、要那些字段?那些記錄?按什么要求收集?n查詢實(shí)質(zhì):查詢實(shí)質(zhì):執(zhí)行一條執(zhí)行一條SELECT-SQL命令語句命令語句n保存保存: .QPR文件,實(shí)質(zhì)上保存的是對應(yīng)的文件,實(shí)質(zhì)上保存的是對應(yīng)的 SELECT-SQL語句語句(非查詢結(jié)果非查詢結(jié)果)。n查詢和視圖設(shè)計(jì)器在本質(zhì)上都是查詢和視圖設(shè)計(jì)器在本質(zhì)上都是SELECT-SQL命令命令的的設(shè)計(jì)方法。設(shè)計(jì)方法。 4.2 查詢的創(chuàng)建和使用查詢的創(chuàng)建和使用上一頁下一頁退 出4 412/31/202112/31/2021n創(chuàng)建查詢的方法:創(chuàng)建查詢的方法:使用查詢設(shè)計(jì)器使用查詢設(shè)計(jì)器CREATE QUERYCREATE QUERY 查詢文件名查詢文件名|?“項(xiàng)目

4、管理器項(xiàng)目管理器”數(shù)據(jù)數(shù)據(jù)”查詢查詢”新建新建”“文件文件”新建新建”或或“常用工具欄常用工具欄” “新新建建”編寫編寫SELECT-SQL語句語句(難難)2、使用查詢設(shè)計(jì)器建立查詢、使用查詢設(shè)計(jì)器建立查詢上一頁下一頁退 出5 512/31/202112/31/2021n建查詢的步驟建查詢的步驟n打開查詢設(shè)計(jì)器打開查詢設(shè)計(jì)器n添加表或視圖添加表或視圖(即該查詢所涉及的數(shù)據(jù)源)(即該查詢所涉及的數(shù)據(jù)源)n設(shè)置輸出字段(設(shè)置輸出字段(“字段字段”選項(xiàng)卡)選項(xiàng)卡) 選定需要包含到查選定需要包含到查詢結(jié)果中的字段及需計(jì)算的表達(dá)式。詢結(jié)果中的字段及需計(jì)算的表達(dá)式。n設(shè)置聯(lián)接設(shè)置聯(lián)接(“聯(lián)接聯(lián)接”選項(xiàng)卡)

5、選項(xiàng)卡)確定匹配多表的聯(lián)接表確定匹配多表的聯(lián)接表達(dá)式達(dá)式n設(shè)置篩選條件設(shè)置篩選條件(“篩選篩選”選項(xiàng)卡)選項(xiàng)卡) 確定查詢條件。確定查詢條件。n排序(排序(“排序依據(jù)排序依據(jù)”選項(xiàng)卡)選項(xiàng)卡) 決定查詢輸出結(jié)果時(shí),決定查詢輸出結(jié)果時(shí),記錄或行的順序記錄或行的順序n分組(分組(“分組依據(jù)分組依據(jù)”選項(xiàng)卡)選項(xiàng)卡) 分組的作用可將一組分組的作用可將一組類似的記錄壓縮成一個(gè)記錄,主要用于計(jì)算。類似的記錄壓縮成一個(gè)記錄,主要用于計(jì)算。n其他其他(“雜項(xiàng)雜項(xiàng)”選項(xiàng)卡)選項(xiàng)卡) 重復(fù)記錄處理、結(jié)果記錄范重復(fù)記錄處理、結(jié)果記錄范圍等圍等n設(shè)置輸出的方式設(shè)置輸出的方式瀏覽、臨時(shí)表、表、圖形、屏幕、報(bào)表、標(biāo)簽等

6、瀏覽、臨時(shí)表、表、圖形、屏幕、報(bào)表、標(biāo)簽等上一頁下一頁退 出6 612/31/202112/31/2021n查詢設(shè)計(jì)器舉例查詢設(shè)計(jì)器舉例單表查詢單表查詢例例1:查詢成績表中成績在:查詢成績表中成績在80分(含分(含80)以上的課)以上的課程代號(hào)、課程名稱、學(xué)生學(xué)號(hào)和成績,按課程代號(hào)升程代號(hào)、課程名稱、學(xué)生學(xué)號(hào)和成績,按課程代號(hào)升序排序,課程代號(hào)相同再按成績降序排序。序排序,課程代號(hào)相同再按成績降序排序。1. 打開查詢設(shè)計(jì)器打開查詢設(shè)計(jì)器(項(xiàng)目管理器項(xiàng)目管理器|CREATE QUERY)添加表或視圖添加表或視圖:添加表添加表CJ: FROM子句子句2. 定義輸出內(nèi)容定義輸出內(nèi)容(“字段字段”選項(xiàng)

7、卡選項(xiàng)卡): SELECT 子句子句n字段字段n表達(dá)式(表達(dá)式(AS 別名)別名)盡量用生成器盡量用生成器(尤其函數(shù)名尤其函數(shù)名)上一頁下一頁退 出7 712/31/202112/31/20213. 設(shè)置篩選條件設(shè)置篩選條件(WHERE子句子句)cj.cj=80條件類型條件類型說明說明=指定字段值等于右邊的實(shí)例指定字段值等于右邊的實(shí)例 Like指定字段與實(shí)例文本相匹配。如,指定字段與實(shí)例文本相匹配。如,“Js.gh like A”與來自與來自 A0001和和A0002 等的記錄相匹配等的記錄相匹配 =指定字段與實(shí)例文本必須逐字符指定字段與實(shí)例文本必須逐字符完全完全匹配匹配 (=)指定字段大于(

8、大于或等于)實(shí)例文本的值指定字段大于(大于或等于)實(shí)例文本的值 (=)指定字段小于(小于或等于)實(shí)例文本的值指定字段小于(小于或等于)實(shí)例文本的值 Is Null指定字段包含指定字段包含null 值值 Between指定字段大于等于示例文本中的低值并小于等于示例文本中的高指定字段大于等于示例文本中的低值并小于等于示例文本中的高值。實(shí)例文本中的這兩個(gè)值用逗號(hào)隔開。如值。實(shí)例文本中的這兩個(gè)值用逗號(hào)隔開。如 :“Between( JS.CSRQ,01/01/1950,01/01/1960)”與出生日與出生日期在期在1950年年1月月1日至日至1960年年1月月1日的教師記錄相匹配日的教師記錄相匹配

9、IN指定字段必須與實(shí)例文本中逗號(hào)分隔的幾個(gè)樣本中的一個(gè)相匹配指定字段必須與實(shí)例文本中逗號(hào)分隔的幾個(gè)樣本中的一個(gè)相匹配 上一頁下一頁退 出8 812/31/202112/31/20214. 設(shè)置排序依據(jù)設(shè)置排序依據(jù)(ORDER BY 子句)升序升序/降序降序優(yōu)先權(quán)優(yōu)先權(quán)查看SQL5. 設(shè)置分組依據(jù)設(shè)置分組依據(jù)(GROUP BY 子句) 分組分組: 將數(shù)據(jù)源中一組相關(guān)的記錄運(yùn)算成將數(shù)據(jù)源中一組相關(guān)的記錄運(yùn)算成一個(gè)查詢記錄輸出,這樣就可以在查詢運(yùn)行一個(gè)查詢記錄輸出,這樣就可以在查詢運(yùn)行中完成基于數(shù)據(jù)源的一組記錄的統(tǒng)計(jì)計(jì)算中完成基于數(shù)據(jù)源的一組記錄的統(tǒng)計(jì)計(jì)算上一頁下一頁退 出9 912/31/2021

10、12/31/2021按系名分組按系名分組:把所有系名相同的記錄壓縮把所有系名相同的記錄壓縮成一個(gè)記錄成一個(gè)記錄幾個(gè)合計(jì)函數(shù)幾個(gè)合計(jì)函數(shù)計(jì)數(shù)計(jì)數(shù)COUNT() 求和求和SUM() 合計(jì)函數(shù)合計(jì)函數(shù)求平均函數(shù)求平均函數(shù)AVG()n 查看查看SQLn 分組結(jié)果的篩選條件分組結(jié)果的篩選條件GROUP BY 子句的同時(shí)使用子句的同時(shí)使用HAVING上一頁下一頁退 出101012/31/202112/31/20216. 其他設(shè)置其他設(shè)置n是否允許重復(fù)記錄是否允許重復(fù)記錄n結(jié)果的記錄范圍(需排序配合)結(jié)果的記錄范圍(需排序配合)7. 運(yùn)行查詢運(yùn)行查詢n“運(yùn)行運(yùn)行”按鈕按鈕n“查詢查詢”菜單中的菜單中的“運(yùn)行

11、查詢運(yùn)行查詢”nDO 命令(命令(DO xijsgz. qpr)上一頁下一頁退 出111112/31/202112/31/20218. 選擇輸出類型選擇輸出類型(INTO 子句)輸出去向類型輸出去向類型說說 明明瀏覽瀏覽(無無 INTO)在在“瀏覽瀏覽”窗口中顯示查詢結(jié)果窗口中顯示查詢結(jié)果(默認(rèn)默認(rèn))臨時(shí)表臨時(shí)表(INTO CURSOR)將查詢結(jié)果存貯在一張命名的臨時(shí)只讀表將查詢結(jié)果存貯在一張命名的臨時(shí)只讀表中,臨時(shí)表只存在于內(nèi)存中,當(dāng)臨時(shí)表被中,臨時(shí)表只存在于內(nèi)存中,當(dāng)臨時(shí)表被關(guān)閉時(shí),表將從內(nèi)存中刪除關(guān)閉時(shí),表將從內(nèi)存中刪除表表(INTO TABLE)使查詢結(jié)果保存為一個(gè)表文件,表文件將使查

12、詢結(jié)果保存為一個(gè)表文件,表文件將永久地保存在磁盤上永久地保存在磁盤上圖形圖形使查詢結(jié)果可用于使查詢結(jié)果可用于 Microsoft Graph應(yīng)用程序應(yīng)用程序屏幕屏幕(TO SCREEN)在在VFP主窗口或當(dāng)前活動(dòng)輸出窗口中顯示查詢結(jié)果主窗口或當(dāng)前活動(dòng)輸出窗口中顯示查詢結(jié)果報(bào)表報(bào)表(REPORT FORM)將輸出送到一個(gè)報(bào)表文件(將輸出送到一個(gè)報(bào)表文件(.FRX)標(biāo)簽標(biāo)簽(LABEL FORM)將輸出送到一個(gè)標(biāo)簽文件(將輸出送到一個(gè)標(biāo)簽文件(.LBX)上一頁下一頁退 出121212/31/202112/31/2021n練習(xí)一:練習(xí)一:查詢成績表查詢成績表cj中各個(gè)學(xué)生的課程中各個(gè)學(xué)生的課程總分及

13、平均成績,要求查詢輸出學(xué)號(hào)總分及平均成績,要求查詢輸出學(xué)號(hào)xh、課程代碼課程代碼kcdm、總分及平均成績,查詢、總分及平均成績,查詢結(jié)果按總分由高到底的排列。結(jié)果按總分由高到底的排列。數(shù)據(jù)源:數(shù)據(jù)源:CJ.DBF ; 聯(lián)接:聯(lián)接:選定字段:選定字段:xh,kcdm,sum (CJ.cj), AVE(CJ.cj) 排序依據(jù):排序依據(jù):總分總分分組依據(jù):分組依據(jù):xh上一頁下一頁退 出131312/31/202112/31/20213、創(chuàng)建多表查詢、創(chuàng)建多表查詢n多表查詢與單表查詢的不同:多表查詢與單表查詢的不同:n查詢的數(shù)據(jù)源為查詢的數(shù)據(jù)源為兩個(gè)以上兩個(gè)以上的表或視圖的表或視圖n多張表之間需要建

14、立多張表之間需要建立聯(lián)接條件聯(lián)接條件1. 1. 聯(lián)接的概念聯(lián)接的概念聯(lián)接和聯(lián)接條件聯(lián)接和聯(lián)接條件聯(lián)接:查詢或視圖的一個(gè)數(shù)據(jù)操作,通過公共字段聯(lián)接相關(guān)表或視圖聯(lián)接結(jié)果:形成一個(gè)新的單表(只讀、暫時(shí)、用以建立查詢只讀、暫時(shí)、用以建立查詢) 條件聯(lián)接: 無條件聯(lián)接:多表交叉組合無條件聯(lián)接:多表交叉組合,形成的新紀(jì)錄數(shù)是多張表記錄數(shù)形成的新紀(jì)錄數(shù)是多張表記錄數(shù)的乘積的乘積. 條件聯(lián)接條件聯(lián)接:即按聯(lián)接條件將多表紀(jì)錄生成一個(gè)即按聯(lián)接條件將多表紀(jì)錄生成一個(gè)新單表新單表紀(jì)錄紀(jì)錄 聯(lián)接條件:在多表聯(lián)接產(chǎn)生新表紀(jì)錄時(shí)聯(lián)接條件:在多表聯(lián)接產(chǎn)生新表紀(jì)錄時(shí),必須限定構(gòu)成臨時(shí)新必須限定構(gòu)成臨時(shí)新表紀(jì)錄的條件表紀(jì)錄的條件

15、,這樣的限定條件便是聯(lián)接條件這樣的限定條件便是聯(lián)接條件.上一頁下一頁退 出141412/31/202112/31/2021聯(lián)接類型聯(lián)接類型內(nèi)聯(lián)接內(nèi)聯(lián)接,左聯(lián)接左聯(lián)接,右聯(lián)接右聯(lián)接,完全聯(lián)接完全聯(lián)接上一頁下一頁退 出151512/31/202112/31/20213、創(chuàng)建多表查詢、創(chuàng)建多表查詢2. 如何創(chuàng)建多表查詢?nèi)绾蝿?chuàng)建多表查詢 n打開查詢設(shè)計(jì)器打開查詢設(shè)計(jì)器n向查詢中添加多張表向查詢中添加多張表 - “添加表或視圖添加表或視圖”對話框?qū)υ捒颉安樵冊O(shè)計(jì)器查詢設(shè)計(jì)器”工具欄工具欄添加表添加表查詢菜單查詢菜單添加表添加表快捷菜單快捷菜單添加表添加表n設(shè)置表之間的聯(lián)接條件設(shè)置表之間的聯(lián)接條件 如果新

16、添加的表與已存在的表之間在數(shù)據(jù)庫中已經(jīng)如果新添加的表與已存在的表之間在數(shù)據(jù)庫中已經(jīng)建立建立永久性關(guān)系永久性關(guān)系,則系統(tǒng)將以該永久性關(guān)系作為默認(rèn)的,則系統(tǒng)將以該永久性關(guān)系作為默認(rèn)的聯(lián)接條件聯(lián)接條件上一頁下一頁退 出161612/31/202112/31/2021 如果新添加的表與已存在的表之間在數(shù)據(jù)庫中沒有建如果新添加的表與已存在的表之間在數(shù)據(jù)庫中沒有建立永久性關(guān)系,但兩表有立永久性關(guān)系,但兩表有同名字段同名字段,則系統(tǒng)將以兩表的,則系統(tǒng)將以兩表的同名字段作為默認(rèn)的聯(lián)接條件。同名字段作為默認(rèn)的聯(lián)接條件。即系統(tǒng)會(huì)打開即系統(tǒng)會(huì)打開“聯(lián)接條件聯(lián)接條件”對話框,并以兩個(gè)表的同名對話框,并以兩個(gè)表的同名字

17、段作為默認(rèn)的聯(lián)接條件字段作為默認(rèn)的聯(lián)接條件 如果新添加的表與已存在的表之間在數(shù)據(jù)庫中沒有建如果新添加的表與已存在的表之間在數(shù)據(jù)庫中沒有建立永久性關(guān)系,且兩表沒有同名字段,則系統(tǒng)沒有默認(rèn)立永久性關(guān)系,且兩表沒有同名字段,則系統(tǒng)沒有默認(rèn)的聯(lián)接條件。的聯(lián)接條件。即如果所有的表中都沒有同名字段,則即如果所有的表中都沒有同名字段,則“聯(lián)接條件聯(lián)接條件”對對話框中的聯(lián)接條件為空白。此時(shí)可以創(chuàng)建其他的聯(lián)接話框中的聯(lián)接條件為空白。此時(shí)可以創(chuàng)建其他的聯(lián)接 如果按如果按“取消取消”按鈕,將不建立任何聯(lián)接按鈕,將不建立任何聯(lián)接 自動(dòng)默認(rèn)聯(lián)接類型為:內(nèi)部連接自動(dòng)默認(rèn)聯(lián)接類型為:內(nèi)部連接上一頁下一頁退 出171712/

18、31/202112/31/2021n建立聯(lián)接條件的方法建立聯(lián)接條件的方法對于已存在于查詢中的表或視圖,可以拖動(dòng)一張對于已存在于查詢中的表或視圖,可以拖動(dòng)一張表表 中的字段到另一張表中的相應(yīng)字段上建立聯(lián)接條件中的字段到另一張表中的相應(yīng)字段上建立聯(lián)接條件“查詢設(shè)計(jì)器查詢設(shè)計(jì)器”工具欄工具欄/添加聯(lián)接添加聯(lián)接“查詢設(shè)計(jì)器查詢設(shè)計(jì)器”/“聯(lián)接聯(lián)接”選項(xiàng)卡選項(xiàng)卡/插入插入 對于已存在的聯(lián)接,在查詢設(shè)計(jì)器對于已存在的聯(lián)接,在查詢設(shè)計(jì)器的表顯示中將看到表之間的的表顯示中將看到表之間的聯(lián)接線聯(lián)接線;在;在“聯(lián)接聯(lián)接”選項(xiàng)卡中將看到選項(xiàng)卡中將看到一行對應(yīng)的條一行對應(yīng)的條件件。上一頁下一頁退 出181812/31

19、/202112/31/2021n編輯聯(lián)接條件的方法編輯聯(lián)接條件的方法雙擊連接線雙擊連接線單擊單擊“聯(lián)接聯(lián)接”選項(xiàng)卡中的條件行前的按鈕選項(xiàng)卡中的條件行前的按鈕“查詢設(shè)計(jì)器查詢設(shè)計(jì)器”/聯(lián)接選項(xiàng)卡聯(lián)接選項(xiàng)卡n刪除聯(lián)接條件的方法刪除聯(lián)接條件的方法則先單擊連接線,按【則先單擊連接線,按【Del】鍵即可將其刪除】鍵即可將其刪除聯(lián)接選項(xiàng)卡聯(lián)接選項(xiàng)卡/移去移去n聯(lián)接不必基于完全匹配的字段聯(lián)接不必基于完全匹配的字段 (LIKE,=,=480 AND =480 AND 最低分最低分=70=70保存查詢保存查詢xs_cj.qprxs_cj.qpr上一頁下一頁退 出202012/31/202112/31/20213

20、.1 SELECT-SQL語句語句nSQL(Structured Query Language) 結(jié)構(gòu)化查詢語言,關(guān)系數(shù)據(jù)庫語言的標(biāo)準(zhǔn);結(jié)構(gòu)化查詢語言,關(guān)系數(shù)據(jù)庫語言的標(biāo)準(zhǔn); VFP支持支持SQLnVFP的的SQL命令使用命令使用 Rushmore技術(shù)來優(yōu)化性技術(shù)來優(yōu)化性能能,并且一個(gè)并且一個(gè)SQL命令可代替多個(gè)命令可代替多個(gè)VFP命令。命令。nVFP支持的支持的SQL命令命令SELECT-SQL DELETE-SQLALTER TABLE-SQL INSERT-SQLCREATE CURSOR-SQL UPDATE-SQLCREATE TABLE-SQL上一頁下一頁退 出212112/31/

21、202112/31/20213.2 SELECT-SQL命令命令nSELECT-SQL命令的語法格式命令的語法格式P121nSELECT-SQL命令舉例命令舉例SELECT Js.ximing , COUNT(Js.gh) , ; SUM(Js.jbgz) , AVG(Js.jbgz); & “字段字段”選項(xiàng)卡選項(xiàng)卡FROM jxgl!js; & 數(shù)據(jù)源數(shù)據(jù)源WHERE js.ximing 外語系外語系; OR js.ximing “中文系中文系”; & “篩選篩選”選項(xiàng)卡選項(xiàng)卡GROUP BY js.ximing; & “分組分組”選項(xiàng)卡選項(xiàng)卡ORDER BY

22、 4 DESC & “排序依據(jù)排序依據(jù)”選項(xiàng)卡選項(xiàng)卡上一頁下一頁退 出222212/31/202112/31/2021n 查看一個(gè)查詢的查看一個(gè)查詢的SELECT-SQLSELECT-SQL語句語句 1 1)“查詢設(shè)計(jì)器查詢設(shè)計(jì)器”窗口窗口查看查看SQLSQL(只讀只讀) 2 2)命令窗口)命令窗口 TYPE TYPE命令命令主窗口顯示主窗口顯示 如:如: TYPE TYPE 統(tǒng)計(jì)統(tǒng)計(jì).QPR.QPR 3 3)命令窗口)命令窗口 MODIFY COMMAND MODIFY COMMAND 或者或者M(jìn)ODIFY FILE MODIFY FILE 命令命令 編輯窗口顯示(編輯窗口顯示( S

23、QLSQL內(nèi)容可編輯更改)內(nèi)容可編輯更改) 如:如: MODIFY COMMAND 統(tǒng)計(jì)統(tǒng)計(jì).QPR如:如: MODIFY FILE 統(tǒng)計(jì)統(tǒng)計(jì).QPRn 直接編寫直接編寫SELECT-SQL語句創(chuàng)建查詢語句創(chuàng)建查詢在在命令窗口命令窗口或或程序編輯窗口程序編輯窗口輸入輸入SELECT-SQL語句語句上一頁下一頁退 出232312/31/202112/31/20213.3 SELECT-SQL3.3 SELECT-SQL應(yīng)用舉例應(yīng)用舉例1.1.基于單個(gè)表的查詢示例基于單個(gè)表的查詢示例 n顯示顯示JSJS表中所有教師的工號(hào)和姓名(從一個(gè)表中表中所有教師的工號(hào)和姓名(從一個(gè)表中選取兩個(gè)字段)選取兩個(gè)字

24、段)SELECT js.gh,js.xm FROM SELECT js.gh,js.xm FROM sjksjk!js!jsn顯示顯示XSXS表中學(xué)號(hào)以表中學(xué)號(hào)以“99”99”開頭的學(xué)生情況。開頭的學(xué)生情況。 SELECT SELECT * * FROM sjk!xs; FROM sjk!xs; WHERE like(99 WHERE like(99* *,xh),xh)上一頁下一頁退 出242412/31/202112/31/2021n從高到低顯示從高到低顯示CJCJ表中代號(hào)為表中代號(hào)為“01”01”課程的學(xué)課程的學(xué)生的學(xué)號(hào)和成績生的學(xué)號(hào)和成績SELECT cj.xh,cj.cj FROM

25、sjk!cj;WHERE cj.kcdh=01;ORDER BY cj.cj DESC2. 2. 基于多個(gè)表的查詢示例基于多個(gè)表的查詢示例n顯示顯示XSXS和和ZYZY兩個(gè)表中三個(gè)字段兩個(gè)表中三個(gè)字段xh,xm, zydhxh,xm, zydh的內(nèi)容,并根據(jù)的內(nèi)容,并根據(jù)zydhzydh字段聯(lián)接兩個(gè)表。其中字段聯(lián)接兩個(gè)表。其中用到了兩個(gè)表的本地別名。用到了兩個(gè)表的本地別名。SELECT xs.xh,xs.xm,zy.zymc; FROM sjk!xs,sjk!zy;WHERE xs.zydh = zy.zydh上一頁下一頁退 出252512/31/202112/31/2021n顯示顯示CJCJ

26、表中有不及格成績的學(xué)生的表中有不及格成績的學(xué)生的xhxh和和xm,xm,多門不及格者顯示一次且。多門不及格者顯示一次且。SELECT DISTINCT cj.xh,xs.xm; FROM sjk!cj,sjk!xs; WHERE cj.cj60; AND cj.xh = xs.xhn上述查詢僅顯示開始的上述查詢僅顯示開始的6 6條記錄條記錄SELECT DISTINCT Top 6 cj.xh,xs.xm; FROM sjk!cj,sjk!xs; WHERE cj.cj60 AND cj.xh = xs.xh; ORDER BY 1上一頁下一頁退 出262612/31/202112/31/20

27、213. 3. 含有計(jì)算字段的查詢含有計(jì)算字段的查詢n顯示顯示CJCJ表中的課程代號(hào)及最高分表中的課程代號(hào)及最高分 SELECT cj.kcdh, MAX(cj.cj) as; 最高分最高分 FROM sjk!cj; GROUP BY kcdhn查詢每門課程的課程代號(hào)和名稱以及最高分,查詢每門課程的課程代號(hào)和名稱以及最高分,并把查詢結(jié)果保存到并把查詢結(jié)果保存到kc_maxcj.dbfkc_maxcj.dbf表文件中表文件中SELECT cj.kcdh,kc.kcm,max(cj.cj);as最高分最高分 FROM sjk!cj,sjk!kc; WHERE cj.kcdh=kc.kcdh; GR

28、OUP BY cj.kcdh; INTO TABLE kc_maxcj上一頁下一頁退 出272712/31/202112/31/2021select 成績成績.kcdh,kc1.kcm,;max(成績成績.cj) as “最高最高;from jxgl1!成績成績,jxgl1!kc1;where 成績成績.kcdh=kc1.kcdh;group by 成績成績.kcdh4.4.子查詢示例子查詢示例 顯示顯示JS表中已擔(dān)任課程教師的姓名和系名。表中已擔(dān)任課程教師的姓名和系名。SELECT js.xdh,js.xm; FROM sjk!js; WHERE js.gh in (SELECT rk.gh

29、; FROM sjk!rk)上一頁下一頁退 出282812/31/202112/31/20215.5.組合查詢示例組合查詢示例 n查詢?nèi)熒麊?。要求如果是教師必須注明查詢?nèi)熒麊?。要求如果是教師必須注明“教師教師”,結(jié),結(jié)果中包含四個(gè)列:系名、類別、姓名和性別,并按系名排序。果中包含四個(gè)列:系名、類別、姓名和性別,并按系名排序。SELECT js.xdh,教師 AS 類別,js.xm,js.xb FROM sjk!js;UNION;SELECT xs.xdh,學(xué)生 AS 類別,xs.xm,xs.xb FROM sjk!xs;ORDER BY 1上一頁下一頁退 出292912/31/20

30、2112/31/2021n查詢各系科教師工資總額、各系科每個(gè)教師的工資以及全校所有教師工資總查詢各系科教師工資總額、各系科每個(gè)教師的工資以及全校所有教師工資總額。要求結(jié)果中包含三個(gè)列:系名、姓名和工資,并按系名排序。額。要求結(jié)果中包含三個(gè)列:系名、姓名和工資,并按系名排序。SELECT Xim.ximing AS 系名系名, SPACE(8) as 姓名姓名, SUM(Gz.jbgz) as 工資工資 FROM sjk!xim INNER JOIN sjk!js; INNER JOIN sjk!gz ; ON Js.gh = Gz.gh ; ON Xim.xdh = Js.xdh; GROUP

31、 BY Xim.ximing;UNION;SELECT Xim.ximing AS 系名系名, Js.xm AS 姓名姓名, Gz.jbgz AS 工資工資; FROM sjk!xim INNER JOIN sjk!js; INNER JOIN sjk!gz ; ON Js.gh = Gz.gh ; ON Xim.xdh = Js.xdh;UNION;SELECT 總額總額+ SPACE(14) as 系名系名, SPACE(8) as 姓名姓名,; SUM(Gz.jbgz) as 工資工資; FROM sjk!xim INNER JOIN sjk!js; INNER JOIN sjk!gz

32、; ON Js.gh = Gz.gh ; ON Xim.xdh = Js.xdh; ORDER BY 1上一頁下一頁退 出303012/31/202112/31/2021 視圖是從一個(gè)或多個(gè)數(shù)據(jù)表中導(dǎo)出的視圖是從一個(gè)或多個(gè)數(shù)據(jù)表中導(dǎo)出的“表表”。它與固。它與固定存放數(shù)據(jù)的庫表不同:視圖中的數(shù)據(jù)是基于源數(shù)據(jù)表的定存放數(shù)據(jù)的庫表不同:視圖中的數(shù)據(jù)是基于源數(shù)據(jù)表的動(dòng)態(tài)數(shù)據(jù)集合,它可以使數(shù)據(jù)暫時(shí)從數(shù)據(jù)源中分離出來,動(dòng)態(tài)數(shù)據(jù)集合,它可以使數(shù)據(jù)暫時(shí)從數(shù)據(jù)源中分離出來,因此可以把它看作是一個(gè)因此可以把它看作是一個(gè)“虛表虛表”。視圖是不能單獨(dú)存在。視圖是不能單獨(dú)存在的,它是依賴于某一數(shù)據(jù)庫而存在的。只有打開與

33、視圖相的,它是依賴于某一數(shù)據(jù)庫而存在的。只有打開與視圖相關(guān)的數(shù)據(jù)庫才能創(chuàng)建和使用視圖。關(guān)的數(shù)據(jù)庫才能創(chuàng)建和使用視圖。 4.4 視圖的創(chuàng)建和使用視圖的創(chuàng)建和使用 視圖可以增強(qiáng)數(shù)據(jù)的視圖可以增強(qiáng)數(shù)據(jù)的共享性共享性,保證不同的用戶在使用同一,保證不同的用戶在使用同一個(gè)數(shù)據(jù)庫時(shí),選擇各自最需要的數(shù)據(jù)源;視圖可以增強(qiáng)數(shù)據(jù)的個(gè)數(shù)據(jù)庫時(shí),選擇各自最需要的數(shù)據(jù)源;視圖可以增強(qiáng)數(shù)據(jù)的安全性,安全性,保證用戶只對與自己相關(guān)的數(shù)據(jù)進(jìn)行操作。由于在保證用戶只對與自己相關(guān)的數(shù)據(jù)進(jìn)行操作。由于在Visual FoxPro Visual FoxPro 系統(tǒng)環(huán)境下,允許使用多個(gè)關(guān)聯(lián)的表建立多表系統(tǒng)環(huán)境下,允許使用多個(gè)關(guān)聯(lián)的表

34、建立多表視圖,這不僅使多個(gè)表間建立了相互聯(lián)系,而且提高了數(shù)據(jù)的視圖,這不僅使多個(gè)表間建立了相互聯(lián)系,而且提高了數(shù)據(jù)的利用率利用率,豐富了數(shù)據(jù)的內(nèi)容。雖然視圖是一個(gè),豐富了數(shù)據(jù)的內(nèi)容。雖然視圖是一個(gè)“虛表虛表”,但是,但是可以利用視圖可以利用視圖更新源數(shù)據(jù)表更新源數(shù)據(jù)表中的數(shù)據(jù)。中的數(shù)據(jù)。 根據(jù)視圖數(shù)據(jù)的來源不同,視圖可以分為本地視根據(jù)視圖數(shù)據(jù)的來源不同,視圖可以分為本地視圖和遠(yuǎn)程視圖。圖和遠(yuǎn)程視圖。上一頁下一頁退 出313112/31/202112/31/2021n比較比較查詢:查詢:只讀,生成新文件,不是數(shù)據(jù)庫的組成部分,只讀,生成新文件,不是數(shù)據(jù)庫的組成部分,有多種輸出方式,不可以作為新的

35、數(shù)據(jù)源有多種輸出方式,不可以作為新的數(shù)據(jù)源視圖:視圖:讀寫,不生成新文件,是數(shù)據(jù)庫的組成部分,讀寫,不生成新文件,是數(shù)據(jù)庫的組成部分,只有一種輸出方式,只有一種輸出方式,可更新源數(shù)據(jù)表可更新源數(shù)據(jù)表,也可以作為新,也可以作為新的數(shù)據(jù)源的數(shù)據(jù)源n定義定義視圖:數(shù)據(jù)庫的一個(gè)組成部分,是基于源數(shù)據(jù)的視圖:數(shù)據(jù)庫的一個(gè)組成部分,是基于源數(shù)據(jù)的可更可更新新的動(dòng)態(tài)數(shù)據(jù)集合,是一個(gè)的動(dòng)態(tài)數(shù)據(jù)集合,是一個(gè)虛表虛表(兼有表和查詢的特兼有表和查詢的特點(diǎn)點(diǎn))基表(基表(base table):視圖中的源數(shù)據(jù)表。:視圖中的源數(shù)據(jù)表。n分類分類本地視圖:使用本地視圖:使用VFPSQL語法從語法從視圖或表視圖或表中選擇信

36、息中選擇信息遠(yuǎn)程視圖:使用遠(yuǎn)程遠(yuǎn)程視圖:使用遠(yuǎn)程SQL語法從語法從遠(yuǎn)程遠(yuǎn)程ODBC數(shù)據(jù)源表數(shù)據(jù)源表(例:(例:ACCESS,EXCEL)中選擇信息中選擇信息 上一頁下一頁退 出323212/31/202112/31/20211 創(chuàng)建本地視圖創(chuàng)建本地視圖n使用視圖設(shè)計(jì)器使用視圖設(shè)計(jì)器n“項(xiàng)目管理器項(xiàng)目管理器”-選中數(shù)據(jù)庫選中數(shù)據(jù)庫- -選擇選擇“本地視圖本地視圖”-選選“新建新建”n視圖設(shè)計(jì)器與查詢設(shè)計(jì)器的不同:視圖設(shè)計(jì)器與查詢設(shè)計(jì)器的不同:增加了一個(gè)增加了一個(gè)“更新條更新條件件”選項(xiàng)卡選項(xiàng)卡n使用使用CREATE SQL VIEW 命令命令 條件:對應(yīng)數(shù)據(jù)庫打開條件:對應(yīng)數(shù)據(jù)庫打開格式:格式:

37、CREATE SQL VIEW 視圖名;視圖名; AS SELECT-SQL 語句語句例例1:CREATE SQL VIEW js_view AS SELECT * FROM sjk!JS例例2:CSQL=“SELECT * FROM sjk!JS”(字符型變量)(字符型變量)CREATE SQL VIEW JS_VIEW AS &CSQL(宏替換)宏替換)上一頁下一頁退 出333312/31/202112/31/20212 使用視圖更新源表數(shù)據(jù)使用視圖更新源表數(shù)據(jù)n再次與查詢比較:再次與查詢比較:視圖可以更新基表,而查詢不行視圖可以更新基表,而查詢不行1. 使表可更新:使表可更新:“

38、更新條件更新條件”選項(xiàng)卡選項(xiàng)卡n在在“表表”下拉列表框中指定受設(shè)置影響的表下拉列表框中指定受設(shè)置影響的表n在在“字段名字段名”列表中列表中 選定表中的字段,至少應(yīng)選定表中的字段,至少應(yīng)設(shè)置一設(shè)置一個(gè)字段作為個(gè)字段作為“主關(guān)鍵字主關(guān)鍵字”及及“可更新字段可更新字段”n“發(fā)送發(fā)送SQL更新更新”復(fù)選框中可以設(shè)置是否允許對基表復(fù)選框中可以設(shè)置是否允許對基表的更新,它是更新的主開關(guān)的更新,它是更新的主開關(guān)=DBSETPROP (“視圖視圖名名”,“View”,”SendUpdates”,.T. )2. 設(shè)置關(guān)鍵字段設(shè)置關(guān)鍵字段 VFP用關(guān)鍵字段來唯一標(biāo)識(shí)那些已在視圖中修改過用關(guān)鍵字段來唯一標(biāo)識(shí)那些已在

39、視圖中修改過的源表的更新記錄。設(shè)置的源表的更新記錄。設(shè)置“關(guān)鍵字段關(guān)鍵字段”,可用來檢驗(yàn)更可用來檢驗(yàn)更新沖突新沖突上一頁下一頁退 出343412/31/202112/31/2021(1)指定可更新字段指定可更新字段 如果要設(shè)置給定表中部分或全部字段允許更新,如果要設(shè)置給定表中部分或全部字段允許更新,必須在該表的所有字段中設(shè)置必須在該表的所有字段中設(shè)置一個(gè)關(guān)鍵字段一個(gè)關(guān)鍵字段n“關(guān)鍵關(guān)鍵”列:鑰匙形,將字段設(shè)置為關(guān)鍵字段列:鑰匙形,將字段設(shè)置為關(guān)鍵字段命令設(shè)置:命令設(shè)置:=DBSETPROP (“視圖名視圖名.字段名字段名”,“Feild”, ;“KeyField” ,.T. )n“更新更新”列

40、:筆形,設(shè)置一個(gè)字段為可更新的列:筆形,設(shè)置一個(gè)字段為可更新的n“全部更新全部更新”:在一張已有關(guān)鍵字段表中的除該關(guān)鍵:在一張已有關(guān)鍵字段表中的除該關(guān)鍵字段外的所有字段均可設(shè)置為可更新字段外的所有字段均可設(shè)置為可更新命令設(shè)置:命令設(shè)置:=DBSETPROP (“視圖名視圖名.字段名字段名”,“Feild”, ;“Updatename” , “基表基表.字段名字段名” )上一頁下一頁退 出353512/31/202112/31/2021n 指定用指定用Updatable屬性進(jìn)行更新的字段屬性進(jìn)行更新的字段=DBSETPROP (“視圖名視圖名.字段名字段名”,“Feild”, ; “Updatable”,”T”) (2)控制如何檢查更新沖突控制如何檢查更新沖突n 若不同用戶同時(shí)更新基表數(shù)據(jù),當(dāng)發(fā)生時(shí)如何處理若不同用戶同時(shí)更新基表數(shù)據(jù),當(dāng)發(fā)生時(shí)如何處理? 使用使用“SQL WHERE”單選按鈕組設(shè)置更新檢查單選按鈕組設(shè)置

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論