第三講:結(jié)構(gòu)化查詢語言(二)_第1頁
第三講:結(jié)構(gòu)化查詢語言(二)_第2頁
第三講:結(jié)構(gòu)化查詢語言(二)_第3頁
第三講:結(jié)構(gòu)化查詢語言(二)_第4頁
第三講:結(jié)構(gòu)化查詢語言(二)_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第三講:結(jié)構(gòu)化查詢語言(二)上一講我們學(xué)習(xí)了利用SQL實(shí)現(xiàn)對(duì)數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行插入、刪除和修改的操作,由于查詢的種類復(fù)雜,涉及的知識(shí)點(diǎn)較多,考慮到童鞋們的接受能力故此單獨(dú)的將其獨(dú)立起來在本講中進(jìn)行說明。【數(shù)據(jù)查詢操作指令】通常應(yīng)用程序?qū)?shù)據(jù)庫執(zhí)行最多的操作就是查詢,而查詢也是SQL語句中最為紛繁復(fù)雜的操作。通過SQL中的數(shù)據(jù)操縱語言指令SELECT,可以大大簡化我們查詢的步驟,僅僅只需要一句話就可以完成查詢操作得到我們想要的結(jié)果。通常SELECT指令伴隨著FROM指令使用,意味著“從某張表中進(jìn)行查詢”。查詢時(shí)也可以帶有WHERE子句,用于指示查詢的條件,SELECT操作格式如下:SELECT

2、COLUMNS FROM TABLE_NAME WHERE CONDITIONS 其中 內(nèi)指示著查詢所使用的WHERE子句,可以包含也可以不包含。視具體情況而定。COLUMNS可以指某一個(gè)或者某幾個(gè)具體的列,也可以指表格中所有的列。表格中所有的列通常使用通配符“*”表示?!竞唵尾樵儭亢唵尾樵兪侵覆缓蠾HERE子句的查詢語句,通常是對(duì)整張表格中的所有數(shù)據(jù)進(jìn)行操作。常見的查詢有以下的幾種:查詢數(shù)據(jù)表中所有的記錄:查詢數(shù)據(jù)表中所有的記錄的格式如下:SELECT * FROM TABLE_NAME其中“*”為SQL語句中的通配符,在該句中指代數(shù)據(jù)表中已有的所有屬性。例 查詢學(xué)生信息表中所有的數(shù)據(jù)SE

3、LECT * FROM Student_INF運(yùn)行結(jié)果如下:查詢數(shù)據(jù)表中的部分列信息:通常我們有時(shí)并不需要查詢所有的信息,可能只需要知道一兩列的信息就可以了。此時(shí)我們可以在SELECT關(guān)鍵字后加上你需要搜索的列即可。如果有多個(gè)列的話要記得以逗號(hào)隔開哦!格式如下:SELECT COLUMN1,COLUMN2,COLUMNn FROM TABLE_NAME例 查詢學(xué)生信息表中所有學(xué)生的學(xué)號(hào):SELECT ID FROM Student_INF運(yùn)行結(jié)果如下:例 查詢學(xué)生信息表中的學(xué)號(hào),姓名以及年齡信息:SELECT ID,Name,Age FROM Student_INF運(yùn)行結(jié)果如下:【條件查詢】所

4、謂的條件查詢即帶有查詢條件的SELECT語句,這類語句通常使用WHERE加上相應(yīng)的條件進(jìn)行查詢,條件的表達(dá)式可以是任意符合SQL規(guī)范的關(guān)系或者邏輯表達(dá)式。由于上一講在介紹查詢時(shí)已經(jīng)介紹過關(guān)系運(yùn)算符和邏輯運(yùn)算符,因此此處將不再重點(diǎn)介紹。例 查詢學(xué)生信息表中年齡大于18歲的學(xué)生的記錄SELECT * FROM Student_INF WHERE Age > 18運(yùn)行結(jié)果如下:例 查詢學(xué)生信息表中ID為“211501012”的學(xué)生記錄:SELECT * FROM Student_INF WHERE ID = '211501012'運(yùn)行結(jié)果如下:小提示:SELECT語句所查詢的結(jié)

5、果總是以表格的形式返回的(即使只有一個(gè)單元格)。如果SELECT語句查詢不到符合條件的結(jié)果則返回一張空表。在MFC的ADO接口中通常使用RecordSet類型來存儲(chǔ)查詢的結(jié)果。例 查詢學(xué)生信息表中ID為“211501002”或者姓名為“張三”的元組:SELECT * FROM Student_INF WHERE ID = '211501002' OR Name = '張三'運(yùn)行結(jié)果如下:【模糊查詢】模糊查詢是數(shù)據(jù)查詢中較為特殊的一類查詢。通常用于只知其一不知其二的場合,例如我們需要查詢姓張的所有學(xué)生的信息(假設(shè)有100個(gè)姓張的同學(xué)),此時(shí)我們就不能再使用“=”和

6、 AND運(yùn)算符進(jìn)行運(yùn)算了,否則其查詢和解析表達(dá)式的時(shí)間是會(huì)大的可怕的,當(dāng)然這對(duì)于程序員來說也是很不利的,因?yàn)椴⒉粫?huì)有人為了查詢100個(gè)數(shù)據(jù)而寫100個(gè)表達(dá)式。因此,在SQL中提出了模糊查詢的概念,通過LIKE關(guān)鍵字以及通配符對(duì)數(shù)據(jù)庫中的信息進(jìn)行檢索。通配符:通配符是在SQL中常用的代替字符串的符號(hào)。多用于模糊查詢,當(dāng)然在其他的一些編程語言中諸如C#、Java等提出的“正則表達(dá)式”也是使用通配符進(jìn)行字符的代替或者匹配。可見“通配符”三個(gè)字不是一句空話。在SQL中常用的通配符有如下:通配符含義%表示任意多個(gè)字符_表示單個(gè)任意字符指定某個(gè)字符的取值范圍指定某個(gè)字符排除的取值范圍例 請(qǐng)利用通配符表示姓

7、張的同學(xué)即已知姓為張,名字不知道。張%解析:通常按照中國人的習(xí)慣姓在前,名字在后,而雖然我們知道這個(gè)同學(xué)姓張,但是卻無法猜測出他的名字是兩個(gè)字還是三個(gè)字,故此使用%代替多個(gè)字符。例請(qǐng)利用通配符表示姓名中第二個(gè)字帶有張的_張%解析:由于“張”字是姓名中的第二個(gè)字符,因此前面只能夠用表示單個(gè)任意字符的通配符“_”代替,而“張”字后面的字符則是任意個(gè)的,故此用“%”代替。例 姓名中包含“張”字的%張%解析:本題中僅僅只說明了姓名中包含“張”字,而并沒有說明“張”字位于哪一個(gè)位置,因此張字前可能有一個(gè)字符,也可能有多個(gè)字符,故此使用%代替。“張”字后同理。例 學(xué)生的姓介于陳到鄧或者楊到張的陳-鄧,楊-

8、張%解析:本題中說明姓在“陳-鄧”或者“楊-張”的取值范圍之間,故此后者采用%代替學(xué)生名字。而按照題意,則選擇通配符“”為學(xué)生的姓指定范圍。小提示:方括號(hào)內(nèi)通常使用“-”符號(hào)指定取值范圍,若有多個(gè)取值范圍則需要使用逗號(hào)“,”隔開。中文字符在匹配時(shí)則使用其拼音序列進(jìn)行比較。在大家掌握了最基本的通配符表達(dá)式之后,就可以利用LIKE關(guān)鍵字和通配符表達(dá)式進(jìn)行模糊查詢了。在這里舉兩個(gè)小例子。例 查詢學(xué)生信息表中姓張的學(xué)生信息SELECT * FROM Student_INF WHERE Name LIKE '張%'運(yùn)行結(jié)果如下:例 查詢住址在江蘇省以內(nèi)的學(xué)生姓名:SELECT Name

9、FROM Student_INF WHERE _Address LIKE '江蘇省%'運(yùn)行結(jié)果如下:【IN關(guān)鍵字的查詢】通常當(dāng)我們需要查詢條件滿足某一個(gè)集合的記錄時(shí),會(huì)使用IN關(guān)鍵字,它適合于列值的取值范圍不是一個(gè)連續(xù)的區(qū)間而是某些離散值。例如只要查詢住在徐州、淮安以及蘇州三地的學(xué)生的信息。按照我們以往的寫法我們會(huì)將條件寫成如下的形式:_Address = '江蘇省徐州市' OR _Address = '江蘇省淮安市' OR _Address = '江蘇省蘇州市'這樣的條件對(duì)于程序員來說還是太過于麻煩了。接下來我們將通過IN關(guān)鍵字

10、對(duì)上述條件進(jìn)行簡化:SELECT * FROM Student_INF WHERE _Address IN ('江蘇省徐州市','江蘇省蘇州市','江蘇省淮安市')運(yùn)行效果如下:【BETWEEN AND關(guān)鍵字表示范圍的查詢】在SQL中我們可以使用BETWEEN AND關(guān)鍵表示指定范圍內(nèi)的查詢,通常我們用于查詢數(shù)值處于a,b區(qū)間的記錄。例 查詢年齡處于18到20歲之間的學(xué)生信息SELECT * FROM Student_INF WHERE Age BETWEEN 18 AND 20【使用IS NOT NULL查詢】在SQL中我們可以通過IS NOT

11、 NULL查詢非空的字段,只要字段不為空,即可查詢出對(duì)應(yīng)的結(jié)果。例 查詢姓名不為空的學(xué)生信息SELECT * FROM Student_INF WHERE Name IS NOT NULL運(yùn)行結(jié)果如下:【去除重復(fù)的記錄】在查詢的過程中難免會(huì)遇到一些重復(fù)的記錄(例如表格中沒有設(shè)置主鍵),為了保證查詢的準(zhǔn)確性,我們可以使用DISTINCT關(guān)鍵字對(duì)查詢出的記錄進(jìn)行去重復(fù)的操作。例 查詢姓名不為空的學(xué)生信息且去除重復(fù)的記錄SELECT DISTINCT * FROM Student_INF WHERE Name IS NOT NULL運(yùn)行效果如下:【使用統(tǒng)計(jì)函數(shù)】在SQL中提供了一系列的統(tǒng)計(jì)函數(shù),也稱之為聚合函數(shù),幫助我們快速而方便的統(tǒng)計(jì)出相關(guān)的信息。常用的聚合函數(shù)如下:函數(shù)定義含義SUM(表達(dá)式)用于計(jì)算一列或者多列的算術(shù)表達(dá)式的和AVG(表達(dá)式)用于計(jì)算一列或者多列的算術(shù)表達(dá)式的平均分MAX(表達(dá)式)用于計(jì)算一列或者多列的算術(shù)表達(dá)式的最大值MIN(表達(dá)式)用于計(jì)算一列或者多列的算術(shù)表達(dá)式的最小值COUNT(*)用于計(jì)算查詢到的結(jié)果的數(shù)目COUNT()例 求學(xué)生信息表中的所有學(xué)生年齡的總和SELECT SUM(Age) FROM Student_INF例 求學(xué)生信息表中的所有學(xué)生年齡的平均值SE

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論