access2003基礎(chǔ)教程第三章查詢_第1頁
access2003基礎(chǔ)教程第三章查詢_第2頁
access2003基礎(chǔ)教程第三章查詢_第3頁
access2003基礎(chǔ)教程第三章查詢_第4頁
access2003基礎(chǔ)教程第三章查詢_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第三章  查詢   本章內(nèi)容  查詢的概念、種類和作用。 各種查詢的建立。 查詢的應(yīng)用。  一、查詢的概念 1什么是查詢 查詢就是依據(jù)一定的查詢條件,對(duì)數(shù)據(jù)庫中的數(shù)據(jù)信息進(jìn)行查找。它與表一樣,都是數(shù)據(jù)庫的對(duì)象。它允許用戶依據(jù)準(zhǔn)則或查詢條件抽取表中的記錄與字段。Access 2003 中的查詢可以對(duì)一個(gè)數(shù)據(jù)庫中的一個(gè)或多個(gè)表中存儲(chǔ)的數(shù)據(jù)信息進(jìn)行查找、統(tǒng)計(jì)、計(jì)算、排序等。 有多種設(shè)計(jì)查詢的方法,用戶可以通過查詢?cè)O(shè)計(jì)器或查詢?cè)O(shè)計(jì)向?qū)碓O(shè)計(jì)查詢。  查詢結(jié)果將以工作表的形式顯示出來。

2、顯示查詢結(jié)果的工作表又稱為結(jié)果集,它雖然與基本表有著十分相似的外觀,但它并不是一個(gè)基本表,而是符合查詢條件的記錄集合。其內(nèi)容是動(dòng)態(tài)的。 2. 查詢的種類 Access 2003 提供多種查詢方式,查詢方式可分為選擇查詢、匯總查詢、交叉表查詢、重復(fù)項(xiàng)查詢、不匹配查詢、動(dòng)作查詢、SQL特定查詢、以及多表之間進(jìn)行的關(guān)系查詢。這些查詢方式總結(jié)起來有4類:選擇查詢、特殊用途查詢、操作查詢和SQL專用查詢。 3. 查詢的作用和功能 查詢是數(shù)據(jù)庫提供的一種功能強(qiáng)大的管理工具,可以按照使用者所指定的各種方式來進(jìn)行查詢。查詢基本上可滿足用戶以下需求: 指定所要查詢的基本表

3、。 指定要在結(jié)果集中出現(xiàn)的字段。 指定準(zhǔn)則來限制結(jié)果集中所要顯示的記錄。 指定結(jié)果集中記錄的排序次序。 對(duì)結(jié)果集中的記錄進(jìn)行數(shù)學(xué)統(tǒng)計(jì)。 將結(jié)果集制成一個(gè)新的基本表。 在結(jié)果集的基礎(chǔ)上建立窗體和報(bào)表。 根據(jù)結(jié)果集建立圖表。 在結(jié)果集中進(jìn)行新的查詢。 查找不符合指定條件的記錄。 建立交叉表形式的結(jié)果集。 在其他數(shù)據(jù)庫軟件包生成的基本表中進(jìn)行查詢。作為對(duì)數(shù)據(jù)的查找,查詢與篩選有許多相似的地方,但二者是有本質(zhì)區(qū)別的。查詢是數(shù)據(jù)庫的對(duì)象,而篩選是數(shù)據(jù)庫的操作。下表指出了查詢和篩選之間的不同: 功能        &

4、#160;                               查詢        篩選用作窗體或報(bào)表的基礎(chǔ)         

5、60;              是          是排序結(jié)果中的記錄                         

6、60;  是          是如果允許編輯,就編輯結(jié)果中的數(shù)據(jù)            是          是向表中添加新的記錄集              

7、;          是          否只選擇特定的字段包含在結(jié)果中                是          否作為一個(gè)獨(dú)立的對(duì)象存儲(chǔ)在數(shù)據(jù)庫中 

8、60;          是          否不用打開基本表、查詢和窗體就能查看結(jié)果      是          否在結(jié)果中包含計(jì)算值和集合值           

9、;       是          否            二、創(chuàng)建查詢 用戶可以打開數(shù)據(jù)庫窗口,選擇【查詢】對(duì)象,然后單擊工具欄中的【新建】按鈕,彈出【新建查詢】對(duì)話框。 1. 簡(jiǎn)單選擇查詢 簡(jiǎn)單選擇查詢通過簡(jiǎn)單查詢向?qū)砜焖偻瓿伞?#160;  如果要添加匯總,則進(jìn)行下一步操作而不

10、選擇【明細(xì)】。   下面是匯總選項(xiàng):  如果不用向?qū)гO(shè)計(jì)查詢而用查詢?cè)O(shè)計(jì)器進(jìn)行查詢?cè)O(shè)計(jì),并且要在查詢中添加匯總選項(xiàng),則需要手工添加一些匯總函數(shù):Sum     求總和Avg     平均值Min     最小值Max     最大值Count   計(jì)數(shù)StDev   標(biāo)準(zhǔn)差Var     方差First

11、60;  第一條記錄Last    最后一條記錄 2. 交叉表查詢向?qū)?#160;交叉表查詢以表的形式顯示出摘要的數(shù)值,例如某一字段的總和、計(jì)數(shù)、平均等。并按照列在數(shù)據(jù)表左側(cè)的一組標(biāo)題和列在數(shù)據(jù)表上方的另一組標(biāo)題,將這些值分組,在數(shù)據(jù)工作表中分別以行標(biāo)題和列標(biāo)題的形式顯示出來,用于分析和比較。例如:產(chǎn)品表如下 要從基本表中得到如下信息:某一類別產(chǎn)品的“庫存量”及其“供應(yīng)商”。 方法步驟圖解如下:    3. 查找重復(fù)項(xiàng)查詢向?qū)?#160;查找重要項(xiàng)查詢向?qū)В梢詭椭脩粼跀?shù)據(jù)表中查找具

12、有一個(gè)或多個(gè)字段內(nèi)容相同的記錄。此向?qū)Э梢杂脕泶_定基本表中是否存在重復(fù)記錄。如果要得到如下面所示的結(jié)果集:  則可進(jìn)行如下操作步驟:     4. 查找不匹配項(xiàng)查詢向?qū)?#160;查找不匹配項(xiàng)查詢向?qū)?,是用來幫助用戶在?shù)據(jù)中查找不匹配記錄的向?qū)?。如要查找【產(chǎn)品】表中的供應(yīng)商ID與【供應(yīng)商】表中的供應(yīng)商ID不匹配的記錄。步驟分解如下:         5. 用查詢?cè)O(shè)計(jì)器創(chuàng)建查詢 使用向?qū)е荒芙⒑?jiǎn)單的、特定的查詢。Access

13、2003 還提供了一個(gè)功能強(qiáng)大的查詢?cè)O(shè)計(jì)器,通過它不僅可以從頭設(shè)計(jì)一個(gè)查詢,而且還可能對(duì)已有的查詢進(jìn)行編輯和修改。 下圖即為查詢?cè)O(shè)計(jì)器: 【設(shè)計(jì)器】主要分為上下兩部分,上面放置數(shù)據(jù)庫表、顯示關(guān)系和字段;下面給出設(shè)計(jì)網(wǎng)格,網(wǎng)格中有如下行標(biāo)題: 字段     查詢工作表中所使用的字段名 表       該字段所來自的數(shù)據(jù)表 排序     是否按該字段排序 顯示     該字段是否在結(jié)果集工作表中顯示

14、條件     查詢條件 或       用來提供多個(gè)查詢條件 上面的工具欄上有如下按鈕:   視圖         每個(gè)查詢有5種視圖(設(shè)計(jì)、數(shù)據(jù)表、SQL、數(shù)據(jù)透視表、數(shù)據(jù)透視圖表) 查詢類型     選擇、交叉表、更新、追加、生成表、刪除。 運(yùn)行         運(yùn)

15、行查詢 顯示表       顯示所有可用的表 總計(jì)         在查詢?cè)O(shè)計(jì)區(qū)中增加【總計(jì)】行,可用于求和、求平均等 上限值       用戶可指定顯示范圍 屬性         顯示當(dāng)前對(duì)象屬性 生成器       彈出【表達(dá)式生成器】 數(shù)據(jù)庫窗口

16、0;  回到數(shù)據(jù)庫窗口 新對(duì)象       建立數(shù)據(jù)庫的新對(duì)象 6. 用查詢?cè)O(shè)計(jì)器進(jìn)一步設(shè)計(jì)查詢  添加表/查詢  更改表或查詢間的關(guān)聯(lián) 刪除表/查詢 添加插入查詢的字段 刪除、移動(dòng)字段 設(shè)置查詢結(jié)果的排序 設(shè)置字段顯示屬性  7. 查詢及字段的屬性設(shè)置   8. 設(shè)置查詢準(zhǔn)則 查詢?cè)O(shè)計(jì)視圖中的準(zhǔn)則就是查詢記錄應(yīng)符合的條件。它與在設(shè)計(jì)表時(shí)設(shè)置字段的有效性規(guī)則的方法相似。  準(zhǔn)則表達(dá)式And   &

17、#160;         與操作          “A” And “B”O(jiān)r              或操作          “A” Or “B”BetweenAnd   

18、 指定范圍操作    Between “A” And “B”In              指定枚舉范圍    In(“A,B,C”)Like            指定模式字符串  Like “A?Af#!09*”    如:A u D 3 q 98e32w

19、w  在表達(dá)式中使用日期與時(shí)間在準(zhǔn)則表達(dá)式中使用日期/時(shí)間時(shí),必須要在日期值兩邊加上“#”。下面寫法都是正確的:#Feb12,98#、#2/12/98#、#1221998#。相關(guān)內(nèi)部函數(shù):Date()      返回系統(tǒng)當(dāng)前日期Year()      返回日期中的年份Month()     返回日期中的月份Day()       返回日期中的日數(shù)Weekday()  

20、 返回日期中的星期數(shù)Hour()      返回時(shí)間中的小時(shí)數(shù)Now()       返回系統(tǒng)當(dāng)前的日期與時(shí)間  表達(dá)式中的計(jì)算A+B         兩個(gè)數(shù)字型字段值相加,兩個(gè)文本字符串連接A-B         兩個(gè)數(shù)字型字段值相減A*B      

21、60;  兩個(gè)數(shù)字型字段值相乘A/B         兩個(gè)數(shù)字型字段值相除AB         兩個(gè)數(shù)字型字段值相除四舍五入取整AB         A的B次冪Mod(A,B)    取余,A除以B得余數(shù)A&B         文本

22、型字段A和B連接  使用準(zhǔn)則表達(dá)式生成器   三、創(chuàng)建特殊用途查詢 數(shù)據(jù)查詢未必總是靜態(tài)地提取統(tǒng)一信息。只要用戶把搜索類別輸入到一個(gè)特定的對(duì)話框中,就能在運(yùn)行查詢時(shí)對(duì)其進(jìn)行修改。例如:當(dāng)用戶希望能夠規(guī)定所需要的數(shù)據(jù)組進(jìn),就需要使用一個(gè)參數(shù)查詢。另一個(gè)特殊用途的查詢就是把字段值自動(dòng)填充到相關(guān)表中的“自動(dòng)查詢”查詢?!白詣?dòng)查詢”查詢通過查找用戶輸入在匹配字段中的數(shù)值,并把用戶指定的信息輸入到相關(guān)表的字段中。 1. 參數(shù)查詢 如用戶想要查詢價(jià)格在1030元之間的各種產(chǎn)品,并想知道產(chǎn)品的供應(yīng)商和產(chǎn)品的類別。這需要向查詢?cè)O(shè)計(jì)器中添加【

23、產(chǎn)品】、【供應(yīng)商】、【類別】三個(gè)表。具體步驟如下: 首先打開查詢?cè)O(shè)計(jì)器,將數(shù)據(jù)表添加到上面。 添加字段。并給出條件:Between 輸入最低值 And 輸入最高值  然后運(yùn)行,輸入兩參數(shù):  可查看到結(jié)果:  如要改變參數(shù)類型,可打開【查詢】|【參數(shù)】對(duì)話框來解決: 2. 自動(dòng)查找查詢 自動(dòng)查詢查詢使用具有一對(duì)多關(guān)系的兩個(gè)表,若要?jiǎng)?chuàng)建一個(gè)自動(dòng)查找查詢,首先把兩個(gè)相關(guān)表添加到查詢?cè)O(shè)計(jì)窗口,然后把匹配字段從“多”方拖到網(wǎng)格上。這種查詢是查找“一”方中的相關(guān)記錄并從匹配記錄中的其他字段檢索數(shù)值。下面創(chuàng)

24、建一個(gè)在【供應(yīng)商】列中選擇一個(gè)供應(yīng)商時(shí),自動(dòng)填充【聯(lián)系人姓名】、【地址】、【郵政編碼】、【電話】的自動(dòng)查找查詢。具體操作如下:  運(yùn)行,在底部通過選擇供應(yīng)商而添加記錄,其中“一”方表中的公司名稱、聯(lián)系人姓名、地址、郵政編碼、電話等字段將自動(dòng)加上。而“多”方的產(chǎn)品名稱則須人工加上。  3. 交叉表查詢 交叉表查詢是一種特殊的合計(jì)查詢類型,可以使數(shù)據(jù)按電子表格的方式顯示查詢結(jié)果集,這種方式在水平與垂直方向同時(shí)對(duì)數(shù)據(jù)進(jìn)行分組,使數(shù)據(jù)的顯示更為緊湊。這一點(diǎn)在前面已討論過了。 下面我們?cè)賱?chuàng)建一個(gè)雇員銷售訂單金額匯總表。由于每一個(gè)定單中有多個(gè)訂單

25、明細(xì)產(chǎn)品,所以金額必須求和。所以按訂單分組,利用表達(dá)式數(shù)量*單價(jià)求和即可,并按雇員分列之。     四、操作查詢     操作查詢用于同時(shí)對(duì)一個(gè)或多個(gè)表執(zhí)行全局?jǐn)?shù)據(jù)管理操作。操作查詢可以對(duì)數(shù)據(jù)表中原有的數(shù)據(jù)內(nèi)容進(jìn)行編輯,對(duì)符合條件的數(shù)據(jù)進(jìn)行成批的修改。因此,應(yīng)該備份數(shù)據(jù)庫。 1. 更新查詢 更新查詢用于同時(shí)更改許多記錄中的一個(gè)或多個(gè)字段值,用戶可以添加一些條件,這些條件除了更新多個(gè)表中的記錄外,還篩選要更改的記錄。大部分更新查詢可以用表達(dá)式來規(guī)定更新規(guī)則。如下表實(shí)例: 字段類

26、型    表達(dá)式          結(jié)果貨幣        單價(jià)*1.05     把“單價(jià)”增加5%日期        #4/25/01#       把日期更改為2001年4月25日文本    &

27、#160;   “已完成”      把數(shù)據(jù)更改為“已完成”文本        “總”&單價(jià)   把字符“總”添加到“單價(jià)”字段數(shù)據(jù)的開頭是/否       Yes             把特定的“否”數(shù)據(jù)更改為“是”  

28、0; 2. 追加查詢 當(dāng)用戶要把一個(gè)或多個(gè)表的記錄添加到其他表時(shí),就會(huì)用到追加查詢。追加查詢可以從另一個(gè)數(shù)據(jù)庫表中讀取數(shù)據(jù)記錄并向當(dāng)前表內(nèi)添加記錄,由于兩個(gè)表之間的字段定義可能不同,追加查詢只能添加相互匹配的字段內(nèi)容,而那些不對(duì)應(yīng)的字段將被忽略。     3. 刪除查詢 刪除查詢是所有查詢操作中最危險(xiǎn)的一個(gè)。刪除查詢是將整個(gè)記錄全部刪除而不只是刪除查詢所使用的字段。查詢所使用的字段只是用來作為查詢的條件??梢詮膯蝹€(gè)表刪除記錄,也可以通過級(jí)聯(lián)刪除相關(guān)記錄而從相關(guān)表中刪除記錄。 4. 生成表查詢 &

29、#160;  生成表查詢可以從一個(gè)或多個(gè)表/查詢的記錄中制作一個(gè)新表。在下列情況下使用生成表查詢: 把記錄導(dǎo)出到其數(shù)據(jù)庫。如創(chuàng)建一個(gè)交易已完成的訂單表,以便送到其它部門。 把記錄導(dǎo)出到Excel/Word之類的非關(guān)系應(yīng)用系統(tǒng)中。 對(duì)被導(dǎo)出的信息進(jìn)行控制。如篩選出機(jī)密或不相干的數(shù)據(jù)。 用作在一特定時(shí)間出現(xiàn)的一個(gè)報(bào)表的記錄源。 通過添加一個(gè)記錄集來保存初始文件,然后用一個(gè)追加查詢向該記錄集中添加新記錄。 用一個(gè)新記錄集替換現(xiàn)有的表中的記錄。例如,要以【產(chǎn)品】表為基礎(chǔ),查詢出【產(chǎn)品名稱】、【類別】、【單價(jià)】、【庫存量】并生成一個(gè)新表:    

30、0; 五、SQL專用查詢 結(jié)構(gòu)化查詢語言(即SQL語言)是最重要的關(guān)系數(shù)據(jù)庫操作語言,在過去的幾年中,SQL語言已經(jīng)發(fā)展成為標(biāo)準(zhǔn)的計(jì)算機(jī)數(shù)據(jù)庫語言。1986年美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì)ANSI(American National Standards Institute)和國(guó)際標(biāo)準(zhǔn)化組織ISO(International Standards Organization)頒布了SQL正式標(biāo)準(zhǔn),同是時(shí)確認(rèn)SQL語言為數(shù)據(jù)庫操作的標(biāo)準(zhǔn)語言,現(xiàn)在已有100多種遍布在從微機(jī)到大型機(jī)上的數(shù)據(jù)庫產(chǎn)品SQL產(chǎn)品。SQL語言基本上獨(dú)立于數(shù)據(jù)庫本身及其使用的機(jī)器、網(wǎng)絡(luò)、操作系統(tǒng),基于SQL的DBMS開發(fā)商所

31、提供的產(chǎn)品一般都具有良好的可移植性。SQL語言最初由IBM的研究人員在70年代提出,最初的名稱為SEQUEL(結(jié)果),從80年代開始改名為SQL,看似是SEQUEL的縮寫,但一般又理解為結(jié)構(gòu)化查詢語言Structure Query Language。下面討論1991年ANSI制定的SQL語言的核心。VFP的SELECT-SQL可以據(jù)此理解之。 1對(duì)單個(gè)表進(jìn)行查詢下面考慮SQL對(duì)單個(gè)表進(jìn)行簡(jiǎn)單的查詢。為了進(jìn)行實(shí)例分析,下面我們先建立三個(gè)表: 學(xué)生信息表ST:學(xué)號(hào) *姓名主修年齡100JONESHISTORY21150PARKSACCOUNTING19200BAKERMATH5

32、0250GLASSHISTORY50300BAKERACCOUNTING41350RUSSELLMATH20400RYEACCOUNTING18450JONESHISTORY24 學(xué)生注冊(cè)表EN:學(xué)號(hào) *班名注冊(cè)號(hào)100A1001150B2001200A1002200C2001300C1001400B2002400B1001400C2002450B2003 面授安排表CL:班名 *時(shí)間教室B200MTH8R001A100MWF3R002B100MWF8R002C100MWT3R003C200MWF8R004  使用SQL進(jìn)行投影投影是指取表的某些列的字段值。下面是

33、使用SQL語句進(jìn)行投影的例子,從ST表中列出需要的學(xué)號(hào)、姓名和主修: SELECT 學(xué)號(hào),姓名,主修 FROM ST學(xué)號(hào)   姓名         主修100    JONES        HISTORY150    PARKS        ACCOUNTING200 

34、60;  BAKER        MATH250    GLASS        HISTORY300    BAKER        ACCOUNTING350    RUSSELL      MATH400  &#

35、160; RYE          ACCOUNTING450    JONES        HISTORY  SELECT 主修 FROM ST主修  HISTORY          ACCOUNTING       MATH 

36、60;           HISTORY          ACCOUNTING       MATH             ACCOUNTING       HISTORY    SE

37、LECT DISTINCT 主修 FROM ST主修  ACCOUNTING       HISTORY          MATH     使用SQL進(jìn)行選擇選擇是指到表的某些行的記錄值。請(qǐng)看下面的例子: SELECT 學(xué)號(hào),姓名,主修,年齡 FROM ST WHERE 主修='MATHSELECT * FROM ST WHERE 主修='MATH 學(xué)號(hào)  姓名 

38、60;       主修             年齡  200   BAKER        MATH              50  350 &

39、#160; RUSSELL      MATH              20 上述兩條件命令的結(jié)果是一樣的。我們可以將投影和選擇進(jìn)行合并如下: SELECT 姓名,主修,年齡 FROM ST WHERE 主修='MATH  姓名        主修     &

40、#160;      年齡    BAKER        MATH              50    RUSSELL      MATH        &

41、#160;     20 SELECT 姓名,主修,年齡 FROM ST WHERE 主修='MATHAND 年齡>21  姓名         主修             年齡    BAKER        MATH&#

42、160;             50  SELECT 姓名,主修,年齡 FROM ST WHERE 主修 IN('MATH,'ACCOUNTING)  姓名         主修             年齡  

43、 PARKS        ACCOUNTING         19   BAKER        MATH               50   BAKER  

44、60;     ACCOUNTING         41   RUSSELL      MATH               20   RYE         

45、; ACCOUNTING         18 SELECT 姓名,主修,年齡 FROM ST WHERE 主修 NOT IN('MATH,'ACCOUNTING)  姓名         主修             年齡   JONES &

46、#160;      HISTORY            21   GLASS        HISTORY            50   JONES    

47、0;   HISTORY            24  SQL排序SELECT 姓名,主修,年齡 FROM ST WHERE 主修='ACCOUNTING ORDER BY 姓名  姓名         主修             年齡&#

48、160;  BAKER        ACCOUNTING         41   PARKS        ACCOUNTING         19   RYE      &

49、#160;   ACCOUNTING         18SELECT 姓名,主修,年齡 FROM ST WHERE 主修 IN('MATH,'ACCOUNTING)  ORDER BY 姓名 DESC,年齡 ASC  姓名        主修            年齡 

50、  RYE          ACCOUNTING         18   RUSSELL      MATH               20   PARKS

51、0;       ACCOUNTING         19   BAKER        ACCOUNTING         41   BAKER        MATH  &

52、#160;            50  SQL內(nèi)置函數(shù)SQL主要提供了前面我們提到的五個(gè)內(nèi)置函數(shù):COUNT、SUM、AVG、MAX、MIN。SELECT COUNT(*) FROM ST  CNT      8上述語句計(jì)算表ST中的行數(shù),并用一行一列表示出來。注意:除非和GROUP BY相連,在查詢的項(xiàng)中SELECT后內(nèi)置函數(shù)一般不和字段名一起使用。如下面的查詢語句雖然不是非法的,但結(jié)果的含義不清:SELECT 姓名,CO

53、UNT(*)  姓名        CNT     JONES        8請(qǐng)思考下面的兩個(gè)查詢語句的結(jié)果:SELECT COUNT(主修) FROM ST  Cnt_主修      8 ?SELECT COUNT(DISTINCT 主修) FROM ST  DCnt_主修      3  SQ

54、L內(nèi)置函數(shù)和分組為了增強(qiáng)統(tǒng)計(jì)內(nèi)置函數(shù)的功能,內(nèi)置函數(shù)可以和分組函數(shù)合用,將源表中的數(shù)據(jù)分組,再對(duì)每一分組生成一個(gè)匯總行。例如:學(xué)生可以按照主修專業(yè)進(jìn)行分組,這意味著每一個(gè)專業(yè)將形成一個(gè)分組,然后可以對(duì)每一組進(jìn)行一定的統(tǒng)計(jì)。 SELECT 主修,COUNT(*) FROM ST GROUP BY 主修  主修              Cnt ACCOUNTING       &

55、#160; 3HISTORY            3MATH               2 有時(shí),我們不需要得到每一個(gè)分組的值,例如,我們對(duì)學(xué)生按照專業(yè)進(jìn)行分組,然后只需要具有兩個(gè)以上的行數(shù)的分組,在這種情況下,我們需要用到SQL中的HAVING關(guān)鍵字對(duì)不符合條件的分組進(jìn)行過濾。 下面的SQL語句可以統(tǒng)計(jì)出具有兩個(gè)以上學(xué)生的

56、專業(yè),并統(tǒng)計(jì)該專業(yè)的學(xué)生數(shù)。 SELECT 主修,COUNT(*) FROM ST GROUP BY 主修 HAVING COUNT(*)>2  主修              Cnt ACCOUNTING         3HISTORY          &#

57、160; 3 在上面的查詢中,還可以對(duì)查詢的學(xué)生進(jìn)行條件選擇,使用關(guān)鍵字WHERE進(jìn)行查詢,但是這樣會(huì)產(chǎn)生一定的模糊性,請(qǐng)看下例的結(jié)果,分析之: SELECT 主修,AVG(年齡) FROM ST WHERE 姓名='JONES' GROUP BY 主修 HAVING COUNT(*)>1  主修              Avg_年齡 HISTORY     &#

58、160;      22.5 SELECT 主修,AVG(年齡) FROM ST  GROUP BY 主修 HAVING COUNT(*)>2  主修              Avg_年齡 ACCOUNTING         26.00HISTORY    &

59、#160;       31.67 SELECT 姓名,主修,AVG(年齡) FROM ST WHERE 姓名 IN('JONES','BAKER') GROUP BY 主修 HAVING COUNT(*)>0  姓名      主修              Avg_年齡 JONES &#

60、160;  HISTORY            22.50 SELECT 姓名,主修,AVG(年齡) FROM ST WHERE 姓名 IN('JONES','BAKER') GROUP BY 主修 HAVING COUNT(*)>1  姓名      主修          &

61、#160;   Avg_年齡 BAKER    ACCOUNTING         41.00JONES    HISTORY            22.50BAKER    MATH        

62、60;      50.00 從上述結(jié)果來看,首先選擇適合條件的學(xué)生,對(duì)選擇出來的學(xué)生進(jìn)行分組,去除不適合HAVING條件的分組,顯示得到結(jié)果。 2對(duì)多個(gè)表進(jìn)行查詢 下面我們將討論基于兩個(gè)或更多的表的SQL查詢語句。下面的例子基本上針對(duì)ST、CL和EN三個(gè)表而言。學(xué)生信息表ST:學(xué)號(hào) *姓名主修年齡100JONESHISTORY21150PARKSACCOUNTING19200BAKERMATH50250GLASSHISTORY50300BAKERACCOUNTING41350RUSSELLMATH20400RYE

63、ACCOUNTING18450JONESHISTORY24學(xué)生注冊(cè)表EN:學(xué)號(hào) *班名注冊(cè)號(hào)100A1001150B2001200A1002200C2001300C1001400B2002400B1001400C2002450B2003面授安排表CL:班名 *時(shí)間教室B200MTH8R001A100MWF3R002B100MWF8R002C100MWT3R003C200MWF8R004  帶有子查詢的SQL查詢語句假設(shè)我們需要知道入學(xué)到A100班的學(xué)生的名字,則來通過兩個(gè)步驟:首先通過條件班名為'A100在EN表中找到學(xué)生的學(xué)號(hào),然后通過上面找到的學(xué)號(hào)'100和

64、9;200在ST表中找出這些學(xué)生的姓名。如下面的兩個(gè)查詢語句:SELECT 學(xué)號(hào) FROM EN WHERE 班名='A100學(xué)號(hào)100200SELECT 姓名 FROM ST WHERE 學(xué)號(hào) IN('100,'200)姓名JONESBAKER我們可以將上述兩條語句進(jìn)行結(jié)合就可能直接得到我們需要的結(jié)果:SELECT 姓名 FROM ST WHERE 學(xué)號(hào) IN(SELECT 學(xué)號(hào) FROM EN WHERE 班名='A100)姓名JONESBAKER我們將第二個(gè)查詢語句稱為子查詢(SUBQUERY),它嵌套在主查詢的條件中。這種查詢方式是很有用的,但要注意子查

65、詢的結(jié)果與主查詢的條件的類型匹配問題。對(duì)于一般的SQL查詢語句而言,子查詢可以嵌套二層以上甚至更多,但VFP對(duì)子查詢的深度進(jìn)行了限制。請(qǐng)看下面的語句:SELECT CL.班名 FROM CL WHERE 時(shí)間='MWF8班名B100C200SELECT EN.學(xué)號(hào) FROM EN WHERE EN.班名 IN(SELECT CL.班名 FROM CL WHERE 時(shí)間='MWF8)學(xué)號(hào)200400400SELECT ST.姓名 FROM ST WHERE ST.學(xué)號(hào) IN(SELECT EN.學(xué)號(hào) FROM EN WHERE EN.班名 IN(SELECT CL.班名 FROM

66、 CL WHERE 時(shí)間='MWF8)結(jié)果將提示:SQL:Subquery nesting is too deep按正常的理解,其結(jié)果應(yīng)是:姓名BAKERRYE也就是下面的語句的結(jié)果:SELECT ST.姓名 FROM ST WHERE ST.學(xué)號(hào) IN('200,'400,'400)同時(shí)通過上述查詢,我們得到一個(gè)重要的結(jié)論,RYE的報(bào)名有問題,或要將面授時(shí)間作調(diào)整,大家可以思考為什么?  SQL聯(lián)接查詢子查詢的結(jié)果總是來自一個(gè)表,如果同時(shí)提供來自不同的表的數(shù)據(jù)(如每一個(gè)學(xué)生的學(xué)號(hào)、姓名、所在班名等),則必須將多個(gè)表(ST、EN)相聯(lián)接。請(qǐng)看下面的語句

67、: SELECT ST.學(xué)號(hào),ST.姓名,EN.班名,EN.注冊(cè)號(hào) FROM ST,EN WHERE ST.學(xué)號(hào)=EN.學(xué)號(hào) 學(xué)號(hào)   姓名         班名        注冊(cè)號(hào)100    JONES        A100         1150   

溫馨提示

  • 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)論