




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第三章 查詢(xún) 本章內(nèi)容 查詢(xún)的概念、種類(lèi)和作用。 各種查詢(xún)的建立。 查詢(xún)的應(yīng)用。 一、查詢(xún)的概念 1什么是查詢(xún) 查詢(xún)就是依據(jù)一定的查詢(xún)條件,對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)信息進(jìn)行查找。它與表一樣,都是數(shù)據(jù)庫(kù)的對(duì)象。它允許用戶(hù)依據(jù)準(zhǔn)則或查詢(xún)條件抽取表中的記錄與字段。Access 2003 中的查詢(xún)可以對(duì)一個(gè)數(shù)據(jù)庫(kù)中的一個(gè)或多個(gè)表中存儲(chǔ)的數(shù)據(jù)信息進(jìn)行查找、統(tǒng)計(jì)、計(jì)算、排序等。 有多種設(shè)計(jì)查詢(xún)的方法,用戶(hù)可以通過(guò)查詢(xún)?cè)O(shè)計(jì)器或查詢(xún)?cè)O(shè)計(jì)向?qū)?lái)設(shè)計(jì)查詢(xún)。 查詢(xún)結(jié)果將以工作表的形式顯示出來(lái)。
2、顯示查詢(xún)結(jié)果的工作表又稱(chēng)為結(jié)果集,它雖然與基本表有著十分相似的外觀,但它并不是一個(gè)基本表,而是符合查詢(xún)條件的記錄集合。其內(nèi)容是動(dòng)態(tài)的。 2. 查詢(xún)的種類(lèi) Access 2003 提供多種查詢(xún)方式,查詢(xún)方式可分為選擇查詢(xún)、匯總查詢(xún)、交叉表查詢(xún)、重復(fù)項(xiàng)查詢(xún)、不匹配查詢(xún)、動(dòng)作查詢(xún)、SQL特定查詢(xún)、以及多表之間進(jìn)行的關(guān)系查詢(xún)。這些查詢(xún)方式總結(jié)起來(lái)有4類(lèi):選擇查詢(xún)、特殊用途查詢(xún)、操作查詢(xún)和SQL專(zhuān)用查詢(xún)。 3. 查詢(xún)的作用和功能 查詢(xún)是數(shù)據(jù)庫(kù)提供的一種功能強(qiáng)大的管理工具,可以按照使用者所指定的各種方式來(lái)進(jìn)行查詢(xún)。查詢(xún)基本上可滿(mǎn)足用戶(hù)以下需求: 指定所要查詢(xún)的基本表
3、。 指定要在結(jié)果集中出現(xiàn)的字段。 指定準(zhǔn)則來(lái)限制結(jié)果集中所要顯示的記錄。 指定結(jié)果集中記錄的排序次序。 對(duì)結(jié)果集中的記錄進(jìn)行數(shù)學(xué)統(tǒng)計(jì)。 將結(jié)果集制成一個(gè)新的基本表。 在結(jié)果集的基礎(chǔ)上建立窗體和報(bào)表。 根據(jù)結(jié)果集建立圖表。 在結(jié)果集中進(jìn)行新的查詢(xún)。 查找不符合指定條件的記錄。 建立交叉表形式的結(jié)果集。 在其他數(shù)據(jù)庫(kù)軟件包生成的基本表中進(jìn)行查詢(xún)。作為對(duì)數(shù)據(jù)的查找,查詢(xún)與篩選有許多相似的地方,但二者是有本質(zhì)區(qū)別的。查詢(xún)是數(shù)據(jù)庫(kù)的對(duì)象,而篩選是數(shù)據(jù)庫(kù)的操作。下表指出了查詢(xún)和篩選之間的不同: 功能 &
4、#160; 查詢(xún) 篩選用作窗體或報(bào)表的基礎(chǔ)
5、60; 是 是排序結(jié)果中的記錄
6、60; 是 是如果允許編輯,就編輯結(jié)果中的數(shù)據(jù) 是 是向表中添加新的記錄集
7、; 是 否只選擇特定的字段包含在結(jié)果中 是 否作為一個(gè)獨(dú)立的對(duì)象存儲(chǔ)在數(shù)據(jù)庫(kù)中
8、60; 是 否不用打開(kāi)基本表、查詢(xún)和窗體就能查看結(jié)果 是 否在結(jié)果中包含計(jì)算值和集合值
9、; 是 否 二、創(chuàng)建查詢(xún) 用戶(hù)可以打開(kāi)數(shù)據(jù)庫(kù)窗口,選擇【查詢(xún)】對(duì)象,然后單擊工具欄中的【新建】按鈕,彈出【新建查詢(xún)】對(duì)話(huà)框。 1. 簡(jiǎn)單選擇查詢(xún) 簡(jiǎn)單選擇查詢(xún)通過(guò)簡(jiǎn)單查詢(xún)向?qū)?lái)快速完成。 如果要添加匯總,則進(jìn)行下一步操作而不
10、選擇【明細(xì)】。 下面是匯總選項(xiàng): 如果不用向?qū)гO(shè)計(jì)查詢(xún)而用查詢(xún)?cè)O(shè)計(jì)器進(jìn)行查詢(xún)?cè)O(shè)計(jì),并且要在查詢(xún)中添加匯總選項(xiàng),則需要手工添加一些匯總函數(shù):Sum 求總和Avg 平均值Min 最小值Max 最大值Count 計(jì)數(shù)StDev 標(biāo)準(zhǔn)差Var 方差First
11、60; 第一條記錄Last 最后一條記錄 2. 交叉表查詢(xún)向?qū)?#160;交叉表查詢(xún)以表的形式顯示出摘要的數(shù)值,例如某一字段的總和、計(jì)數(shù)、平均等。并按照列在數(shù)據(jù)表左側(cè)的一組標(biāo)題和列在數(shù)據(jù)表上方的另一組標(biāo)題,將這些值分組,在數(shù)據(jù)工作表中分別以行標(biāo)題和列標(biāo)題的形式顯示出來(lái),用于分析和比較。例如:產(chǎn)品表如下 要從基本表中得到如下信息:某一類(lèi)別產(chǎn)品的“庫(kù)存量”及其“供應(yīng)商”。 方法步驟圖解如下: 3. 查找重復(fù)項(xiàng)查詢(xún)向?qū)?#160;查找重要項(xiàng)查詢(xún)向?qū)?,可以幫助用?hù)在數(shù)據(jù)表中查找具
12、有一個(gè)或多個(gè)字段內(nèi)容相同的記錄。此向?qū)Э梢杂脕?lái)確定基本表中是否存在重復(fù)記錄。如果要得到如下面所示的結(jié)果集: 則可進(jìn)行如下操作步驟: 4. 查找不匹配項(xiàng)查詢(xún)向?qū)?#160;查找不匹配項(xiàng)查詢(xún)向?qū)?,是用?lái)幫助用戶(hù)在數(shù)據(jù)中查找不匹配記錄的向?qū)?。如要查找【產(chǎn)品】表中的供應(yīng)商ID與【供應(yīng)商】表中的供應(yīng)商ID不匹配的記錄。步驟分解如下: 5. 用查詢(xún)?cè)O(shè)計(jì)器創(chuàng)建查詢(xún) 使用向?qū)е荒芙⒑?jiǎn)單的、特定的查詢(xún)。Access
13、2003 還提供了一個(gè)功能強(qiáng)大的查詢(xún)?cè)O(shè)計(jì)器,通過(guò)它不僅可以從頭設(shè)計(jì)一個(gè)查詢(xún),而且還可能對(duì)已有的查詢(xún)進(jìn)行編輯和修改。 下圖即為查詢(xún)?cè)O(shè)計(jì)器: 【設(shè)計(jì)器】主要分為上下兩部分,上面放置數(shù)據(jù)庫(kù)表、顯示關(guān)系和字段;下面給出設(shè)計(jì)網(wǎng)格,網(wǎng)格中有如下行標(biāo)題: 字段 查詢(xún)工作表中所使用的字段名 表 該字段所來(lái)自的數(shù)據(jù)表 排序 是否按該字段排序 顯示 該字段是否在結(jié)果集工作表中顯示
14、條件 查詢(xún)條件 或 用來(lái)提供多個(gè)查詢(xún)條件 上面的工具欄上有如下按鈕: 視圖 每個(gè)查詢(xún)有5種視圖(設(shè)計(jì)、數(shù)據(jù)表、SQL、數(shù)據(jù)透視表、數(shù)據(jù)透視圖表) 查詢(xún)類(lèi)型 選擇、交叉表、更新、追加、生成表、刪除。 運(yùn)行 運(yùn)
15、行查詢(xún) 顯示表 顯示所有可用的表 總計(jì) 在查詢(xún)?cè)O(shè)計(jì)區(qū)中增加【總計(jì)】行,可用于求和、求平均等 上限值 用戶(hù)可指定顯示范圍 屬性 顯示當(dāng)前對(duì)象屬性 生成器 彈出【表達(dá)式生成器】 數(shù)據(jù)庫(kù)窗口
16、0; 回到數(shù)據(jù)庫(kù)窗口 新對(duì)象 建立數(shù)據(jù)庫(kù)的新對(duì)象 6. 用查詢(xún)?cè)O(shè)計(jì)器進(jìn)一步設(shè)計(jì)查詢(xún) 添加表/查詢(xún) 更改表或查詢(xún)間的關(guān)聯(lián) 刪除表/查詢(xún) 添加插入查詢(xún)的字段 刪除、移動(dòng)字段 設(shè)置查詢(xún)結(jié)果的排序 設(shè)置字段顯示屬性 7. 查詢(xún)及字段的屬性設(shè)置 8. 設(shè)置查詢(xún)準(zhǔn)則 查詢(xún)?cè)O(shè)計(jì)視圖中的準(zhǔn)則就是查詢(xú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í),必須要在日期值兩邊加上“#”。下面寫(xiě)法都是正確的:#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)建特殊用途查詢(xún) 數(shù)據(jù)查詢(xún)未必總是靜態(tài)地提取統(tǒng)一信息。只要用戶(hù)把搜索類(lèi)別輸入到一個(gè)特定的對(duì)話(huà)框中,就能在運(yùn)行查詢(xún)時(shí)對(duì)其進(jìn)行修改。例如:當(dāng)用戶(hù)希望能夠規(guī)定所需要的數(shù)據(jù)組進(jìn),就需要使用一個(gè)參數(shù)查詢(xún)。另一個(gè)特殊用途的查詢(xún)就是把字段值自動(dòng)填充到相關(guān)表中的“自動(dòng)查詢(xún)”查詢(xún)?!白詣?dòng)查詢(xún)”查詢(xún)通過(guò)查找用戶(hù)輸入在匹配字段中的數(shù)值,并把用戶(hù)指定的信息輸入到相關(guān)表的字段中。 1. 參數(shù)查詢(xún) 如用戶(hù)想要查詢(xún)價(jià)格在1030元之間的各種產(chǎn)品,并想知道產(chǎn)品的供應(yīng)商和產(chǎn)品的類(lèi)別。這需要向查詢(xún)?cè)O(shè)計(jì)器中添加【
23、產(chǎn)品】、【供應(yīng)商】、【類(lèi)別】三個(gè)表。具體步驟如下: 首先打開(kāi)查詢(xún)?cè)O(shè)計(jì)器,將數(shù)據(jù)表添加到上面。 添加字段。并給出條件:Between 輸入最低值 And 輸入最高值 然后運(yùn)行,輸入兩參數(shù): 可查看到結(jié)果: 如要改變參數(shù)類(lèi)型,可打開(kāi)【查詢(xún)】|【參數(shù)】對(duì)話(huà)框來(lái)解決: 2. 自動(dòng)查找查詢(xún) 自動(dòng)查詢(xún)查詢(xún)使用具有一對(duì)多關(guān)系的兩個(gè)表,若要?jiǎng)?chuàng)建一個(gè)自動(dòng)查找查詢(xún),首先把兩個(gè)相關(guān)表添加到查詢(xún)?cè)O(shè)計(jì)窗口,然后把匹配字段從“多”方拖到網(wǎng)格上。這種查詢(xún)是查找“一”方中的相關(guān)記錄并從匹配記錄中的其他字段檢索數(shù)值。下面創(chuàng)
24、建一個(gè)在【供應(yīng)商】列中選擇一個(gè)供應(yīng)商時(shí),自動(dòng)填充【聯(lián)系人姓名】、【地址】、【郵政編碼】、【電話(huà)】的自動(dòng)查找查詢(xún)。具體操作如下: 運(yùn)行,在底部通過(guò)選擇供應(yīng)商而添加記錄,其中“一”方表中的公司名稱(chēng)、聯(lián)系人姓名、地址、郵政編碼、電話(huà)等字段將自動(dòng)加上。而“多”方的產(chǎn)品名稱(chēng)則須人工加上。 3. 交叉表查詢(xún) 交叉表查詢(xún)是一種特殊的合計(jì)查詢(xún)類(lèi)型,可以使數(shù)據(jù)按電子表格的方式顯示查詢(xún)結(jié)果集,這種方式在水平與垂直方向同時(shí)對(duì)數(shù)據(jù)進(jìn)行分組,使數(shù)據(jù)的顯示更為緊湊。這一點(diǎn)在前面已討論過(guò)了。 下面我們?cè)賱?chuàng)建一個(gè)雇員銷(xiāo)售訂單金額匯總表。由于每一個(gè)定單中有多個(gè)訂單
25、明細(xì)產(chǎn)品,所以金額必須求和。所以按訂單分組,利用表達(dá)式數(shù)量*單價(jià)求和即可,并按雇員分列之。 四、操作查詢(xún) 操作查詢(xún)用于同時(shí)對(duì)一個(gè)或多個(gè)表執(zhí)行全局?jǐn)?shù)據(jù)管理操作。操作查詢(xún)可以對(duì)數(shù)據(jù)表中原有的數(shù)據(jù)內(nèi)容進(jìn)行編輯,對(duì)符合條件的數(shù)據(jù)進(jìn)行成批的修改。因此,應(yīng)該備份數(shù)據(jù)庫(kù)。 1. 更新查詢(xún) 更新查詢(xún)用于同時(shí)更改許多記錄中的一個(gè)或多個(gè)字段值,用戶(hù)可以添加一些條件,這些條件除了更新多個(gè)表中的記錄外,還篩選要更改的記錄。大部分更新查詢(xún)可以用表達(dá)式來(lái)規(guī)定更新規(guī)則。如下表實(shí)例: 字段類(lèi)
26、型 表達(dá)式 結(jié)果貨幣 單價(jià)*1.05 把“單價(jià)”增加5%日期 #4/25/01# 把日期更改為2001年4月25日文本 &
27、#160; “已完成” 把數(shù)據(jù)更改為“已完成”文本 “總”&單價(jià) 把字符“總”添加到“單價(jià)”字段數(shù)據(jù)的開(kāi)頭是/否 Yes 把特定的“否”數(shù)據(jù)更改為“是”
28、0; 2. 追加查詢(xún) 當(dāng)用戶(hù)要把一個(gè)或多個(gè)表的記錄添加到其他表時(shí),就會(huì)用到追加查詢(xún)。追加查詢(xún)可以從另一個(gè)數(shù)據(jù)庫(kù)表中讀取數(shù)據(jù)記錄并向當(dāng)前表內(nèi)添加記錄,由于兩個(gè)表之間的字段定義可能不同,追加查詢(xún)只能添加相互匹配的字段內(nèi)容,而那些不對(duì)應(yīng)的字段將被忽略。 3. 刪除查詢(xún) 刪除查詢(xún)是所有查詢(xún)操作中最危險(xiǎn)的一個(gè)。刪除查詢(xún)是將整個(gè)記錄全部刪除而不只是刪除查詢(xún)所使用的字段。查詢(xún)所使用的字段只是用來(lái)作為查詢(xún)的條件??梢詮膯蝹€(gè)表刪除記錄,也可以通過(guò)級(jí)聯(lián)刪除相關(guān)記錄而從相關(guān)表中刪除記錄。 4. 生成表查詢(xún) &
29、#160; 生成表查詢(xún)可以從一個(gè)或多個(gè)表/查詢(xún)的記錄中制作一個(gè)新表。在下列情況下使用生成表查詢(xún): 把記錄導(dǎo)出到其數(shù)據(jù)庫(kù)。如創(chuàng)建一個(gè)交易已完成的訂單表,以便送到其它部門(mén)。 把記錄導(dǎo)出到Excel/Word之類(lèi)的非關(guān)系應(yīng)用系統(tǒng)中。 對(duì)被導(dǎo)出的信息進(jìn)行控制。如篩選出機(jī)密或不相干的數(shù)據(jù)。 用作在一特定時(shí)間出現(xiàn)的一個(gè)報(bào)表的記錄源。 通過(guò)添加一個(gè)記錄集來(lái)保存初始文件,然后用一個(gè)追加查詢(xún)向該記錄集中添加新記錄。 用一個(gè)新記錄集替換現(xiàn)有的表中的記錄。例如,要以【產(chǎn)品】表為基礎(chǔ),查詢(xún)出【產(chǎn)品名稱(chēng)】、【類(lèi)別】、【單價(jià)】、【庫(kù)存量】并生成一個(gè)新表:
30、0; 五、SQL專(zhuān)用查詢(xún) 結(jié)構(gòu)化查詢(xún)語(yǔ)言(即SQL語(yǔ)言)是最重要的關(guān)系數(shù)據(jù)庫(kù)操作語(yǔ)言,在過(guò)去的幾年中,SQL語(yǔ)言已經(jīng)發(fā)展成為標(biāo)準(zhǔn)的計(jì)算機(jī)數(shù)據(jù)庫(kù)語(yǔ)言。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語(yǔ)言為數(shù)據(jù)庫(kù)操作的標(biāo)準(zhǔn)語(yǔ)言,現(xiàn)在已有100多種遍布在從微機(jī)到大型機(jī)上的數(shù)據(jù)庫(kù)產(chǎn)品SQL產(chǎn)品。SQL語(yǔ)言基本上獨(dú)立于數(shù)據(jù)庫(kù)本身及其使用的機(jī)器、網(wǎng)絡(luò)、操作系統(tǒng),基于SQL的DBMS開(kāi)發(fā)商所
31、提供的產(chǎn)品一般都具有良好的可移植性。SQL語(yǔ)言最初由IBM的研究人員在70年代提出,最初的名稱(chēng)為SEQUEL(結(jié)果),從80年代開(kāi)始改名為SQL,看似是SEQUEL的縮寫(xiě),但一般又理解為結(jié)構(gòu)化查詢(xún)語(yǔ)言Structure Query Language。下面討論1991年ANSI制定的SQL語(yǔ)言的核心。VFP的SELECT-SQL可以據(jù)此理解之。 1對(duì)單個(gè)表進(jìn)行查詢(xún)下面考慮SQL對(duì)單個(gè)表進(jìn)行簡(jiǎn)單的查詢(xú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語(yǔ)句進(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上述語(yǔ)句計(jì)算表ST中的行數(shù),并用一行一列表示出來(lái)。注意:除非和GROUP BY相連,在查詢(xún)的項(xiàng)中SELECT后內(nèi)置函數(shù)一般不和字段名一起使用。如下面的查詢(xún)語(yǔ)句雖然不是非法的,但結(jié)果的含義不清:SELECT 姓名,CO
53、UNT(*) 姓名 CNT JONES 8請(qǐng)思考下面的兩個(gè)查詢(xún)語(yǔ)句的結(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é)生可以按照主修專(zhuān)業(yè)進(jìn)行分組,這意味著每一個(gè)專(zhuān)業(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é)生按照專(zhuān)業(yè)進(jìn)行分組,然后只需要具有兩個(gè)以上的行數(shù)的分組,在這種情況下,我們需要用到SQL中的HAVING關(guān)鍵字對(duì)不符合條件的分組進(jìn)行過(guò)濾。 下面的SQL語(yǔ)句可以統(tǒng)計(jì)出具有兩個(gè)以上學(xué)生的
56、專(zhuān)業(yè),并統(tǒng)計(jì)該專(zhuān)業(yè)的學(xué)生數(shù)。 SELECT 主修,COUNT(*) FROM ST GROUP BY 主修 HAVING COUNT(*)>2 主修 Cnt ACCOUNTING 3HISTORY
57、160; 3 在上面的查詢(xún)中,還可以對(duì)查詢(xún)的學(xué)生進(jìn)行條件選擇,使用關(guān)鍵字WHERE進(jìn)行查詢(xú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é)果來(lái)看,首先選擇適合條件的學(xué)生,對(duì)選擇出來(lái)的學(xué)生進(jìn)行分組,去除不適合HAVING條件的分組,顯示得到結(jié)果。 2對(duì)多個(gè)表進(jìn)行查詢(xún) 下面我們將討論基于兩個(gè)或更多的表的SQL查詢(xún)語(yǔ)句。下面的例子基本上針對(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 帶有子查詢(xún)的SQL查詢(xún)語(yǔ)句假設(shè)我們需要知道入學(xué)到A100班的學(xué)生的名字,則來(lái)通過(guò)兩個(gè)步驟:首先通過(guò)條件班名為'A100在EN表中找到學(xué)生的學(xué)號(hào),然后通過(guò)上面找到的學(xué)號(hào)'100和
64、9;200在ST表中找出這些學(xué)生的姓名。如下面的兩個(gè)查詢(xún)語(yǔ)句:SELECT 學(xué)號(hào) FROM EN WHERE 班名='A100學(xué)號(hào)100200SELECT 姓名 FROM ST WHERE 學(xué)號(hào) IN('100,'200)姓名JONESBAKER我們可以將上述兩條語(yǔ)句進(jìn)行結(jié)合就可能直接得到我們需要的結(jié)果:SELECT 姓名 FROM ST WHERE 學(xué)號(hào) IN(SELECT 學(xué)號(hào) FROM EN WHERE 班名='A100)姓名JONESBAKER我們將第二個(gè)查詢(xún)語(yǔ)句稱(chēng)為子查詢(xún)(SUBQUERY),它嵌套在主查詢(xún)的條件中。這種查詢(xún)方式是很有用的,但要注意子查
65、詢(xún)的結(jié)果與主查詢(xún)的條件的類(lèi)型匹配問(wèn)題。對(duì)于一般的SQL查詢(xún)語(yǔ)句而言,子查詢(xún)可以嵌套二層以上甚至更多,但VFP對(duì)子查詢(xún)的深度進(jìn)行了限制。請(qǐng)看下面的語(yǔ)句: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也就是下面的語(yǔ)句的結(jié)果:SELECT ST.姓名 FROM ST WHERE ST.學(xué)號(hào) IN('200,'400,'400)同時(shí)通過(guò)上述查詢(xún),我們得到一個(gè)重要的結(jié)論,RYE的報(bào)名有問(wèn)題,或要將面授時(shí)間作調(diào)整,大家可以思考為什么? SQL聯(lián)接查詢(xún)子查詢(xún)的結(jié)果總是來(lái)自一個(gè)表,如果同時(shí)提供來(lái)自不同的表的數(shù)據(jù)(如每一個(gè)學(xué)生的學(xué)號(hào)、姓名、所在班名等),則必須將多個(gè)表(ST、EN)相聯(lián)接。請(qǐng)看下面的語(yǔ)句
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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- arcgis軟件的認(rèn)識(shí)與使用實(shí)驗(yàn)報(bào)告
- 橋梁設(shè)計(jì)施工方案
- 高軌星載北斗GNSS接收機(jī)規(guī)范 編制說(shuō)明
- 2025年哈爾濱電力職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)參考答案
- 2025年信陽(yáng)藝術(shù)職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)新版
- 2025年廣安職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)附答案
- 2025年畢節(jié)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)新版
- 2023一年級(jí)數(shù)學(xué)上冊(cè) 2 位置教學(xué)實(shí)錄 新人教版
- 提高辦公效率的智能化管理策略
- 9生活離不開(kāi)他們(教學(xué)設(shè)計(jì))-2023-2024學(xué)年道德與法治四年級(jí)下冊(cè)統(tǒng)編版
- 2024年全國(guó)中學(xué)生生物學(xué)聯(lián)賽試題及答案詳解
- 墨子的《非攻》課件
- 民事起訴狀(證券虛假陳述責(zé)任糾紛)示范文本
- 不動(dòng)產(chǎn)登記中心服務(wù)行為規(guī)范辦法(試行)
- 軟件資格考試嵌入式系統(tǒng)設(shè)計(jì)師(基礎(chǔ)知識(shí)、應(yīng)用技術(shù))合卷(中級(jí))試卷與參考答案(2024年)
- 2024年下半年杭州黃湖鎮(zhèn)招考編外工作人員易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 浙江省第五屆初中生科學(xué)競(jìng)賽初賽試題卷
- 雷鋒精神在2024:新時(shí)代下的學(xué)習(xí)
- 竣工驗(yàn)收流程培訓(xùn)課件
- 2024年上海中考化學(xué)終極押題密卷三含答案
- DB14∕T 1334-2017 波形鋼腹板預(yù)應(yīng)力混凝土組合結(jié)構(gòu)橋梁懸臂施工與驗(yàn)收規(guī)范
評(píng)論
0/150
提交評(píng)論