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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論