版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章Access高級(jí)查詢與SQL語(yǔ)言前面學(xué)習(xí)了Access的查詢。通過(guò)設(shè)計(jì)視圖和向?qū)В梢越⑦x擇查詢、參數(shù)查詢、交叉表查詢、操作查詢等比較復(fù)雜的查詢。這些已經(jīng)能夠基本上滿足大多數(shù)查詢工作的需要。但是在Access的高級(jí)使用的過(guò)程中,經(jīng)常會(huì)使用到一些查詢,這些查詢用各種查詢向?qū)Ш驮O(shè)計(jì)器都無(wú)法實(shí)現(xiàn)。Access有3種查詢不能直接用查詢視圖或向?qū)Мa(chǎn)生,而必須使用SQL查詢,在Access中被稱為SQL特定查詢。這3種SQL特定查詢是:聯(lián)合查詢、傳遞查詢和數(shù)據(jù)定義查詢。SQL查詢是用戶使用SQL語(yǔ)句創(chuàng)建的查詢??梢杂肧QL語(yǔ)言來(lái)查詢、更新和管理Access這樣的關(guān)系數(shù)據(jù)庫(kù)。SQL語(yǔ)言是一種通用的數(shù)據(jù)庫(kù)操作語(yǔ)言,并不是Access用戶必須要掌握的,但在實(shí)際的工作中有時(shí)必須用到這種語(yǔ)言才能完成一些特殊的工作。利用SQL語(yǔ)言可以在Access中建立高級(jí)查詢。5.1【案例12】創(chuàng)建Access
聯(lián)合查詢
相關(guān)知識(shí)5.2【案例13】創(chuàng)建AccessSQL
子查詢
相關(guān)知識(shí)5.3【案例14】創(chuàng)建Access
數(shù)據(jù)定義查詢
相關(guān)知識(shí)
5.1相關(guān)知識(shí)
1.SQL語(yǔ)言簡(jiǎn)介SQL語(yǔ)言即結(jié)構(gòu)化查詢語(yǔ)言(英文全稱為StructuredQueryLanguage),是一種通用的關(guān)系型數(shù)據(jù)庫(kù)操作語(yǔ)言。其發(fā)音是“S-Q-L”,或“sequel”。在20世紀(jì)70年代初,E.E.Codd首先提出了關(guān)系模型。1974年,由Boyce和Chamberlin提出了SQL語(yǔ)言。由于它功能豐富,語(yǔ)言簡(jiǎn)潔,使用方法靈活,備受用戶和計(jì)算機(jī)業(yè)界的青睞,被眾多的計(jì)算機(jī)公司和軟件公司所采用。1986年10月,美國(guó)國(guó)家標(biāo)準(zhǔn)局(ANSI)批準(zhǔn)采用SQL作為關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言的美國(guó)標(biāo)準(zhǔn),1987年,國(guó)際標(biāo)準(zhǔn)化組織將之采納為國(guó)際標(biāo)準(zhǔn)。ANSI于1989年公布了SQL-89標(biāo)準(zhǔn),1992年又公布了SQL-99標(biāo)準(zhǔn),后來(lái)又公布了新的標(biāo)準(zhǔn)SQL3。目前所有主要的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)都支持某種形式的SQL語(yǔ)言,大部分都遵守SQL-89標(biāo)準(zhǔn)。SQL語(yǔ)言由于其功能強(qiáng)大,簡(jiǎn)捷易學(xué),從而被包括應(yīng)用程序員、DBA管理員和終端用戶廣泛使用。2.SQL主要特點(diǎn)(1)非過(guò)程化的語(yǔ)言:所謂面向過(guò)程的語(yǔ)言,是指當(dāng)用戶要求完成某項(xiàng)數(shù)據(jù)請(qǐng)求時(shí),必須指定存取路徑,這就需要用戶了解數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)、方式等相關(guān)情況,加重了用戶負(fù)擔(dān)。而當(dāng)使用SQL這種非過(guò)程化語(yǔ)言進(jìn)行數(shù)據(jù)操作時(shí),只要提出“做什么”,而不必指明“如何做”,對(duì)于存取路徑的選擇和語(yǔ)句的操作過(guò)程均由系統(tǒng)自動(dòng)完成。在關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)中,所有SQL語(yǔ)句均使用查詢優(yōu)化器,由它來(lái)決定對(duì)指定數(shù)據(jù)使用何種存取手段以保證最快的速度,這既減輕了用戶的負(fù)擔(dān),又提高了數(shù)據(jù)的獨(dú)立性與安全性。(2)功能一體化的語(yǔ)言:SQL語(yǔ)言集數(shù)據(jù)定義語(yǔ)言DDL、數(shù)據(jù)操縱語(yǔ)言DML、數(shù)據(jù)控制語(yǔ)言DCL及附加語(yǔ)言元素于一體,語(yǔ)言風(fēng)格統(tǒng)一,能夠完成包括關(guān)系模式定義,數(shù)據(jù)庫(kù)對(duì)象的創(chuàng)建、修改和刪除,數(shù)據(jù)記錄的插入、修改和刪除,數(shù)據(jù)查詢,數(shù)據(jù)庫(kù)完整性、一致性保持與安全性控制等一系列操作要求。SQL語(yǔ)言的功能一體化特點(diǎn)使得系統(tǒng)管理員、數(shù)據(jù)庫(kù)管理員、應(yīng)用程序員、決策支持系統(tǒng)管理員以及其他各種類(lèi)型的終端用戶只需要學(xué)習(xí)一種語(yǔ)言形式即可完成多種平臺(tái)的數(shù)據(jù)請(qǐng)求。(3)一種語(yǔ)法兩種使用方式:SQL語(yǔ)言即可以作為一種自含式語(yǔ)言,被用戶以一種聯(lián)機(jī)交互的方式,在終端鍵盤(pán)上直接鍵入SQL命令來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,又可以作為一種嵌入式語(yǔ)言,被程序設(shè)計(jì)人員在開(kāi)發(fā)應(yīng)用程序時(shí)直接嵌入到高級(jí)語(yǔ)言(例如C/C++、PowerBullder、VBScript等)中使用。而不論在何種使用方式下的SQL語(yǔ)法結(jié)構(gòu)都是基本一致的,因此具有極大的靈活性與方便性。(4)面向集合操作的語(yǔ)言:非關(guān)系數(shù)據(jù)模型采用面向記錄的操作方式,操作對(duì)象是單一的某條記錄,而SQL允許用戶在較高層的數(shù)據(jù)結(jié)構(gòu)上工作,操作對(duì)象可以是若干記錄的集合,簡(jiǎn)稱記錄集。所有SQL語(yǔ)句都接受記錄集作為輸入,返回記錄集作為輸出,其面向集合的特性還允許一條SQL語(yǔ)句的結(jié)果作為另一條SQL語(yǔ)句的輸入。(5)語(yǔ)法簡(jiǎn)捷、易學(xué)易用的標(biāo)準(zhǔn)語(yǔ)言:SQL語(yǔ)言不僅功能強(qiáng)大,而且語(yǔ)法接近英語(yǔ)口語(yǔ),符合人類(lèi)的思維習(xí)慣,因此較為容易學(xué)習(xí)和掌握。同時(shí)又由于它是一種通用的標(biāo)準(zhǔn)語(yǔ)言,使用SQL編寫(xiě)的程序也具有良好的移植性。3.SELECT語(yǔ)句語(yǔ)法結(jié)構(gòu)SQL語(yǔ)言包含數(shù)據(jù)定義語(yǔ)言DDL、數(shù)據(jù)操縱語(yǔ)言DML、數(shù)據(jù)控制語(yǔ)言DCL等數(shù)據(jù)庫(kù)必備功能對(duì)應(yīng)的語(yǔ)句。使用SQL語(yǔ)句創(chuàng)建查詢實(shí)際上主要就是使用其中的DML語(yǔ)言的SELECT語(yǔ)句。SELECT語(yǔ)句的主要功能是從數(shù)據(jù)庫(kù)返回一組記錄的信息,它不會(huì)修改數(shù)據(jù)庫(kù)的數(shù)據(jù)。(1)SELECT語(yǔ)句語(yǔ)法結(jié)構(gòu)。SELECT[ALL|DISTINCT]<列表達(dá)式1>[AS<別名1>][,<列表達(dá)式2>[AS<別名2>]...]FROM<表名1>[,<表名2>...][WHERE<條件表達(dá)式1>[AND|OR<條件表達(dá)式2>...][GROUPBY<列名1>[,<列名2>...][HAVING<條件>]][ORDERBY<列名1>[ASC|DESC][,<列名2>[ASC|DESC]...]]SELECT語(yǔ)句基本上可以概括描述為:“從某一個(gè)(或某幾個(gè))數(shù)據(jù)表中選擇滿足一定條件的記錄,并把這些記錄相應(yīng)的某一個(gè)(或某幾個(gè))字段的值投影成一張二維表格”。(2)語(yǔ)法描述的約定說(shuō)明。加粗的英文大寫(xiě)單詞表示是SQL語(yǔ)言的保留關(guān)鍵字,這些是用戶在書(shū)寫(xiě)時(shí)是不能更改的。如“SELECT”等。斜體表示需要用戶根據(jù)具體數(shù)據(jù)庫(kù)的實(shí)際情況而改變的。如“列表達(dá)式1”等?!埃郏荨眱?nèi)的內(nèi)容為可選項(xiàng)?!?lt;>”內(nèi)的內(nèi)容為必選項(xiàng)?!癧<>]”中的內(nèi)容表示如果選擇了“[]”,那么必須指定“<>”中的內(nèi)容。如:“[AS<別名1>]”表示如果語(yǔ)句中有了“AS”,那么就必須指定“別名1”。“|”表示“或”,即前后的兩個(gè)值“二選一”。如“ASC|DESC”。書(shū)寫(xiě)語(yǔ)句時(shí),“[]”和“<>”不能寫(xiě)。書(shū)寫(xiě)語(yǔ)句時(shí),所有的字母、數(shù)字、標(biāo)點(diǎn)等符號(hào)一律用英文半角(包括空格),大小寫(xiě)無(wú)所謂(語(yǔ)法描述中的大寫(xiě)只是為了利于讀者閱讀)。本章所有關(guān)于SQL語(yǔ)言相關(guān)語(yǔ)句的語(yǔ)法的描述都遵循此原則。如果把SELECT語(yǔ)句中所有的可選部分都去除,就是一個(gè)最簡(jiǎn)化的SELECT語(yǔ)句,格式如下。SELECT<列表達(dá)式1>FROM<表名1>后面的舉例都是在這個(gè)基礎(chǔ)上逐步完善的。4.SELECT語(yǔ)句的各部分功能在寫(xiě)SELECT語(yǔ)句之前,請(qǐng)先打開(kāi)“教務(wù)管理系統(tǒng).mdb”,并建立一個(gè)空白查詢,把查詢?cè)O(shè)計(jì)窗口切換到SQL視圖,如圖5-1-8所示。(1)SELECT子句?!癆LL|DISTINCT”:“ALL”返回查詢所得到的全部記錄,而不管這些記錄是否有重復(fù);“DISTINCT”,查詢所得到的記錄如構(gòu)有重復(fù),則不包括重復(fù)行(只返回第一條);省略“ALL|DISTINCT”默認(rèn)表示“ALL”。任務(wù)1:在學(xué)生信息表中查詢班級(jí)編號(hào)。相應(yīng)的SELECT語(yǔ)句如下所示。SELECTALL班級(jí)編號(hào)FROM學(xué)生信息
圖5-1-8切換到SQL視圖運(yùn)行查詢,結(jié)果返回的是每個(gè)學(xué)生所在班級(jí)的班級(jí)編號(hào)。由于每個(gè)班都有多個(gè)學(xué)生,而此處只選擇班級(jí)編號(hào),因此查詢結(jié)果有很多重復(fù)記錄,如圖5-1-9所示。任務(wù)2:在學(xué)生信息表中查詢班級(jí)編號(hào),要求不要重復(fù)記錄。相應(yīng)的SELECT語(yǔ)句如下所示。SELECTDISTINCT班級(jí)編號(hào)FROM學(xué)生信息運(yùn)行查詢,返回的結(jié)果中只剩下了兩個(gè)班級(jí)編號(hào),如圖5-1-10所示?!?lt;列表達(dá)式1>[AS<別名1>]”:“<列表達(dá)式1>”是對(duì)字段可以用運(yùn)算符作運(yùn)算;“[AS<別名1>]”表示可以為很長(zhǎng)的表達(dá)式起一個(gè)別名,以方便使用。任務(wù)3:學(xué)生信息表中查詢每個(gè)學(xué)生的姓名和年齡??梢詫?xiě)出如下的SELECT語(yǔ)句。SELECT姓名,年齡FROM學(xué)生信息
圖5-1-9省略或使用“ALL”
圖5-1-10使用“DISTINCT”執(zhí)行查詢,出現(xiàn)“輸入?yún)?shù)值”對(duì)話框,如圖5-1-11。輸入“23”,單擊【確定】按鈕,結(jié)果中每個(gè)學(xué)生的年齡都是“23”,如圖5-1-12所示。打開(kāi)學(xué)生信息表后,會(huì)發(fā)現(xiàn)根本沒(méi)有“年齡”這個(gè)字段,也無(wú)法計(jì)算出這個(gè)“年齡”的值。在Access中,如果出現(xiàn)上述情況,則Access認(rèn)為是要執(zhí)行一個(gè)參數(shù)查詢,所以要求輸入年齡的值。怎樣才能查詢到年齡呢?仔細(xì)查看學(xué)生信息表,發(fā)現(xiàn)雖然沒(méi)有“年齡”字段,但是有“出生日期”字段,可以利用“出生日期”計(jì)算出年齡。修改SQL視圖的SELECT語(yǔ)句如下所示。SELECT姓名,Year(Date())-Year([出生日期])AS年齡FROM學(xué)生信息運(yùn)行查詢,結(jié)果如圖5-1-13所示。
圖5-1-12查詢年齡結(jié)果
圖5-1-11“輸入?yún)?shù)值”對(duì)話框
圖5-1-13由“出生日期”查詢“年齡”在這個(gè)SELECT語(yǔ)句中,“Year(Date())-Year([出生日期])”是一個(gè)表達(dá)式。其中,Date()是系統(tǒng)提供的返回系統(tǒng)當(dāng)前日期的函數(shù);Year()也是一個(gè)系統(tǒng)提供的函數(shù),它的作用是從一個(gè)日期型的數(shù)據(jù)中提取年份。因此,Year(Date())的結(jié)果就是當(dāng)前的年“2007”。同樣Year([出生日期])就將是數(shù)據(jù)表中當(dāng)前記錄的“出生日期”字段的年份。二者相減的結(jié)果就是對(duì)應(yīng)的當(dāng)前記錄代表的學(xué)生的“年齡”。但是,這個(gè)表達(dá)式是憑空加上去的,作為查詢結(jié)果希望對(duì)應(yīng)的這一列能有個(gè)清晰的名稱,所以再使用“AS年齡”為這個(gè)表達(dá)式起個(gè)“別名”。查詢結(jié)果中就有了“年齡”這一列。在SELECT語(yǔ)句中經(jīng)常有此類(lèi)的應(yīng)用。如:在圖書(shū)銷(xiāo)售系統(tǒng)中,由圖書(shū)“總庫(kù)存量”和“總銷(xiāo)售量”可以得到某一本圖書(shū)的當(dāng)前庫(kù)存量。(2)FROM子句:要從哪些數(shù)據(jù)表中查找您想要的結(jié)果,就把對(duì)應(yīng)的數(shù)據(jù)表的名字寫(xiě)在FROM后面,相鄰兩個(gè)之間用逗號(hào)隔開(kāi)就可以了。(3)WHERE子句:是用來(lái)指定要查詢滿足何種條件的記錄。<條件表達(dá)式1>的構(gòu)成如表5-1所示。類(lèi)型謂詞比較=><>=<=!=<>確定范圍BETWEENAND、NOTBETWEENAND確定集合IN、NOTIN字符匹配LIKE(“%”匹配任何長(zhǎng)度,“_”匹配一個(gè)字符)、NOTLIKE注意:在Access中“%”換為“*”,“_”換為“?”空值ISNULL、ISNOTNULL子查詢ANY、ALL、EXISTS集合查詢UNION(并)、INTERSECT(交)、MINUS(差)
多重條件AND、OR、NOT表5-1條件表達(dá)式構(gòu)成任務(wù)4:在學(xué)生信息表中查找年齡為26歲的學(xué)生的姓名和民族。首先,實(shí)現(xiàn)查找所有學(xué)生的姓名和民族。相應(yīng)的SELECT語(yǔ)句如下所示。
SELECT姓名,民族
FROM學(xué)生信息然后,為這個(gè)SELECT語(yǔ)句加上“WHERE”子句,如下所示。
SELECT姓名,民族
FROM學(xué)生信息WHERE(Year(Date())-Year([出生日期]))=26
圖5-1-14單個(gè)比較條件表達(dá)式在WHERE子句中,Year(Date())-Year([出生日期])就是前面用到的計(jì)算年齡的表達(dá)式;把這個(gè)表達(dá)式和一個(gè)具體的數(shù)值“26”相比較就構(gòu)成了一個(gè)比較類(lèi)型“條件表達(dá)式”,只有一個(gè)限定條件。查詢結(jié)果如圖5-1-14所示。
圖5-1-14單個(gè)比較條件表達(dá)式任務(wù)5:在學(xué)生信息表中查找年齡在26~28歲之間的學(xué)生的姓名和民族。只要把WHERE子句修改成如下所示。SELECT姓名,民族FROM學(xué)生信息WHERE(Year(Date())-Year([出生日期]))>=26AND(Year(Date())-Year([出生日期]))<=28此時(shí),條件表達(dá)式就是由“AND”連接的多重條件表達(dá)式?!癆ND”表示“并且”的意思。結(jié)果如圖5-1-15所示。同樣的,這個(gè)例子還可以使用確定范圍的條件表達(dá)式“BETWEENAND”。“BETWEENAND”字面的意思是“在和之間”。因此,上面的這個(gè)例子可以修改WHERE子句為如下所示。SELECT姓名,民族FROM學(xué)生信息WHERE(Year(Date())-Year([出生日期]))BETWEEN26AND28
圖5-1-15AND多重條件表達(dá)式但是,“BETWEENAND”只能適用于某個(gè)字段或表達(dá)式在兩個(gè)值之間的情況。
圖5-1-16NOT條件表達(dá)式如果條件多于兩個(gè),可以使用“AND”、“OR”或“NOT”把多個(gè)條件連接在一起。“OR”表示“或”的意思,“NOT”表示“非”的意思。把這個(gè)例子再作如下的修改。SELECT姓名,民族FROM學(xué)生信息WHERENOT(Year(Date())-Year([出生日期]))BETWEEN26AND28這就表示:查找年齡不在26~28歲之間的學(xué)生的姓名和民族。結(jié)果如圖5-1-16所示。任務(wù)6:在學(xué)生信息表中查找所有“王”姓的學(xué)生的姓名和民族。還是查詢學(xué)生的姓名和民族,因此,除去“WHERE”子句的SELECT語(yǔ)句如下所示。SELECT姓名,民族FROM學(xué)生信息
圖5-1-16NOT條件表達(dá)式
那么如何確定“姓‘王’”的條件呢?這就要用到“字符匹配”查詢,使用“LIKE”謂詞,完整的的語(yǔ)句如下。SELECT姓名,民族FROM學(xué)生信息WHERE姓名LIKE'王%'“姓名LIKE'王%'”表示姓名字段是“王”字開(kāi)頭。“%”匹配后面的其他多個(gè)任意字符,如“王長(zhǎng)江”、“王猛”等情形。如果把上面的語(yǔ)句的“WHERE”子句改寫(xiě)成“WHERE姓名LIKE'王_'”則可以查詢出“所有姓‘王’,并且姓名中只有兩個(gè)字的學(xué)生”?!癬”表示匹配單個(gè)任意字符。注意:由于不同的數(shù)據(jù)庫(kù)產(chǎn)品在實(shí)現(xiàn)SQL時(shí)使用了自己的語(yǔ)法特性,所以上面兩個(gè)語(yǔ)句在Access中書(shū)寫(xiě)時(shí)請(qǐng)把“%”換為“*”,“_”換為“?”。下面介紹UNION類(lèi)型的集合查詢,也就是在案例中使用的“聯(lián)合查詢”。UNION前后分別是一個(gè)SELECT語(yǔ)句,如下所示。SELECT語(yǔ)句AUNIONSELECT語(yǔ)句B
“UNION”的意思是“把前后兩個(gè)SELECT語(yǔ)句產(chǎn)生的“虛擬表”(結(jié)果)合并到一個(gè)集合中”。因此,使用“UNION”連接的兩個(gè)SQL語(yǔ)句產(chǎn)生的“虛擬表”要有相同的“結(jié)構(gòu)”:列的數(shù)目相等,對(duì)應(yīng)的類(lèi)型一致(本案例則是“完全相同”)。這是使用聯(lián)合查詢必須要注意的地方。至于每個(gè)SELECT語(yǔ)句的查詢條件,如“WHERE國(guó)家='中國(guó)'”,則視具體情況而定,不一定非要一樣。任務(wù)7:如要查詢“2004年5月1日以前與本公司有業(yè)務(wù)往來(lái)的客戶的公司名稱和所在城市的相關(guān)情況”,則可能的SQL語(yǔ)句如下所示。SELECT公司名稱,城市FROM供應(yīng)商WHERE進(jìn)貨日期<=#2004-5-1#UNIONSELECT公司名稱,城市FROM經(jīng)銷(xiāo)商WHERE發(fā)貨日期<=#2004-5-1#如果在查詢中有重復(fù)記錄(即所選字段內(nèi)容完全一樣的記錄),則聯(lián)合查詢只顯示重復(fù)記錄中的第一條記錄;要想顯示所有的重復(fù)記錄,需要在“UNION”后加上關(guān)鍵字“ALL”,即寫(xiě)成“UNIONALL”。
5.2相關(guān)知識(shí)
1.SQL子查詢子查詢就是嵌入在另一個(gè)SELECT、SELECTINTO、INSERTINTO、DELETE或UPDATE語(yǔ)句內(nèi)部的SELECT語(yǔ)句。它可以對(duì)基于另一個(gè)結(jié)果集的結(jié)果進(jìn)行進(jìn)一步的限制。這叫做嵌入,并且因?yàn)橐粋€(gè)子查詢就是一個(gè)SELECT語(yǔ)句,也可以把一個(gè)子查詢嵌入到另一個(gè)子查詢里面。當(dāng)在一個(gè)SQL語(yǔ)句中使用一個(gè)子查詢時(shí),它可以作為一個(gè)域列表、WHERE子句或者HAVING子句的一部分。有3種基本的子查詢形式,并且每種都使用不同種類(lèi)的謂詞。2.IN子查詢IN子查詢用于檢索這樣的一組值,即其中記錄的某一列的值都被另一個(gè)工作表或查詢中的一列的值包含。它從其他工作表中只能返回一列,這是一個(gè)限制條件。如果返回的結(jié)果多于一列就會(huì)產(chǎn)生一個(gè)錯(cuò)誤。一個(gè)返回所有擁有發(fā)票的顧客的列表的SQL語(yǔ)句如下。SELECT*FROMtblCustomersWHERECustomerIDIN(SELECTCustomerIDFROMtblInvoices)通過(guò)使用NOT邏輯操作符,可以檢索和IN子查詢相反的記錄,從而獲得所有沒(méi)有任何發(fā)票的顧客列表。SELECT*FROMtblCustomersWHERECustomerIDNOTIN(SELECTCustomerIDFROMtblInvoices)3.ANY/SOME/ALL子查詢ANY、SOME和ALL子查詢謂詞被用于比較主查詢的記錄和子查詢的多個(gè)輸出記錄。ANY和SOME謂詞是同義詞并可以被替換使用。當(dāng)需要從主查詢中檢索任何符合在子查詢中滿足比較條件的記錄時(shí),可以使用ANY或SOME謂詞。謂詞應(yīng)該恰好放在子查詢開(kāi)始的括號(hào)前面。SELECT*FROMtblCustomersWHERECustomerID=ANY(SELECTCustomerIDFROMtblInvoices)注意由上面SQL語(yǔ)句所返回的結(jié)果集和IN子查詢例子所返回的結(jié)果集相同。而與ANY和SOME謂詞的不同之處在于它們都可以使用等于(=)以外的操作符,比如大于(>)和小于(<)。SELECT*FROMtblCustomersWHERECustomerID>ANY(SELECTCustomerIDFROMtblInvoices)當(dāng)想在主查詢中檢索滿足子查詢比較條件的所有記錄時(shí)使用謂詞ALL。SELECT*FROMtblCustomersWHERECustomerID>ALL(SELECTCustomerIDFROMtblInvoices)4.EXISTS子查詢EXISTS謂詞是用于子查詢?cè)谝粋€(gè)結(jié)果集中檢查所有存在值的記錄。換句話說(shuō),就是如果子查詢沒(méi)有返回任何行,這個(gè)比較就是False。而如果它返回了一行或多行,這個(gè)比較就為T(mén)rue。SELECT*FROMtblCustomersASAWHEREEXISTS(SELECT*FROMtblInvoicesWHEREA.CustomerID=tblInvoices.CustomerID)注意:在前面的SQL語(yǔ)句中,tblCustomers工作表使用了一個(gè)別名,這就是為何可以在后來(lái)的子查詢中引用它的原因。當(dāng)一個(gè)子查詢以這種格式與一個(gè)主查詢聯(lián)接時(shí)就稱相關(guān)查詢。通過(guò)使用NOT邏輯操作符,可以檢索和EXISTS子查詢相反的記錄,從而可以得到所有沒(méi)有任何發(fā)票的顧客的結(jié)果集。SELECT*FROMtblCustomersASA(SELECT*FROMtblInvoicesWHEREA.CustomerID=tblInvoices.CustomerID)
5.3
相關(guān)知識(shí)
在Access中,創(chuàng)建數(shù)據(jù)定義查詢是使用SQL語(yǔ)言的DDL語(yǔ)句。可以使用的DDL語(yǔ)句主要有5種,如表5-3-1所示。注意:在一個(gè)數(shù)據(jù)定義查詢中只能使用一條DDL語(yǔ)句。種
類(lèi)功
能CREATETABLE創(chuàng)建數(shù)據(jù)表DROPTABLE刪除數(shù)據(jù)表ALTERTABLE更新數(shù)據(jù)表CREATEINDEX創(chuàng)建索引DROPINDEX刪除索引下面就這幾種語(yǔ)句的語(yǔ)法分別講解。1.CREATETABLE語(yǔ)句CREATETABLE語(yǔ)句創(chuàng)建一個(gè)新表,此時(shí),表是一個(gè)空表,表中沒(méi)有任何數(shù)據(jù)。這個(gè)語(yǔ)句的格式如下所示。CREATETABLEtable_name(column_name_1
data_type_1[size][NOTNULL],
column_name_2
data_type_2[size],…CONSTRAINT[Index_name1]PRIMARYKEY([column_name_*]);有關(guān)這個(gè)語(yǔ)句的語(yǔ)法的相關(guān)說(shuō)明如表5-3-2所示表5-3-2CREATETABLE語(yǔ)句說(shuō)明元
素說(shuō)
明table_name要?jiǎng)?chuàng)建的表的名稱column_name_*要在新表中創(chuàng)建的字段的名稱。必須創(chuàng)建至少一個(gè)字段data_type_*在新表中字段的數(shù)據(jù)類(lèi)型size以字符為單位的字段大小(僅限于文本和二進(jìn)制字段)NOTNULL在添加新記錄時(shí)該字段不能為空CONSTRAINT[Index_name1使用約束,索引本案例中創(chuàng)建的客戶表的CREATETABLE語(yǔ)句如下所示這個(gè)CREATETABLE語(yǔ)句創(chuàng)建了一個(gè)名為“客戶”的數(shù)據(jù)表;數(shù)據(jù)表中共有4個(gè)字段,分別為“客戶ID”、“名稱”、“電話”、“地址”;它們的數(shù)據(jù)類(lèi)型是,“客戶ID”為integer整型,其余為text文本型;其中,“客戶ID”被“CONSTRAINT”指定為使用約束創(chuàng)建為索引,并有“PRIMARY
KEY”設(shè)置為主關(guān)鍵字。2.DROPTABLE語(yǔ)句DROPTABLE語(yǔ)句刪除指定名稱的數(shù)據(jù)表,它的語(yǔ)法格式為:CREATETABLE客戶([客戶ID]
integer,[名稱]
text,[電話]
text,[地址]
text,CONSTRAINT
[Index1]
PRIMARY
KEY([客戶ID]));DROPTABLEtable_name本案例中為:“DROPTABLE客戶;”
3.ALTER
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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年個(gè)人抵押車(chē)輛借款合同編制要點(diǎn)
- 2025版公寓水電維修合同范本(1000字系列)12篇
- 2025版關(guān)鍵信息基礎(chǔ)設(shè)施保密協(xié)議合同3篇
- 二零二五年油茶林生態(tài)環(huán)境保護(hù)與修復(fù)合作協(xié)議3篇
- 2025年度個(gè)人信用保證反擔(dān)保承諾書(shū)示例4篇
- 2025年汽車(chē)配件代購(gòu)合同示范文本4篇
- 個(gè)性化2024版中介服務(wù)居間合同樣本一
- 2025年度二零二五年度國(guó)際貿(mào)易保理業(yè)務(wù)合作協(xié)議4篇
- 個(gè)人貨款定金擔(dān)保合同2024年版3篇
- 二零二五版數(shù)據(jù)中心網(wǎng)絡(luò)安全審計(jì)與整改服務(wù)協(xié)議3篇
- 醫(yī)學(xué)脂質(zhì)的構(gòu)成功能及分析專題課件
- 高技能人才培養(yǎng)的策略創(chuàng)新與實(shí)踐路徑
- 人教版(2024新版)七年級(jí)上冊(cè)英語(yǔ)期中+期末學(xué)業(yè)質(zhì)量測(cè)試卷 2套(含答案)
- 2024年湖北省中考數(shù)學(xué)試卷(含答案)
- 油煙機(jī)清洗安全合同協(xié)議書(shū)
- 2024年云南省中考數(shù)學(xué)試題(原卷版)
- 污水土地處理系統(tǒng)中雙酚A和雌激素的去除及微生物研究
- 氣胸病人的護(hù)理幻燈片
- 《地下建筑結(jié)構(gòu)》第二版(朱合華)中文(2)課件
- JB T 7946.1-2017鑄造鋁合金金相
- 包裝過(guò)程質(zhì)量控制
評(píng)論
0/150
提交評(píng)論