皇甫大雙
摘要:在數(shù)據(jù)庫系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)的過程中,許多的模塊都需要實(shí)現(xiàn)查詢的功能,如果要從數(shù)據(jù)庫中查詢滿足條件的數(shù)據(jù),可以通過Select語句來實(shí)現(xiàn)。所以關(guān)注SQL Server數(shù)據(jù)庫查詢的研究以及實(shí)例應(yīng)用就顯得很有必要。
關(guān)鍵詞:數(shù)據(jù)庫;查詢;數(shù)據(jù)分組;測(cè)試
中圖分類號(hào):TP393文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2020)28-0046-02
開放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
在數(shù)據(jù)庫系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)的過程中,許多的模塊都需要實(shí)現(xiàn)查詢的功能,如果要從數(shù)據(jù)庫中查詢滿足條件的數(shù)據(jù),可以通過Select語句來實(shí)現(xiàn)。
查詢(Query)通常又被稱為檢索,是數(shù)據(jù)庫技術(shù)中最基本、最核心的操作之一。SQL Server數(shù)據(jù)庫提供了強(qiáng)大的查詢功能,主要包括有簡(jiǎn)單查詢、條件查詢、數(shù)據(jù)分組統(tǒng)計(jì)查詢、連接查詢以及子查詢等?;诖耍菊撐闹饕陨唐蜂N售管理數(shù)據(jù)庫系統(tǒng)為例,重點(diǎn)探討較為復(fù)雜的子查詢?cè)趯?shí)際問題中的研究以及應(yīng)用。
1 子查詢知識(shí)簡(jiǎn)介
1.1子查詢的概念
子查詢通常又被稱為嵌套查詢,是一個(gè)嵌套在Select、Insert、Update、Delete數(shù)據(jù)操縱語句或其他子查詢中的查詢。任何允許使用表達(dá)式的地方都可以使用子查詢。子查詢也稱為內(nèi)部查詢或內(nèi)部選擇,一般都需要用括號(hào)括起來,而包含子查詢的語句稱為外部查詢或外部選擇。
1.2常見的幾種子查詢
在T-SQL語句中使用in或not in的子查詢、使用比較運(yùn)算符的子查詢、使用any、all比較運(yùn)算符的子查詢以及使用exists或not exists的子查詢,這四種查詢是較為常見和使用的子查詢。
1.3 子查詢的語法格式
Select <字段列表> from <表名>
Where <列表或列表表達(dá)式>(子查詢)
2 商品銷售管理數(shù)據(jù)庫
在商品銷售管理系統(tǒng)中創(chuàng)建一個(gè)名為Manage的數(shù)據(jù)庫,該數(shù)據(jù)庫包含客戶信息表(Buyers)、商品信息表(Wares)和商品訂購信息表(Sales)三個(gè)表格,具體的表結(jié)構(gòu)如下所示。
3 子查詢的實(shí)例應(yīng)用
3.1 使用in或not in子查詢進(jìn)行集成員測(cè)試查詢
使用子查詢進(jìn)行集成員測(cè)試時(shí),通過邏輯運(yùn)算符in或not in將一個(gè)表達(dá)式的值與子查詢返回的零個(gè)或多個(gè)值進(jìn)行比較。In或not in子查詢用于對(duì)一個(gè)給定值是否存在于子查詢結(jié)果集中的判斷,其中,當(dāng)表達(dá)式與子查詢結(jié)果集中的某個(gè)值相等時(shí),返回True,否則返回False,若使用了not,則返回的值剛好相反。舉例如下:
使用子查詢檢索訂購了貨品編號(hào)為20200001的客戶的所有信息,在查詢分析器中輸入以下的T-SQL代碼即可實(shí)現(xiàn):
Select * From Buyers
Where BuyerID in (Select BuyerID From Sales where WaresID=20200001)
3.2 使用子查詢進(jìn)行比較測(cè)試
在帶有比較運(yùn)算符的子查詢中,子查詢的結(jié)果是一個(gè)單值。父查詢通過比較運(yùn)算符將父查詢中的一個(gè)表達(dá)式與子查詢的結(jié)果(單值)進(jìn)行比較,當(dāng)表達(dá)式的值與子查詢結(jié)果比較后,運(yùn)算的結(jié)果為True,則父查詢中的“表達(dá)式比較運(yùn)算符(子查詢)”條件表達(dá)式返回True,否、則返回False,常用的比較運(yùn)算符有=、>、<、>=、<=、<>、!>、!<、!=等,舉例如下:
使用子查詢檢索商品信息表Wares中價(jià)格高于平均價(jià)格商品的信息,在查詢分析器中輸入以下的T-SQL代碼即可實(shí)現(xiàn):
Select * From Wares
Where unitPrice > (select Avg(unitPrice) from Wares)
3.3 使用any、all運(yùn)算符的批量比較測(cè)試子查詢
子查詢中返回單值時(shí)可以使用比較運(yùn)算符,如若返回的是一個(gè)結(jié)果集多值的情況下,這時(shí)不僅要用到比較運(yùn)算符,同時(shí)還需要用到any或all兩個(gè)邏輯運(yùn)算符。any、all與比較運(yùn)算符的應(yīng)用如下表所示:
使用any運(yùn)算符的舉例為:使用子查詢檢索某次訂貨金額低于500元的客戶信息,在查詢分析器中輸入以下的T-SQL代碼即可實(shí)現(xiàn):
Select * from Buyers
Where 500 > any(Select amount From Sales where Buyers.BuyerID=Sales.BuyerID )
使用all運(yùn)算符的舉例為:使用子查詢檢索未曾被客戶購買的商品編號(hào)以及商品名稱,在查詢分析器中輸入以下的T-SQL代碼即可實(shí)現(xiàn):
Select ?WaresID,WaresName from Wares
Where WaresID<> all(Select distinct WaresID from Sales)
3.4 使用Exists子查詢進(jìn)行存在性測(cè)試
使用Exists關(guān)鍵字引入一個(gè)子查詢時(shí),相當(dāng)于進(jìn)行一次存在測(cè)試。外部查詢的where字句測(cè)試子查詢返回的行是否存在,如果在子查詢的結(jié)果集中包含有,一條或多條記錄,則存在性測(cè)試返回True,否則返回False,Not Exists將對(duì)存在性測(cè)試結(jié)果取相反。舉例如下:
使用子查詢檢索所有沒有訂貨的客戶信息,在查詢分析器中輸入以下的T-SQL代碼即可實(shí)現(xiàn):
Select * from Buyers
Where not Exists (select * from Sales where Buyers.BuyerID=sales.BuyerID)
4 結(jié)束語
SQL Server數(shù)據(jù)庫中數(shù)據(jù)的查詢是一個(gè)非常重要同時(shí)也是使用頻繁的功能,特別是涉及兩個(gè)以上的多表查詢的時(shí)候子查詢的使用就顯得尤為重要。有了子查詢,我們可以將另一張表中需要的數(shù)據(jù)通過子查詢的方式先查出來,然后再通過連接將結(jié)果和另一個(gè)表中的結(jié)果根據(jù)連接條件組合在一起,由于連接之前先做了一次查詢,查詢的結(jié)果只是符合要求的數(shù)據(jù)記錄,而不是所有的,這樣其實(shí)就減少了連接時(shí)表的數(shù)據(jù)記錄,大大地提高了查詢的速度。
參考文獻(xiàn):
[1] 周旺紅.SQL Server 2012數(shù)據(jù)庫T-SQL查詢方法及實(shí)例解析[J].信息與電腦(理論版),2018(24):144-145.
[2] 張沛露,王建軍.基于網(wǎng)絡(luò)平臺(tái)的數(shù)據(jù)庫基礎(chǔ)課程教學(xué)模式初探[J].科技傳播,2010,2(24):232,227.
[3] 孫志梅.淺談“數(shù)據(jù)庫基礎(chǔ)及應(yīng)用”教學(xué)中的體會(huì)[J].民營科技,2009(10):89.
[4] 張偉平,許帥,李媛媛,等.翻轉(zhuǎn)課堂對(duì)學(xué)習(xí)效果有效性的研究:教師角色視角——以教育技術(shù)學(xué)專業(yè)《數(shù)據(jù)庫基礎(chǔ)》實(shí)驗(yàn)課程為例[J].當(dāng)代教育理論與實(shí)踐,2017,9(1):73-75.
[5]韓麗.“SQL Server數(shù)據(jù)庫基礎(chǔ)”課程教學(xué)實(shí)踐——面向高職高專計(jì)算機(jī)應(yīng)用專業(yè)學(xué)生[J].科教文匯(下旬刊),2010(5):173-174.
【通聯(lián)編輯:代影】