《SQLServer2005數(shù)據(jù)庫技術(shù)及應(yīng)用》課件第8章 T-SQL基本查詢_第1頁
《SQLServer2005數(shù)據(jù)庫技術(shù)及應(yīng)用》課件第8章 T-SQL基本查詢_第2頁
《SQLServer2005數(shù)據(jù)庫技術(shù)及應(yīng)用》課件第8章 T-SQL基本查詢_第3頁
《SQLServer2005數(shù)據(jù)庫技術(shù)及應(yīng)用》課件第8章 T-SQL基本查詢_第4頁
《SQLServer2005數(shù)據(jù)庫技術(shù)及應(yīng)用》課件第8章 T-SQL基本查詢_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第8章 T-SQL基本查詢第8章 T-SQL基本查詢8.1 SELECT查詢語句的語法結(jié)構(gòu)8.2 SELECT子句指定由查詢返回的列8.3 使用WHERE子句指定篩選條件8.4 使用凵KE子句進(jìn)行模糊查詢8.5 使用ORDER BY指定結(jié)果集的排序第8章 T-SQL基本查詢SQL是結(jié)構(gòu)化查詢語言(Structured Query Language)的簡稱。Transact-SQL語言(為方便,以下簡稱T-SQL語言)是Microsoft SQL Server提供的查詢語言。 T-SQL語言只含有較少的非標(biāo)準(zhǔn)語法,因此將用T-SQL語言編寫的程序在不同數(shù)據(jù)庫平臺之間移植時,不會遇到太多困難。任何

2、應(yīng)用程序,只要目的是向SQL Server的數(shù)據(jù)庫管理系統(tǒng)發(fā)出命令以獲得數(shù)據(jù)庫管理系統(tǒng)的響應(yīng),最終都必須體現(xiàn)為以T-SQL語句為表現(xiàn)形式的指令。 8.1 SELECT查詢語句的語法結(jié)構(gòu)SELECT查詢語句是SQL語言的核心。SELECT語句的作用是讓數(shù)據(jù)庫服務(wù)器根據(jù)客戶的要求搜索出所需要的信息資料,并按規(guī)定的格式進(jìn)行整理,再返回給客戶。 SELECT查詢語句的語法格式SELECT查詢語句的語法格式為:SELECT ALL |DISTINCT|TOP selectlistINTOnew_table_sourse FROM ,.n WHERE clauseGROUP BY group_listHA

3、VING clauseORDER BY sort_listCOMPUTE clauseFOR BROWSESELECT查詢語句的語法格式 Select_list:所要查詢的字段名稱,它可以是從多個表中取出來的字段。INTOnew_table_sourse將查詢結(jié)果放到一個新的表中,值得注意的是,若SELECT命令中有UNION子句,則INTO一定要放在第一個SELECT保留字之后。FROM ,.n :指定要在 T-SQL 語句中使用的表或視圖(帶或不帶別名均可)。可在語句中使用多達(dá) 256 個表??蓪?table_source 變量指定為表源。 WHERE Clause:欲查詢數(shù)據(jù)的條件。SE

4、LECT查詢語句的語法格式 GROUP BY:可對字段進(jìn)行分類統(tǒng)計并給出數(shù)據(jù)的統(tǒng)計結(jié)果。 HAVING:功能如同WHERE,其不同之處在于是對分組條件進(jìn)行過濾,只有存在GROUP BY時才使用。ORDER BY:將查詢結(jié)果以某列或多列進(jìn)行排序, 再返回結(jié)果。COMPUTE:允許用一條SELECT命令同時查詢數(shù)據(jù),給出數(shù)據(jù)的細(xì)節(jié)和統(tǒng)計結(jié)果。 8.2 SELECT子句指定由查詢返回的列選擇指定列并指定它們的顯示次序選擇所有列使用TOP關(guān)鍵字指定只返回前面一定數(shù)量的數(shù)據(jù)使用DISTINCT關(guān)鍵字刪除重復(fù)的行使用計算列操作查詢的列名選擇指定列并指定它們的顯示次序【例8.1】從Student表中查詢學(xué)生

5、的姓名、性別、出生日期和家庭住址等列的信息在新建查詢窗口輸入如下語句:SELECT name,sex,birthday,home_addrFROM student在本次查詢里,返回的是所有行中相同目標(biāo)列上的數(shù)據(jù)。選擇所有列 【例8.2】從Student表中查詢學(xué)生所有列的信息。在新建查詢窗口輸入如下語句:SELECT * FROM studentSELECT * 是進(jìn)行數(shù)據(jù)檢索的最基本的語句。在SELECT語句中,“*”表示表中所有的列 選擇所有列 【例8.3】查詢本地SQL Server服務(wù)器的本信息。在新建查詢窗口輸入如下語句:SELECT VERSION上例使用SELECT語句進(jìn)行無數(shù)據(jù)

6、源查詢。所謂無數(shù)據(jù)源查詢就是使用SELECT語句來查詢不在表中的數(shù)據(jù)。上例是使用SELECT語句查詢?nèi)肿兞縑ERSION,顯示服務(wù)器的版本號。使用TOP關(guān)鍵字指定只返回前面一定數(shù)量的數(shù)據(jù) 使用TOP關(guān)鍵字的語法如下:SELECT TOP integer|TOP integer PERCENT select_list FROM table_sourceTOP integer:表示返回最前面的幾行,用整數(shù)表示返回的行數(shù);TOP integer PERCENT:用百分比表示返回的行數(shù)。 使用TOP關(guān)鍵字指定只返回前面一定數(shù)量的數(shù)據(jù) 使用TOP關(guān)鍵字的語法如下:SELECT TOP integer|

7、TOP integer PERCENT select_list FROM table_sourceTOP integer:表示返回最前面的幾行,用整數(shù)表示返回的行數(shù);TOP integer PERCENT:用百分比表示返回的行數(shù)。 使用TOP關(guān)鍵字指定只返回前面一定數(shù)量的數(shù)據(jù) 【例8.4】從JWGL數(shù)據(jù)庫的Teacher表中返回前面3行數(shù)據(jù)。在新建查詢窗口輸入如下語句:SELECT TOP 3 * FROM teacher【例8.5】從JWGL數(shù)據(jù)庫的Department表中返回前面占總行數(shù)的10%行的數(shù)據(jù)。 在新建查詢窗口輸入如下語句:SELECT TOP 10 PERCENT *FROM

8、deparment 使用DISTINCT關(guān)鍵字刪除重復(fù)的行 DISTINCT 關(guān)鍵字可從 SELECT 語句的結(jié)果中除去重復(fù)的行,使返回的結(jié)果更簡潔。 如果沒有指定 DISTINCT,那么將返回所有滿足查詢條件的行,包括重復(fù)的行。使用DISTINCT關(guān)鍵字后,如果表中存在多個為NULL的數(shù)據(jù),服務(wù)器將會把這些數(shù)據(jù)視為相等。 【例8.6】沒有使用DISTINCT語句,從Class表中返回專業(yè)信息,會得到很多重復(fù)的“計算機(jī)應(yīng)用”專業(yè)的數(shù)據(jù)。在新建查詢窗口輸入如下語句:SELECT professionalFROM class使用DISTINCT關(guān)鍵字刪除重復(fù)的行 【例8.7】當(dāng)使用了DISTINC

9、T關(guān)鍵字以后,可以過濾掉其中重復(fù)的專業(yè)名,使“計算機(jī)應(yīng)用”專業(yè)在結(jié)果集中只出現(xiàn)1次。在新建查詢窗口輸入如下語句:SELECT DISTINCT professional*FROM class與DISTINCT功能相對的是ALL關(guān)鍵字,ALL關(guān)鍵字允許重復(fù)數(shù)據(jù)的出現(xiàn)。不必刻意書寫ALL關(guān)鍵字,因為在默認(rèn)情況下,SELECT語句總是用ALL關(guān)鍵字進(jìn)行查詢。DISTINCT關(guān)鍵字的作用范圍是整個查詢的列表,而不是單獨的一列。比如,同時對兩列數(shù)據(jù)進(jìn)行查詢時,如果使用了DISTINCT關(guān)鍵字,將返回這兩列數(shù)據(jù)的惟一組合。 使用計算列 在進(jìn)行數(shù)據(jù)查詢時,經(jīng)常需要對查詢到的數(shù)據(jù)進(jìn)行再次計算。T-SQL允許直

10、接在SELECT語句中使用計算列。計算列并不存在于表所存儲的數(shù)據(jù)中,它是通過對某些列的數(shù)據(jù)進(jìn)行計算得來的結(jié)果?!纠?.8】在JWGL數(shù)據(jù)庫中,將teacher表內(nèi)的每位員工的工資提高30%。在新建查詢窗口輸入如下語句:SELECT name 姓名,profession 職稱,salary 原工資,salary*1.3 現(xiàn)工資FROM teacher 使用計算列 在進(jìn)行數(shù)據(jù)查詢時,經(jīng)常需要對查詢到的數(shù)據(jù)進(jìn)行再次計算。T-SQL允許直接在SELECT語句中使用計算列。計算列并不存在于表所存儲的數(shù)據(jù)中,它是通過對某些列的數(shù)據(jù)進(jìn)行計算得來的結(jié)果。在T-SQL的計算列上,允許使用+、-、*、/、%和按照

11、位來進(jìn)行計算的邏輯運(yùn)算符,如AND (&)、OR(|). XOR()和NOT()以及字符串連接符(+)。 【例8.8】在JWGL數(shù)據(jù)庫中,將teacher表內(nèi)的每位員工的工資提高30%。在新建查詢窗口輸入如下語句:SELECT name 姓名,profession 職稱,salary 原工資,salary*1.3 現(xiàn)工資FROM teacher 使用計算列 【例8.9】使用字符串連接符(+)來連接JWGL數(shù)據(jù)庫中Class表內(nèi)的班級編號(class_id)和專業(yè)名稱(professional)。SELECT class_id+班+professional 班級與專業(yè)FROM class操作查詢

12、的列名 可以根據(jù)實際的需要對查詢數(shù)據(jù)的列標(biāo)題進(jìn)行修改,或者為沒有標(biāo)題的列增加臨時的標(biāo)題。符合ANSI規(guī)則的標(biāo)準(zhǔn)方法,即在列表達(dá)式后面給出列名使用“=”連接列表達(dá)式 使用AS關(guān)鍵字連接列表達(dá)式和指定的列名 【例8.10】從Course表中查詢課程信息,并在列表達(dá)式后面給出相應(yīng)的中文列名。在新建查詢窗口輸入如下語句:SELECT course_id 課程代碼,name 課程名稱,class_time 課時,credit 學(xué)分FROM course 操作查詢的列名 【例8.11】從Course表中查詢課程信息,并使用“=”連接列表達(dá)式和中文列名。在新建查詢窗口輸入如下語句:SELECT課程代碼=co

13、urse_id,課程名稱=name, 課時=class_time, 學(xué)分=credit FROM course【例8.12】從Course表中查詢課程信息,并使用AS關(guān)鍵字連接列表達(dá)式和指定的列名。在新建查詢窗口輸入如下語句:SELECT course_id AS課程代碼,name AS課程名稱,class_time AS課時,credit AS學(xué)分FROM course在對列名進(jìn)行操作時,有以下2個問題值得注意:當(dāng)使用中文列名時,可以不寫引號,但決不能使用全角引號,否則查詢會出錯。當(dāng)使用的英文列名超過兩個單詞時,必須使用引號將列名括起來。8.3使用WHERE子句指定篩選條件 WHERE 子句

14、是一個篩選,它定義了源表中的行要滿足 SELECT 語句的要求所必須達(dá)到的條件。只有符合條件的行才向結(jié)果集提供數(shù)據(jù)。不符合條件的行中的數(shù)據(jù)不會被使用。WHERE 子句還用在INSERT、DELETE 和 UPDATE 語句中以定義目標(biāo)表中要插入、刪除或修改的行。 使用比較運(yùn)算符 使用邏輯運(yùn)算符 使用WHERE子句指定篩選條件 【例8.13】從JWGL數(shù)據(jù)庫的Teacher表中查詢出生日期在1960年1月1日以前出生的教師信息。(使用比較運(yùn)算符)SELECT name,birthdayFROM teacherWHERE birthday1960-1-1使用WHERE子句指定篩選條件 【例8.14

15、】從JWGL數(shù)據(jù)庫的Teacher表中查詢出生日期在1960年1月1日以前或1976年1月1日以后出生的教師信息。(使用邏輯運(yùn)算符) 在新建查詢窗口輸入如下語句:SELECT name,sex,birthdayFROM teacherWHERE birthday1976-1-1使用BETWEEN關(guān)鍵字 語法是:test_expressNOT BETWEEN begin_expression AND end_expression使用BETWEEN表達(dá)式進(jìn)行查詢的效果可以用使用比較運(yùn)算符=和和=和=1960-1-1AND birthday和連接的邏輯表達(dá)式進(jìn)行查詢的效果,可以用NOT BETWEE

16、N表達(dá)式進(jìn)行查詢來實現(xiàn)。LECT name,sex,birthdayFROM teacherWHERE birthday NOT BETWEEN 1960-1-1 AND 1976-1-1通過上面的例子可以看到,在使用BETWEEN限制查詢數(shù)據(jù)范圍時,同時包括了邊界值,而使用NOT BETWEEN進(jìn)行查詢時沒有包括邊界值。使用IN關(guān)鍵字 同BETWEEN關(guān)鍵字一樣,IN關(guān)鍵字的引入也是為了更方便地限制檢索數(shù)據(jù)的范圍,靈活使用IN關(guān)鍵字,可以用簡潔的語句實現(xiàn)較為復(fù)雜的查詢。【例8.17】用OR表達(dá)式從JWGL數(shù)據(jù)庫的Teacher表中查詢職稱為教授或助教的教師名單。SELECT name,pro

17、fessionFROM teacherWHERE profession=教授 OR profession=助教【例8.18】使用IN表達(dá)式從JWGL數(shù)據(jù)庫的Teacher表中查詢職稱為教授或助教的教師名單。SELECT name,professionFROM teacherWHERE profession IN (教授 ,助教)8.4使用LIKE子句進(jìn)行模糊查詢 通配符的使用 %(百分號):表示從0到n個任意字符。_(下劃線):表示單個的任意字符。(封閉方括號):表示方括號里列出的任意一個字符。:任意一個沒有在方括號里列出的字符?!纠?.19】查詢Student表中,家庭住址帶有“南”字的學(xué)生

18、名單。SELECT name, home_addrFROM studentWHERE home_addr LIKE %南% 8.4使用LIKE子句進(jìn)行模糊查詢 【例8.20】查詢Class表中,班級編號的頭三位是“200”第4位是“4”或“6”的班級名稱和學(xué)生數(shù)。SELECT class_id,name,student_numberFROM classWHERE class_id LIKE 20046%上例中,使用方括號可以將字符查詢的范圍精確地限定在第4個字符為“4”、“6”中的一個。8.4使用LIKE子句進(jìn)行模糊查詢 可以使用方括號和連字符來指定一個值的范圍,例如,下面的例子可以利用26個

19、小寫字母來檢索可能匹配的人名。Use pubsGOSELECT au_lname , au_fname , phone ,au_idFROM authorsWHERE au_lname like Dula-zGO必須注意的是所有通配符都只有在LIKE子句中才有意義。否則,通配符會被當(dāng)作普通字符處理。8.4使用LIKE子句進(jìn)行模糊查詢 轉(zhuǎn)義字符的使用 使用通配符可能會產(chǎn)生這樣一個問題:萬一要查詢的字符串中間包含了通配符作為字符串一部分,該如何處理? T-SQL提供的轉(zhuǎn)義字符功能可以解決這個問題。【例8.21】設(shè)有一個名為ABCD的表,表中列名為sy的列有以下4個值:abc、ab_d%、eabcd

20、、%abcd列寬度為5,現(xiàn)在要查找以“a”開頭,以“%”結(jié)尾,第3個字符為“_”, 第4個字符為“abcd”中的任意一個字符串。下面的查詢語句是正確的實現(xiàn)方法:SELECT syFROM ABCDWHERE sy LIKE a_x_abcdx%ESCAPE x ESCAPE用來規(guī)定轉(zhuǎn)義字符。凡是ESCAPE子句中出現(xiàn)的字符都成為轉(zhuǎn)義字符,它在字符串中不再表示真實的字符,只起標(biāo)記的作用。凡是在轉(zhuǎn)義字符后面出現(xiàn)的第一個表示通配符的字符都不再被視為通配符,而被當(dāng)做普通字符處理。所有的字符都可以被當(dāng)作轉(zhuǎn)義字符處理。在這個查詢中,“x”被處理成為轉(zhuǎn)義字符。 8.5 使用ORDER BY指定結(jié)果集的排序

21、基本的ORDER BY子句 ORDER BY子句的語法是:ORDER BY order by_expression ASC |DESCorder by_expression:定義用于排序的列,可以直接指出列名,也可使用列的序號??梢允褂枚嗔羞M(jìn)行排序,各列在ORDER BY子句中的順序決定了排序過程中的優(yōu)先級。ASC |DESC:按升序或降序的順序排序在默認(rèn)情況下,ORDER BY子句按升序進(jìn)行排序,即默認(rèn)使用的是ASC關(guān)鍵字。如果特別要求按降序進(jìn)行排列,必須使用DESC關(guān)鍵字。 8.5 使用ORDER BY指定結(jié)果集的排序 【例8.22】查詢Department表中各部門的名稱及部門編號。請按

22、部門編號的升序排序。并與不排序查詢作比較。Select * from department order by department_id可以使用列所處的位置來指定進(jìn)行排序的列,如上例可以改為:SELECT *FROM DEPARTMENT ORDER BY l8.5 使用ORDER BY指定結(jié)果集的排序 對計算列進(jìn)行排序 假設(shè)有一個“學(xué)生成績表”,表中有“姓名”、“語文”、“數(shù)學(xué)”、“英語”等列名,現(xiàn)要根據(jù)學(xué)生三門課的總成績按從高到低排序。則應(yīng)該執(zhí)行的查詢?nèi)缦?SELECT姓名,總成績=語文+數(shù)學(xué)+英語FROM學(xué)生成績表ORDER BY總成績DESC也可以根據(jù)未曾出現(xiàn)在SELECT列表中的列的值進(jìn)行排列。例如,上面的例子可以改為按“計算機(jī)應(yīng)用基礎(chǔ)”課程的成績從高到低排序:SELECT姓名,總成績=語文+數(shù)學(xué)+英語FROM學(xué)生成績表ORDER BY 計算機(jī)應(yīng)用基礎(chǔ)DESC 8.5 使用ORDER BY指定結(jié)果集的排序 對計算列進(jìn)行排序 假設(shè)有一個“學(xué)生成績表”,表中有“姓名”、“

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論