




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
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)的簡(jiǎn)稱。Transact-SQL語言(為方便,以下簡(jiǎn)稱T-SQL語言)是Microsoft SQL Server提供的查詢語言。 T-SQL語言只含有較少的非標(biāo)準(zhǔn)語法,因此將用T-SQL語言編寫的程序在不同數(shù)據(jù)庫(kù)平臺(tái)之間移植時(shí),不會(huì)遇到太多困難。任何
2、應(yīng)用程序,只要目的是向SQL Server的數(shù)據(jù)庫(kù)管理系統(tǒng)發(fā)出命令以獲得數(shù)據(jù)庫(kù)管理系統(tǒng)的響應(yīng),最終都必須體現(xiàn)為以T-SQL語句為表現(xiàn)形式的指令。 8.1 SELECT查詢語句的語法結(jié)構(gòu)SELECT查詢語句是SQL語言的核心。SELECT語句的作用是讓數(shù)據(jù)庫(kù)服務(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:所要查詢的字段名稱,它可以是從多個(gè)表中取出來的字段。INTOnew_table_sourse將查詢結(jié)果放到一個(gè)新的表中,值得注意的是,若SELECT命令中有UNION子句,則INTO一定要放在第一個(gè)SELECT保留字之后。FROM ,.n :指定要在 T-SQL 語句中使用的表或視圖(帶或不帶別名均可)。可在語句中使用多達(dá) 256 個(gè)表。可將 table_source 變量指定為表源。 WHERE Clause:欲查詢數(shù)據(jù)的條件。SE
4、LECT查詢語句的語法格式 GROUP BY:可對(duì)字段進(jìn)行分類統(tǒng)計(jì)并給出數(shù)據(jù)的統(tǒng)計(jì)結(jié)果。 HAVING:功能如同WHERE,其不同之處在于是對(duì)分組條件進(jìn)行過濾,只有存在GROUP BY時(shí)才使用。ORDER BY:將查詢結(jié)果以某列或多列進(jìn)行排序, 再返回結(jié)果。COMPUTE:允許用一條SELECT命令同時(shí)查詢數(shù)據(jù),給出數(shù)據(jù)的細(xì)節(jié)和統(tǒng)計(jì)結(jié)果。 8.2 SELECT子句指定由查詢返回的列選擇指定列并指定它們的顯示次序選擇所有列使用TOP關(guān)鍵字指定只返回前面一定數(shù)量的數(shù)據(jù)使用DISTINCT關(guān)鍵字刪除重復(fù)的行使用計(jì)算列操作查詢的列名選擇指定列并指定它們的顯示次序【例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ù)器的版本號(hào)。使用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ù)庫(kù)的Teacher表中返回前面3行數(shù)據(jù)。在新建查詢窗口輸入如下語句:SELECT TOP 3 * FROM teacher【例8.5】從JWGL數(shù)據(jù)庫(kù)的Department表中返回前面占總行數(shù)的10%行的數(shù)據(jù)。 在新建查詢窗口輸入如下語句:SELECT TOP 10 PERCENT *FROM
8、deparment 使用DISTINCT關(guān)鍵字刪除重復(fù)的行 DISTINCT 關(guān)鍵字可從 SELECT 語句的結(jié)果中除去重復(fù)的行,使返回的結(jié)果更簡(jiǎn)潔。 如果沒有指定 DISTINCT,那么將返回所有滿足查詢條件的行,包括重復(fù)的行。使用DISTINCT關(guān)鍵字后,如果表中存在多個(gè)為NULL的數(shù)據(jù),服務(wù)器將會(huì)把這些數(shù)據(jù)視為相等。 【例8.6】沒有使用DISTINCT語句,從Class表中返回專業(yè)信息,會(huì)得到很多重復(fù)的“計(jì)算機(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ì)算機(jī)應(yīng)用”專業(yè)在結(jié)果集中只出現(xiàn)1次。在新建查詢窗口輸入如下語句:SELECT DISTINCT professional*FROM class與DISTINCT功能相對(duì)的是ALL關(guān)鍵字,ALL關(guān)鍵字允許重復(fù)數(shù)據(jù)的出現(xiàn)。不必刻意書寫ALL關(guān)鍵字,因?yàn)樵谀J(rèn)情況下,SELECT語句總是用ALL關(guān)鍵字進(jìn)行查詢。DISTINCT關(guān)鍵字的作用范圍是整個(gè)查詢的列表,而不是單獨(dú)的一列。比如,同時(shí)對(duì)兩列數(shù)據(jù)進(jìn)行查詢時(shí),如果使用了DISTINCT關(guān)鍵字,將返回這兩列數(shù)據(jù)的惟一組合。 使用計(jì)算列 在進(jìn)行數(shù)據(jù)查詢時(shí),經(jīng)常需要對(duì)查詢到的數(shù)據(jù)進(jìn)行再次計(jì)算。T-SQL允許直
10、接在SELECT語句中使用計(jì)算列。計(jì)算列并不存在于表所存儲(chǔ)的數(shù)據(jù)中,它是通過對(duì)某些列的數(shù)據(jù)進(jìn)行計(jì)算得來的結(jié)果?!纠?.8】在JWGL數(shù)據(jù)庫(kù)中,將teacher表內(nèi)的每位員工的工資提高30%。在新建查詢窗口輸入如下語句:SELECT name 姓名,profession 職稱,salary 原工資,salary*1.3 現(xiàn)工資FROM teacher 使用計(jì)算列 在進(jìn)行數(shù)據(jù)查詢時(shí),經(jīng)常需要對(duì)查詢到的數(shù)據(jù)進(jìn)行再次計(jì)算。T-SQL允許直接在SELECT語句中使用計(jì)算列。計(jì)算列并不存在于表所存儲(chǔ)的數(shù)據(jù)中,它是通過對(duì)某些列的數(shù)據(jù)進(jìn)行計(jì)算得來的結(jié)果。在T-SQL的計(jì)算列上,允許使用+、-、*、/、%和按照
11、位來進(jìn)行計(jì)算的邏輯運(yùn)算符,如AND (&)、OR(|). XOR()和NOT()以及字符串連接符(+)。 【例8.8】在JWGL數(shù)據(jù)庫(kù)中,將teacher表內(nèi)的每位員工的工資提高30%。在新建查詢窗口輸入如下語句:SELECT name 姓名,profession 職稱,salary 原工資,salary*1.3 現(xiàn)工資FROM teacher 使用計(jì)算列 【例8.9】使用字符串連接符(+)來連接JWGL數(shù)據(jù)庫(kù)中Class表內(nèi)的班級(jí)編號(hào)(class_id)和專業(yè)名稱(professional)。SELECT class_id+班+professional 班級(jí)與專業(yè)FROM class操作查詢
12、的列名 可以根據(jù)實(shí)際的需要對(duì)查詢數(shù)據(jù)的列標(biāo)題進(jìn)行修改,或者為沒有標(biāo)題的列增加臨時(shí)的標(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 課時(shí),credit 學(xué)分FROM course 操作查詢的列名 【例8.11】從Course表中查詢課程信息,并使用“=”連接列表達(dá)式和中文列名。在新建查詢窗口輸入如下語句:SELECT課程代碼=co
13、urse_id,課程名稱=name, 課時(shí)=class_time, 學(xué)分=credit FROM course【例8.12】從Course表中查詢課程信息,并使用AS關(guān)鍵字連接列表達(dá)式和指定的列名。在新建查詢窗口輸入如下語句:SELECT course_id AS課程代碼,name AS課程名稱,class_time AS課時(shí),credit AS學(xué)分FROM course在對(duì)列名進(jìn)行操作時(shí),有以下2個(gè)問題值得注意:當(dāng)使用中文列名時(shí),可以不寫引號(hào),但決不能使用全角引號(hào),否則查詢會(huì)出錯(cuò)。當(dāng)使用的英文列名超過兩個(gè)單詞時(shí),必須使用引號(hào)將列名括起來。8.3使用WHERE子句指定篩選條件 WHERE 子句
14、是一個(gè)篩選,它定義了源表中的行要滿足 SELECT 語句的要求所必須達(dá)到的條件。只有符合條件的行才向結(jié)果集提供數(shù)據(jù)。不符合條件的行中的數(shù)據(jù)不會(huì)被使用。WHERE 子句還用在INSERT、DELETE 和 UPDATE 語句中以定義目標(biāo)表中要插入、刪除或修改的行。 使用比較運(yùn)算符 使用邏輯運(yùn)算符 使用WHERE子句指定篩選條件 【例8.13】從JWGL數(shù)據(jù)庫(kù)的Teacher表中查詢出生日期在1960年1月1日以前出生的教師信息。(使用比較運(yùn)算符)SELECT name,birthdayFROM teacherWHERE birthday1960-1-1使用WHERE子句指定篩選條件 【例8.14
15、】從JWGL數(shù)據(jù)庫(kù)的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)行查詢來實(shí)現(xiàn)。LECT name,sex,birthdayFROM teacherWHERE birthday NOT BETWEEN 1960-1-1 AND 1976-1-1通過上面的例子可以看到,在使用BETWEEN限制查詢數(shù)據(jù)范圍時(shí),同時(shí)包括了邊界值,而使用NOT BETWEEN進(jìn)行查詢時(shí)沒有包括邊界值。使用IN關(guān)鍵字 同BETWEEN關(guān)鍵字一樣,IN關(guān)鍵字的引入也是為了更方便地限制檢索數(shù)據(jù)的范圍,靈活使用IN關(guān)鍵字,可以用簡(jiǎn)潔的語句實(shí)現(xiàn)較為復(fù)雜的查詢。【例8.17】用OR表達(dá)式從JWGL數(shù)據(jù)庫(kù)的Teacher表中查詢職稱為教授或助教的教師名單。SELECT name,pro
17、fessionFROM teacherWHERE profession=教授 OR profession=助教【例8.18】使用IN表達(dá)式從JWGL數(shù)據(jù)庫(kù)的Teacher表中查詢職稱為教授或助教的教師名單。SELECT name,professionFROM teacherWHERE profession IN (教授 ,助教)8.4使用LIKE子句進(jìn)行模糊查詢 通配符的使用 %(百分號(hào)):表示從0到n個(gè)任意字符。_(下劃線):表示單個(gè)的任意字符。(封閉方括號(hào)):表示方括號(hào)里列出的任意一個(gè)字符。:任意一個(gè)沒有在方括號(hào)里列出的字符。【例8.19】查詢Student表中,家庭住址帶有“南”字的學(xué)生
18、名單。SELECT name, home_addrFROM studentWHERE home_addr LIKE %南% 8.4使用LIKE子句進(jìn)行模糊查詢 【例8.20】查詢Class表中,班級(jí)編號(hào)的頭三位是“200”第4位是“4”或“6”的班級(jí)名稱和學(xué)生數(shù)。SELECT class_id,name,student_numberFROM classWHERE class_id LIKE 20046%上例中,使用方括號(hào)可以將字符查詢的范圍精確地限定在第4個(gè)字符為“4”、“6”中的一個(gè)。8.4使用LIKE子句進(jìn)行模糊查詢 可以使用方括號(hào)和連字符來指定一個(gè)值的范圍,例如,下面的例子可以利用26個(gè)
19、小寫字母來檢索可能匹配的人名。Use pubsGOSELECT au_lname , au_fname , phone ,au_idFROM authorsWHERE au_lname like Dula-zGO必須注意的是所有通配符都只有在LIKE子句中才有意義。否則,通配符會(huì)被當(dāng)作普通字符處理。8.4使用LIKE子句進(jìn)行模糊查詢 轉(zhuǎn)義字符的使用 使用通配符可能會(huì)產(chǎn)生這樣一個(gè)問題:萬一要查詢的字符串中間包含了通配符作為字符串一部分,該如何處理? T-SQL提供的轉(zhuǎn)義字符功能可以解決這個(gè)問題?!纠?.21】設(shè)有一個(gè)名為ABCD的表,表中列名為sy的列有以下4個(gè)值:abc、ab_d%、eabcd
20、、%abcd列寬度為5,現(xiàn)在要查找以“a”開頭,以“%”結(jié)尾,第3個(gè)字符為“_”, 第4個(gè)字符為“abcd”中的任意一個(gè)字符串。下面的查詢語句是正確的實(shí)現(xiàn)方法:SELECT syFROM ABCDWHERE sy LIKE a_x_abcdx%ESCAPE x ESCAPE用來規(guī)定轉(zhuǎn)義字符。凡是ESCAPE子句中出現(xiàn)的字符都成為轉(zhuǎn)義字符,它在字符串中不再表示真實(shí)的字符,只起標(biāo)記的作用。凡是在轉(zhuǎn)義字符后面出現(xiàn)的第一個(gè)表示通配符的字符都不再被視為通配符,而被當(dāng)做普通字符處理。所有的字符都可以被當(dāng)作轉(zhuǎn)義字符處理。在這個(gè)查詢中,“x”被處理成為轉(zhuǎn)義字符。 8.5 使用ORDER BY指定結(jié)果集的排序
21、基本的ORDER BY子句 ORDER BY子句的語法是:ORDER BY order by_expression ASC |DESCorder by_expression:定義用于排序的列,可以直接指出列名,也可使用列的序號(hào)??梢允褂枚嗔羞M(jìn)行排序,各列在ORDER BY子句中的順序決定了排序過程中的優(yōu)先級(jí)。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表中各部門的名稱及部門編號(hào)。請(qǐng)按
22、部門編號(hào)的升序排序。并與不排序查詢作比較。Select * from department order by department_id可以使用列所處的位置來指定進(jìn)行排序的列,如上例可以改為:SELECT *FROM DEPARTMENT ORDER BY l8.5 使用ORDER BY指定結(jié)果集的排序 對(duì)計(jì)算列進(jìn)行排序 假設(shè)有一個(gè)“學(xué)生成績(jī)表”,表中有“姓名”、“語文”、“數(shù)學(xué)”、“英語”等列名,現(xiàn)要根據(jù)學(xué)生三門課的總成績(jī)按從高到低排序。則應(yīng)該執(zhí)行的查詢?nèi)缦?SELECT姓名,總成績(jī)=語文+數(shù)學(xué)+英語FROM學(xué)生成績(jī)表ORDER BY總成績(jī)DESC也可以根據(jù)未曾出現(xiàn)在SELECT列表中的列的值進(jìn)行排列。例如,上面的例子可以改為按“計(jì)算機(jī)應(yīng)用基礎(chǔ)”課程的成績(jī)從高到低排序:SELECT姓名,總成績(jī)=語文+數(shù)學(xué)+英語FROM學(xué)生成績(jī)表ORDER BY 計(jì)算機(jī)應(yīng)用基礎(chǔ)DESC 8.5 使用ORDER BY指定結(jié)果集的排序 對(duì)計(jì)算列進(jìn)行排序 假設(shè)有一個(gè)“學(xué)生成績(jī)表”,表中有“姓名”、“
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- X線診斷車行業(yè)深度研究報(bào)告
- 三層絨面服裝革行業(yè)深度研究報(bào)告
- 貢緞條子行業(yè)深度研究報(bào)告
- 音響遙控器行業(yè)行業(yè)發(fā)展趨勢(shì)及投資戰(zhàn)略研究分析報(bào)告
- 中國(guó)鐳射粉項(xiàng)目投資可行性研究報(bào)告
- 2025年中國(guó)體育小鎮(zhèn)市場(chǎng)全景評(píng)估及發(fā)展趨勢(shì)研究預(yù)測(cè)報(bào)告
- 中國(guó)美甲工具行業(yè)市場(chǎng)調(diào)研分析及投資戰(zhàn)略咨詢報(bào)告
- 高中生物學(xué)教材邊角知識(shí)
- 2024-2025年中國(guó)移動(dòng)互聯(lián)網(wǎng)服務(wù)提供商市場(chǎng)調(diào)查研究及投資前景預(yù)測(cè)報(bào)告
- 中國(guó)汽車安全帶護(hù)墊項(xiàng)目投資可行性研究報(bào)告
- 中考英語高頻單詞專項(xiàng)訓(xùn)練題配套答案
- 火龍罐療法經(jīng)典課件
- 應(yīng)用寫作(第六版) 課件 第1-4章 應(yīng)用寫作概述-行政事務(wù)應(yīng)用文
- 核島通風(fēng)系統(tǒng)介紹
- 我見證改革開放三十年課件
- xxxx智能化工程施工進(jìn)度計(jì)劃表
- 供應(yīng)商來料包裝運(yùn)輸存儲(chǔ)規(guī)范
- 搭橋術(shù)后護(hù)理查房
- 人工智能概論P(yáng)PT全套完整教學(xué)課件
- 第一章-運(yùn)動(dòng)選材概述課件
- 藏式建筑簡(jiǎn)介優(yōu)質(zhì)課件
評(píng)論
0/150
提交評(píng)論