|
第三章 查詢
本章內(nèi)容
◆ 查詢的概念、種類和作用。 ◆ 各種查詢的建立。 ◆ 查詢的應(yīng)用。
一、查詢的概念
1.什么是查詢
查詢就是依據(jù)一定的查詢條件,對數(shù)據(jù)庫中的數(shù)據(jù)信息進(jìn)行查找。它與表一樣,都是數(shù)據(jù)庫的對象。它允許用戶依據(jù)準(zhǔn)則或查詢條件抽取表中的記錄與字段。Access 2003 中的查詢可以對一個(gè)數(shù)據(jù)庫中的一個(gè)或多個(gè)表中存儲的數(shù)據(jù)信息進(jìn)行查找、統(tǒng)計(jì)、計(jì)算、排序等。
有多種設(shè)計(jì)查詢的方法,用戶可以通過查詢設(shè)計(jì)器或查詢設(shè)計(jì)向?qū)碓O(shè)計(jì)查詢。
查詢結(jié)果將以工作表的形式顯示出來。顯示查詢結(jié)果的工作表又稱為結(jié)果集,它雖然與基本表有著十分相似的外觀,但它并不是一個(gè)基本表,而是符合查詢條件的記錄集合。其內(nèi)容是動態(tài)的。
2. 查詢的種類
Access 2003 提供多種查詢方式,查詢方式可分為選擇查詢、匯總查詢、交叉表查詢、重復(fù)項(xiàng)查詢、不匹配查詢、動作查詢、SQL特定查詢、以及多表之間進(jìn)行的關(guān)系查詢。這些查詢方式總結(jié)起來有4類:選擇查詢、特殊用途查詢、操作查詢和SQL專用查詢。
3. 查詢的作用和功能
查詢是數(shù)據(jù)庫提供的一種功能強(qiáng)大的管理工具,可以按照使用者所指定的各種方式來進(jìn)行查詢。查詢基本上可滿足用戶以下需求: ◆ 指定所要查詢的基本表。 ◆ 指定要在結(jié)果集中出現(xiàn)的字段。 ◆ 指定準(zhǔn)則來限制結(jié)果集中所要顯示的記錄。 ◆ 指定結(jié)果集中記錄的排序次序。 ◆ 對結(jié)果集中的記錄進(jìn)行數(shù)學(xué)統(tǒng)計(jì)。 ◆ 將結(jié)果集制成一個(gè)新的基本表。 ◆ 在結(jié)果集的基礎(chǔ)上建立窗體和報(bào)表。 ◆ 根據(jù)結(jié)果集建立圖表。 ◆ 在結(jié)果集中進(jìn)行新的查詢。 ◆ 查找不符合指定條件的記錄。 ◆ 建立交叉表形式的結(jié)果集。 ◆ 在其他數(shù)據(jù)庫軟件包生成的基本表中進(jìn)行查詢。 作為對數(shù)據(jù)的查找,查詢與篩選有許多相似的地方,但二者是有本質(zhì)區(qū)別的。查詢是數(shù)據(jù)庫的對象,而篩選是數(shù)據(jù)庫的操作。 下表指出了查詢和篩選之間的不同:
功能 查詢 篩選 —————————————————————————————— 用作窗體或報(bào)表的基礎(chǔ) 是 是 排序結(jié)果中的記錄 是 是 如果允許編輯,就編輯結(jié)果中的數(shù)據(jù) 是 是 向表中添加新的記錄集 是 否 只選擇特定的字段包含在結(jié)果中 是 否 作為一個(gè)獨(dú)立的對象存儲在數(shù)據(jù)庫中 是 否 不用打開基本表、查詢和窗體就能查看結(jié)果 是 否 在結(jié)果中包含計(jì)算值和集合值 是 否 ——————————————————————————————
二、創(chuàng)建查詢
用戶可以打開數(shù)據(jù)庫窗口,選擇【查詢】對象,然后單擊工具欄中的【新建】按鈕,彈出【新建查詢】對話框。
1. 簡單選擇查詢
簡單選擇查詢通過簡單查詢向?qū)砜焖偻瓿伞?/span>
如果要添加匯總,則進(jìn)行下一步操作而不選擇【明細(xì)】。
下面是匯總選項(xiàng):
如果不用向?qū)гO(shè)計(jì)查詢而用查詢設(shè)計(jì)器進(jìn)行查詢設(shè)計(jì),并且要在查詢中添加匯總選項(xiàng),則需要手工添加一些匯總函數(shù): Sum 求總和 Avg 平均值 Min 最小值 Max 最大值 Count 計(jì)數(shù) StDev 標(biāo)準(zhǔn)差 Var 方差 First 第一條記錄 Last 最后一條記錄
2. 交叉表查詢向?qū)?/span>
交叉表查詢以表的形式顯示出摘要的數(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ū)?/span>
查找重要項(xiàng)查詢向?qū)?,可以幫助用戶在?shù)據(jù)表中查找具有一個(gè)或多個(gè)字段內(nèi)容相同的記錄。此向?qū)Э梢杂脕泶_定基本表中是否存在重復(fù)記錄。 如果要得到如下面所示的結(jié)果集:
則可進(jìn)行如下操作步驟:
4. 查找不匹配項(xiàng)查詢向?qū)?/span>
查找不匹配項(xiàng)查詢向?qū)?,是用來幫助用戶在?shù)據(jù)中查找不匹配記錄的向?qū)?。如要查找【產(chǎn)品】表中的供應(yīng)商ID與【供應(yīng)商】表中的供應(yīng)商ID不匹配的記錄。步驟分解如下:
5. 用查詢設(shè)計(jì)器創(chuàng)建查詢
使用向?qū)е荒芙⒑唵蔚?、特定的查詢?span lang=EN-US>Access 2003 還提供了一個(gè)功能強(qiáng)大的查詢設(shè)計(jì)器,通過它不僅可以從頭設(shè)計(jì)一個(gè)查詢,而且還可能對已有的查詢進(jìn)行編輯和修改。
下圖即為查詢設(shè)計(jì)器:
【設(shè)計(jì)器】主要分為上下兩部分,上面放置數(shù)據(jù)庫表、顯示關(guān)系和字段;下面給出設(shè)計(jì)網(wǎng)格,網(wǎng)格中有如下行標(biāo)題: ◆ 字段 查詢工作表中所使用的字段名 ◆ 表 該字段所來自的數(shù)據(jù)表 ◆ 排序 是否按該字段排序 ◆ 顯示 該字段是否在結(jié)果集工作表中顯示 ◆ 條件 查詢條件 ◆ 或 用來提供多個(gè)查詢條件
上面的工具欄上有如下按鈕:
◆ 視圖 每個(gè)查詢有5種視圖(設(shè)計(jì)、數(shù)據(jù)表、SQL、數(shù)據(jù)透視表、數(shù)據(jù)透視圖表) ◆ 查詢類型 選擇、交叉表、更新、追加、生成表、刪除。 ◆ 運(yùn)行 運(yùn)行查詢 ◆ 顯示表 顯示所有可用的表 ◆ 總計(jì) 在查詢設(shè)計(jì)區(qū)中增加【總計(jì)】行,可用于求和、求平均等 ◆ 上限值 用戶可指定顯示范圍 ◆ 屬性 顯示當(dāng)前對象屬性 ◆ 生成器 彈出【表達(dá)式生成器】 ◆ 數(shù)據(jù)庫窗口 回到數(shù)據(jù)庫窗口 ◆ 新對象 建立數(shù)據(jù)庫的新對象
6. 用查詢設(shè)計(jì)器進(jìn)一步設(shè)計(jì)查詢
⑴ 添加表/查詢
⑵ 更改表或查詢間的關(guān)聯(lián) ⑶ 刪除表/查詢 ⑷ 添加插入查詢的字段 ⑸ 刪除、移動字段 ⑹ 設(shè)置查詢結(jié)果的排序 ⑺ 設(shè)置字段顯示屬性
7. 查詢及字段的屬性設(shè)置
8. 設(shè)置查詢準(zhǔn)則
查詢設(shè)計(jì)視圖中的準(zhǔn)則就是查詢記錄應(yīng)符合的條件。它與在設(shè)計(jì)表時(shí)設(shè)置字段的有效性規(guī)則的方法相似。
⑴ 準(zhǔn)則表達(dá)式 And 與操作 “A” And “B” Or 或操作 “A” Or “B” Between…And 指定范圍操作 Between “A” And “B” In 指定枚舉范圍 In(“A,B,C”) Like 指定模式字符串 Like “A?[A~f]#[!0~9]*” 如:A u D 3 q 98e32ww
⑵ 在表達(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() 返回日期中的星期數(shù) Hour() 返回時(shí)間中的小時(shí)數(shù) Now() 返回系統(tǒng)當(dāng)前的日期與時(shí)間
⑶ 表達(dá)式中的計(jì)算 A+B 兩個(gè)數(shù)字型字段值相加,兩個(gè)文本字符串連接 A-B 兩個(gè)數(shù)字型字段值相減 A*B 兩個(gè)數(shù)字型字段值相乘 A/B 兩個(gè)數(shù)字型字段值相除 A\B 兩個(gè)數(shù)字型字段值相除四舍五入取整 A^B A的B次冪 Mod(A,B) 取余,A除以B得余數(shù) A&B 文本型字段A和B連接
⑷ 使用準(zhǔn)則表達(dá)式生成器
三、創(chuàng)建特殊用途查詢
數(shù)據(jù)查詢未必總是靜態(tài)地提取統(tǒng)一信息。只要用戶把搜索類別輸入到一個(gè)特定的對話框中,就能在運(yùn)行查詢時(shí)對其進(jìn)行修改。例如:當(dāng)用戶希望能夠規(guī)定所需要的數(shù)據(jù)組進(jìn),就需要使用一個(gè)參數(shù)查詢。 另一個(gè)特殊用途的查詢就是把字段值自動填充到相關(guān)表中的“自動查詢”查詢。“自動查詢”查詢通過查找用戶輸入在匹配字段中的數(shù)值,并把用戶指定的信息輸入到相關(guān)表的字段中。
1. 參數(shù)查詢
如用戶想要查詢價(jià)格在10~30元之間的各種產(chǎn)品,并想知道產(chǎn)品的供應(yīng)商和產(chǎn)品的類別。這需要向查詢設(shè)計(jì)器中添加【產(chǎn)品】、【供應(yīng)商】、【類別】三個(gè)表。具體步驟如下:
首先打開查詢設(shè)計(jì)器,將數(shù)據(jù)表添加到上面。
添加字段。并給出條件:Between [輸入最低值] And [輸入最高值]
然后運(yùn)行,輸入兩參數(shù):
可查看到結(jié)果:
如要改變參數(shù)類型,可打開【查詢】|【參數(shù)】對話框來解決:
2. 自動查找查詢
自動查詢查詢使用具有一對多關(guān)系的兩個(gè)表,若要?jiǎng)?chuàng)建一個(gè)自動查找查詢,首先把兩個(gè)相關(guān)表添加到查詢設(shè)計(jì)窗口,然后把匹配字段從“多”方拖到網(wǎng)格上。這種查詢是查找“一”方中的相關(guān)記錄并從匹配記錄中的其他字段檢索數(shù)值。 下面創(chuàng)建一個(gè)在【供應(yīng)商】列中選擇一個(gè)供應(yīng)商時(shí),自動填充【聯(lián)系人姓名】、【地址】、【郵政編碼】、【電話】的自動查找查詢。具體操作如下:
運(yùn)行,在底部通過選擇供應(yīng)商而添加記錄,其中“一”方表中的公司名稱、聯(lián)系人姓名、地址、郵政編碼、電話等字段將自動加上。而“多”方的產(chǎn)品名稱則須人工加上。
3. 交叉表查詢
交叉表查詢是一種特殊的合計(jì)查詢類型,可以使數(shù)據(jù)按電子表格的方式顯示查詢結(jié)果集,這種方式在水平與垂直方向同時(shí)對數(shù)據(jù)進(jìn)行分組,使數(shù)據(jù)的顯示更為緊湊。這一點(diǎn)在前面已討論過了。
下面我們再創(chuàng)建一個(gè)雇員銷售訂單金額匯總表。由于每一個(gè)定單中有多個(gè)訂單明細(xì)產(chǎn)品,所以金額必須求和。所以按訂單分組,利用表達(dá)式[數(shù)量]*[單價(jià)]求和即可,并按雇員分列之。
四、操作查詢
操作查詢用于同時(shí)對一個(gè)或多個(gè)表執(zhí)行全局?jǐn)?shù)據(jù)管理操作。操作查詢可以對數(shù)據(jù)表中原有的數(shù)據(jù)內(nèi)容進(jìn)行編輯,對符合條件的數(shù)據(jù)進(jìn)行成批的修改。因此,應(yīng)該備份數(shù)據(jù)庫。
1. 更新查詢
更新查詢用于同時(shí)更改許多記錄中的一個(gè)或多個(gè)字段值,用戶可以添加一些條件,這些條件除了更新多個(gè)表中的記錄外,還篩選要更改的記錄。大部分更新查詢可以用表達(dá)式來規(guī)定更新規(guī)則。 如下表實(shí)例:
字段類型 表達(dá)式 結(jié)果 ———————————————————————————————————— 貨幣 [單價(jià)]*1.05 把“單價(jià)”增加5% 日期 #4/25/01# 把日期更改為2001年4月25日 文本 “已完成” 把數(shù)據(jù)更改為“已完成” 文本 “總”&[單價(jià)] 把字符“總”添加到“單價(jià)”字段數(shù)據(jù)的開頭 是/否 Yes 把特定的“否”數(shù)據(jù)更改為“是” ————————————————————————————————————
2. 追加查詢
當(dāng)用戶要把一個(gè)或多個(gè)表的記錄添加到其他表時(shí),就會用到追加查詢。追加查詢可以從另一個(gè)數(shù)據(jù)庫表中讀取數(shù)據(jù)記錄并向當(dāng)前表內(nèi)添加記錄,由于兩個(gè)表之間的字段定義可能不同,追加查詢只能添加相互匹配的字段內(nèi)容,而那些不對應(yīng)的字段將被忽略。
3. 刪除查詢
刪除查詢是所有查詢操作中最危險(xiǎn)的一個(gè)。刪除查詢是將整個(gè)記錄全部刪除而不只是刪除查詢所使用的字段。查詢所使用的字段只是用來作為查詢的條件??梢詮膯蝹€(gè)表刪除記錄,也可以通過級聯(lián)刪除相關(guān)記錄而從相關(guān)表中刪除記錄。
4. 生成表查詢
生成表查詢可以從一個(gè)或多個(gè)表/查詢的記錄中制作一個(gè)新表。在下列情況下使用生成表查詢: ◆ 把記錄導(dǎo)出到其數(shù)據(jù)庫。如創(chuàng)建一個(gè)交易已完成的訂單表,以便送到其它部門。 ◆ 把記錄導(dǎo)出到Excel/Word之類的非關(guān)系應(yīng)用系統(tǒng)中。 ◆ 對被導(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è)新表:
五、SQL專用查詢
結(jié)構(gòu)化查詢語言(即SQL語言)是最重要的關(guān)系數(shù)據(jù)庫操作語言,在過去的幾年中,SQL語言已經(jīng)發(fā)展成為標(biāo)準(zhǔn)的計(jì)算機(jī)數(shù)據(jù)庫語言。 1986年美國國家標(biāo)準(zhǔn)協(xié)會ANSI(American National Standards Institute)和國際標(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ā)商所提供的產(chǎn)品一般都具有良好的可移植性。 SQL語言最初由IBM的研究人員在70年代提出,最初的名稱為SEQUEL(結(jié)果),從80年代開始改名為SQL,看似是SEQUEL的縮寫,但一般又理解為結(jié)構(gòu)化查詢語言Structure Query Language。 下面討論1991年ANSI制定的SQL語言的核心。VFP的SELECT-SQL可以據(jù)此理解之。
1.對單個(gè)表進(jìn)行查詢 下面考慮SQL對單個(gè)表進(jìn)行簡單的查詢。為了進(jìn)行實(shí)例分析,下面我們先建立三個(gè)表:
學(xué)生信息表ST:
學(xué)生注冊表EN:
面授安排表CL:
⑴ 使用SQL進(jìn)行投影 投影是指取表的某些列的字段值。下面是使用SQL語句進(jìn)行投影的例子,從ST表中列出需要的學(xué)號、姓名和主修:
SELECT 學(xué)號,姓名,主修 FROM ST
SELECT 主修 FROM ST
SELECT DISTINCT 主修 FROM ST
⑵ 使用SQL進(jìn)行選擇 選擇是指到表的某些行的記錄值。請看下面的例子:
SELECT 學(xué)號,姓名,主修,年齡 FROM ST WHERE 主修=‘MATH’ SELECT * FROM ST WHERE 主修=‘MATH’
上述兩條件命令的結(jié)果是一樣的。我們可以將投影和選擇進(jìn)行合并如下:
SELECT 姓名,主修,年齡 FROM ST WHERE 主修=‘MATH’
SELECT 姓名,主修,年齡 FROM ST WHERE 主修=‘MATH’AND 年齡>21
SELECT 姓名,主修,年齡 FROM ST WHERE 主修 IN(‘MATH’,‘ACCOUNTING’)
SELECT 姓名,主修,年齡 FROM ST WHERE 主修 NOT IN(‘MATH’,‘ACCOUNTING’)
⑶ SQL排序 SELECT 姓名,主修,年齡 FROM ST WHERE 主修=‘ACCOUNTING’ ORDER BY 姓名
SELECT 姓名,主修,年齡 FROM ST WHERE 主修 IN(‘MATH’,‘ACCOUNTING’) ORDER BY 姓名 DESC,年齡 ASC
⑷ SQL內(nèi)置函數(shù) SQL主要提供了前面我們提到的五個(gè)內(nèi)置函數(shù):COUNT、SUM、AVG、MAX、MIN。 SELECT COUNT(*) FROM ST
上述語句計(jì)算表ST中的行數(shù),并用一行一列表示出來。 注意:除非和GROUP BY相連,在查詢的項(xiàng)中SELECT后內(nèi)置函數(shù)一般不和字段名一起使用。如下面的查詢語句雖然不是非法的,但結(jié)果的含義不清: SELECT 姓名,COUNT(*)
請思考下面的兩個(gè)查詢語句的結(jié)果: SELECT COUNT(主修) FROM ST
SELECT COUNT(DISTINCT 主修) FROM ST
⑸ SQL內(nèi)置函數(shù)和分組 為了增強(qiáng)統(tǒng)計(jì)內(nèi)置函數(shù)的功能,內(nèi)置函數(shù)可以和分組函數(shù)合用,將源表中的數(shù)據(jù)分組,再對每一分組生成一個(gè)匯總行。例如:學(xué)生可以按照主修專業(yè)進(jìn)行分組,這意味著每一個(gè)專業(yè)將形成一個(gè)分組,然后可以對每一組進(jìn)行一定的統(tǒng)計(jì)。
SELECT 主修,COUNT(*) FROM ST GROUP BY 主修
有時(shí),我們不需要得到每一個(gè)分組的值,例如,我們對學(xué)生按照專業(yè)進(jìn)行分組,然后只需要具有兩個(gè)以上的行數(shù)的分組,在這種情況下,我們需要用到SQL中的HAVING關(guān)鍵字對不符合條件的分組進(jìn)行過濾。
下面的SQL語句可以統(tǒng)計(jì)出具有兩個(gè)以上學(xué)生的專業(yè),并統(tǒng)計(jì)該專業(yè)的學(xué)生數(shù)。
SELECT 主修,COUNT(*) FROM ST GROUP BY 主修 HAVING COUNT(*)>2
在上面的查詢中,還可以對查詢的學(xué)生進(jìn)行條件選擇,使用關(guān)鍵字WHERE進(jìn)行查詢,但是這樣會產(chǎn)生一定的模糊性,請看下例的結(jié)果,分析之:
SELECT 主修,AVG(年齡) FROM ST WHERE 姓名='JONES' GROUP BY 主修 HAVING COUNT(*)>1
SELECT 主修,AVG(年齡) FROM ST GROUP BY 主修 HAVING COUNT(*)>2
SELECT 姓名,主修,AVG(年齡) FROM ST WHERE 姓名 IN('JONES','BAKER') GROUP BY 主修 HAVING COUNT(*)>0
SELECT 姓名,主修,AVG(年齡) FROM ST WHERE 姓名 IN('JONES','BAKER') GROUP BY 主修 HAVING COUNT(*)>1
從上述結(jié)果來看,首先選擇適合條件的學(xué)生,對選擇出來的學(xué)生進(jìn)行分組,去除不適合HAVING條件的分組,顯示得到結(jié)果。
2.對多個(gè)表進(jìn)行查詢
下面我們將討論基于兩個(gè)或更多的表的SQL查詢語句。下面的例子基本上針對ST、CL和EN三個(gè)表而言。 學(xué)生信息表ST:
學(xué)生注冊表EN:
面授安排表CL:
⑴ 帶有子查詢的SQL查詢語句 假設(shè)我們需要知道入學(xué)到A100班的學(xué)生的名字,則來通過兩個(gè)步驟:首先通過條件班名為‘A100’在EN表中找到學(xué)生的學(xué)號,然后通過上面找到的學(xué)號‘100’和‘200’在ST表中找出這些學(xué)生的姓名。 如下面的兩個(gè)查詢語句: SELECT 學(xué)號 FROM EN WHERE 班名=‘A100’
SELECT 姓名 FROM ST WHERE 學(xué)號 IN(‘100’,‘200’)
我們可以將上述兩條語句進(jìn)行結(jié)合就可能直接得到我們需要的結(jié)果: SELECT 姓名 FROM ST WHERE 學(xué)號 IN(SELECT 學(xué)號 FROM EN WHERE 班名=‘A100’)
我們將第二個(gè)查詢語句稱為子查詢(SUBQUERY),它嵌套在主查詢的條件中。這種查詢方式是很有用的,但要注意子查詢的結(jié)果與主查詢的條件的類型匹配問題。 對于一般的SQL查詢語句而言,子查詢可以嵌套二層以上甚至更多,但VFP對子查詢的深度進(jìn)行了限制。請看下面的語句: SELECT CL.班名 FROM CL WHERE 時(shí)間=‘MWF8’
SELECT EN.學(xué)號 FROM EN WHERE EN.班名 IN(SELECT CL.班名 FROM CL WHERE 時(shí)間=‘MWF8’)
SELECT ST.姓名 FROM ST WHERE ST.學(xué)號 IN(SELECT EN.學(xué)號 FROM EN WHERE EN.班名 IN(SELECT CL.班名 FROM CL WHERE 時(shí)間=‘MWF8’)) 結(jié)果將提示:SQL:Subquery nesting is too deep 按正常的理解,其結(jié)果應(yīng)是:
也就是下面的語句的結(jié)果: SELECT ST.姓名 FROM ST WHERE ST.學(xué)號 IN(‘200’,‘400’,‘400’) 同時(shí)通過上述查詢,我們得到一個(gè)重要的結(jié)論,RYE的報(bào)名有問題,或要將面授時(shí)間作調(diào)整,大家可以思考為什么?
⑵ SQL聯(lián)接查詢 子查詢的結(jié)果總是來自一個(gè)表,如果同時(shí)提供來自不同的表的數(shù)據(jù)(如每一個(gè)學(xué)生的學(xué)號、姓名、所在班名等),則必須將多個(gè)表(ST、EN)相聯(lián)接。 請看下面的語句:
SELECT ST.學(xué)號,ST.姓名,EN.班名,EN.注冊號 FROM ST,EN WHERE ST.學(xué)號=EN.學(xué)號
當(dāng)然,在WHERE條件中,可以加上其它的查詢結(jié)果的限定: SELECT ST.學(xué)號,ST.姓名,EN.班名,EN.注冊號 FROM ST,EN WHERE ST.學(xué)號=EN.學(xué)號 AND ST.姓名=‘RYE’ AND EN.注冊號=‘2’
如果結(jié)果來自于兩個(gè)以上的表,我們可以使用相仿的方法,如下例: SELECT ST.學(xué)號,CL.班名,CL.時(shí)間,EN.注冊號 FROM ST,EN,CL WHERE ST.學(xué)號=EN.學(xué)號 AND EN.班名=CL.班名 AND ST.姓名=‘BAKER’
3. 回顧專用查詢
在專用查詢中,使用了除SELECT以外的其它幾個(gè)操作語句:UPDATE、INSERT INTO、DELETE、SELECT INTO等等。
|
|
|