版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年AI智能營(yíng)銷技術(shù)合作合同樣本
- 二零二五年度生態(tài)環(huán)保木工加工廠合作合同4篇
- 2025年醫(yī)療護(hù)士協(xié)議
- 2025年增資協(xié)議書面詳細(xì)約定內(nèi)容文本
- 2025年產(chǎn)品分銷渠道協(xié)定書
- 2025年家裝風(fēng)水合同
- 2025年埋頭競(jìng)業(yè)禁止合同
- 2025版智能家居燈具音響設(shè)備一體化采購合同4篇
- 2025年媒介環(huán)境分析協(xié)議
- 2025版學(xué)校食堂豬肉食品安全風(fēng)險(xiǎn)評(píng)估與監(jiān)控合同2篇
- 口腔執(zhí)業(yè)醫(yī)師定期考核試題(資料)帶答案
- 2024人教版高中英語語境記單詞【語境記單詞】新人教版 選擇性必修第2冊(cè)
- 能源管理總結(jié)報(bào)告
- 挖掘機(jī)售后保養(yǎng)及維修服務(wù)協(xié)議(2024版)
- 充電樁巡查記錄表
- 阻燃材料的阻燃機(jī)理建模
- CJT 511-2017 鑄鐵檢查井蓋
- 配電工作組配電網(wǎng)集中型饋線自動(dòng)化技術(shù)規(guī)范編制說明
- 2024高考物理全國(guó)乙卷押題含解析
- 介入科圍手術(shù)期護(hù)理
- 青光眼術(shù)后護(hù)理課件
評(píng)論
0/150
提交評(píng)論