數據倉的基本操作方法_第1頁
數據倉的基本操作方法_第2頁
數據倉的基本操作方法_第3頁
數據倉的基本操作方法_第4頁
數據倉的基本操作方法_第5頁
已閱讀5頁,還剩111頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第五章 數據的基本操作5.1 數據的添加、修改和刪除5.2 簡單查詢5.3 連接查詢 5.4 子查詢目錄5.5 應用舉例 通過第4章表的基基本操作作,用戶戶明確了了創(chuàng)建表表的目的的是為了了利用表表存儲和和管理數數據。本本章將在在第4章建立的的如圖5-1所示的“學生選選課管理理信息系系統(tǒng)”的的student數據庫的的用戶表表基礎上上講述數數據的基基本操作作。數據據的操作作主要包包括數據據庫表中中數據的的增加、修改、刪除和和查詢操操作。查查詢是數數據操作作的重點點,是用用戶必須須重點掌掌握的數數據操作作技術。5.1數據的添添加、修修改和刪刪除SQLServer數據厙的的新表建建好后,表中并并不包含

2、含任何記記錄,要要想實現現數據的的存儲,必須向向表中添添加數據據。同樣樣要實現現表的良良好管理理,則經經常需要要修改表表中的數數據。本本節(jié)主要要介紹數數據的添添加、修修改和刪刪除。在數據的的基本操操作中,常用到到T-SQL語句,我我們應先先掌握如表5-1所示的SQL語句的語語法規(guī)則則。規(guī)則 含義 大寫 Transact-SQL關鍵字 斜體 Transact-SQL語法中用戶提供的參數 |(豎線) 分隔括號或大括號內的語法項目。只能選擇一個項目 (方括號) 可選語法項目,不必鍵入方括號 (大括號) 必選語法項目,不要鍵入大括號 ,n 表示前面的項可重復n次。每一項由英文逗號分隔 n 表示前面的項

3、可重復n次。每一項由空格分隔 加粗 數據庫名、表名、列名、索引名、存儲過程、實用工具、數據類型名以及必須按所顯示的原樣鍵入的文本 := 語法塊的名稱。此規(guī)則用于對可在語句中的多個位置使用的過長語法或語法單元部分進行分組和標記。適合使用語法塊的每個位置由括在尖括號內的標簽表示: SQL語句的語語法規(guī)則則返回INSERTINTOtable_namecolumn_list VAIUES(data_values)其中各項項參數的的含義如如下:lINTO是是一個可可選的關關鍵字,可以將將它用在在INSERT和目標標表之間間。ltable_name是將要添添加數據據的表名名或table變量名名稱。l(co

4、lumn_list)是要添添加數據據的字段段名稱或或字段列列表,必必須用圓圓括號將將column_list括起來,并且用用逗號進進行分隔隔。若沒沒有指定定字段列列表,則則指全部部字段。lVALUES(data_values)用于引引入添加加記錄的的字段值值。必須須與column_list相對應。也就是是說每一一個字段段必須對對應一個個字段值值,且必必須用圓圓括號將將字段值值列表括括起來。如果VALUES列列表中的的值與表表中列的的順序不不相同,或者未未包含表表中所有有列的值值,那么么必須使使用column_list明確地指指定存儲儲每個傳傳入值的的列。5.1.1數據的添添加向表中添添加數據據可

5、以使使用INSERT語句。INSERT語句的語語法格式式如下:1.最簡單的的INSERT語句2.省略清單單的INSERT語句3.省略VALUES清單的INSERT語句4.向學生選選課系統(tǒng)統(tǒng)各表中中添加數數據實例如下下:【例5.1】在結構如如圖5-2所示的“專業(yè)”表中添添加一行行記錄:在計算算機系部部中添加加一個電電子商務務專業(yè),查詢代代碼如下下:USEStudentGOINSERT專業(yè)(專業(yè)代碼碼,專業(yè)名稱稱,系部代碼碼)VALUES(0103,電子商務務,01)GO 圖5-2“專業(yè)”表表結構在查詢分分析器中中輸入上上述代碼碼,單擊擊按按紐紐,行結果如如圖5-3和圖5-4所示。用用戶要注注意V

6、ALUES列表中的的表達式式的數量量必須匹匹配列表表中的列列數,表表達式的的數據類類型應與與列的數數據類型型相兼容容。圖5-3簡單添加加數據語語句圖5-4查看運行行結果返回【例5.2】在結構如如圖5-5所示的“班級”表中添添加2004級電子商商務班,查詢代代碼如下下:USEstudentGOINSERT班級圖5.4“班級”表表結構VALUES(20041521,2004電子商務務班,0103, 01, )GO圖5-5“班級”表表結構在查詢分分析器中中輸入上上述代碼碼并執(zhí)行行,即可可在“班班級”表表中增加加如圖5-6所示的值值為“20041521,2004電子商務務班,0103, 01, nul

7、l”的記錄,注意:此種方方法省略略了字段段清單,用戶必必須按照照這些列列在表中中定義的的順序提提供每一一個列的的值,建建議用戶戶在輸入入數據時時最好使使用列清清單。圖5-6執(zhí)行添加加數據語語句后的的結果返回【例5.3】創(chuàng)建“課課程”表表的一個個副本“課程l”表,將“課程”表的全全部數據據添加到到“課程程l”表中。代代碼如下下:USEstudentGOCREATEtable課程1(課程號char(4)not null,課程名char(20)notnull,學分smallintnull)GOINSERTINTO課程1(課程號,課程名,學分)SELECT課程號,課程名,學分FROM課程GO將上述代代

8、碼在查查詢分析析器中運運行,用戶可以以看到在在“課程程l”中增加了了4行數據,如圖5-7所示。在T-SOL中,有一一種簡單單的插入入多行的的方法。這種方方法是使使用SELECT語句查詢詢出的結結果代替替VALUES子句。這這種方法法的語法法結構如如下:INSERTINTOtable_name(column_name,n)SELECTcolumn_name,nFROMtable_nameWHEREsearch_conditions其中各項項參數的的含義如如下:search_conditions是查詢條條件。INSERT表和SELECT表的結果果集的列列數、列列序、數數據類型型必須一一致。圖5-7

9、增加多行行數據語語句執(zhí)行行結果返回考慮到本本章實驗驗的需要要,我們們向學生生選課系系統(tǒng)部分分表中添添加數據據,在查查詢分析析器中分分別執(zhí)行行下列代代碼。(1)向“系系部”表表中添加加以下如如圖5-8所示的4條記錄,代碼如如下:USEStudentGOINSERT系系部(系部代代碼,系系部名名稱,系系主任)VALUES(01,計計算機系系,徐才智智)GO INSERT系系部(系部代代碼,系系部名名稱,系系主任)VALUES(02,經經濟管理理系,張博博)GOINSERT系系部(系部代代碼,系系部名名稱,系系主任)VALUES(03,數數學系,徐徐裕光)GO INSERT系系部(系部代代碼,系系部

10、名名稱,系系主任)VALUES(04,外外語系,李李濺波)GO圖5-87表結構及及增加四四條記錄錄及執(zhí)行行結果返回(2)向“專業(yè)業(yè)”表添添加以下下如圖5-9所示的8條記錄,代碼如如下:USEStudentGOINSERT專業(yè)(專業(yè)代碼碼,專業(yè)名稱稱,系部代碼碼)VALUES(0101,軟件工程程,01)GO INSERT專業(yè)(專業(yè)代碼碼,專業(yè)名稱稱,系部代碼碼)VALUES(0102,信息管理理,01)GO INSERT專業(yè)(專業(yè)代碼碼,專業(yè)名稱稱,系部代碼碼)VALUES(0103,電子商務務,01)GoINSERT專業(yè)(專業(yè)代碼碼,專業(yè)名稱稱,系部代碼碼)VALUES(0201,經濟管理理

11、,02)GO INSERT專業(yè)(專業(yè)代碼碼,專業(yè)名稱稱,系部代碼碼)VALUES(0202,會計,02)GO INSERT專業(yè)(專業(yè)代碼碼,專業(yè)名稱稱,系部代碼碼)VALUES(0203,工商管理理,02)GO INSERT專業(yè)(專業(yè)代碼碼,專業(yè)名稱稱,系部代碼碼)VALUES(0301,經濟數學學,03)GO INSERT專業(yè)(專業(yè)代碼碼,專業(yè)名稱稱,系部代碼碼)VALUES(0401,國際商貿貿英語,04)GO 圖5-9表結構及及增加8條記錄及及執(zhí)行結結果返回3)向“班班級”表表添加以以下如圖圖5-10所示的5條記錄,代碼如如下:USEstudentGOINSERT班級(班班級代碼碼,班級

12、名稱稱,專業(yè)代碼碼,系部代碼碼,備注)VALUES(010101001,01級軟件工工程001班,0101, 01, )GOINSERT班級(班班級代碼碼,班級名稱稱,專業(yè)代碼碼,系部代碼碼,備注)VALUES(010102002,01級信息管管理002班,0102, 01, )GOINSERT班級(班級代代碼,班級名稱稱,專業(yè)代碼碼,系部代碼碼,備注)VALUES(010201001,01級經濟管管理001班,0201, 02, )GOINSERT班級(班級代代碼,班級名稱稱,專業(yè)代碼碼,系部代碼碼,備注)VALUES(010202001,01級會計002班,0202, 02, )GOINS

13、ERT班級(班級代碼碼,班級名稱稱,專業(yè)代碼碼,系部代碼碼,備注)VALUES(20041512,2004電子商務務班,0103,01,)Go圖5-10表結構及及增加5條記錄及及執(zhí)行結結果返回(4)向“學學生”表表添加以以下如圖圖5-11所示的4條數據記記錄。代代碼如下下:USEstudentGOINSERT學生VALUES(010101001001,張斌,男,1970-5-4,2001-9-18,010101001, 01,0101)GOINSERT學生VALUES(010102002001,周紅瑜,女,1972-7-8,2001-9-18,010102002, 01,0102)GOINSE

14、RT學生VALUES(010201001001,賈凌云,男,1974-9-1,2002-9-18,010201001, 02,0201)GOINSERT學生VALUES(010202002001,向雪林,女,1976-10-1,2002-9-18,010202001,02,0202)GO圖5-11表結構及及增加4條記錄及及執(zhí)行結結果返回(5)向“學學生”表表添加以以下如圖圖5-12所示的4條數據記記錄:USEstudentGOINSERT課程(課程號,課程名,學分)VALUES(0001,大學語文文,4)GOINSERT課程VALUES(0002,高等數學學,4)GOINSERT課程(課程號,

15、課程名,學分)VALUES(0003,計算機基基礎,4)GOINSERT課程(課程號,課程名,學分)VALUES(0004,數據庫概概論,4)GO圖5-12表結構及及增加4條記錄及及執(zhí)行結結果返回(6)向“教教學計劃劃”表添添加如圖圖5-13所示的16條數據記記錄。代代碼如下下:USEstudentGOINSERT教學計劃劃(課程號,專業(yè)代碼碼,專業(yè)學級級,課程類型型,開課學期期,學分)VALUES(0001,0101,2001,公共必修修,1,4)GOINSERT教學計劃劃(課程號,專業(yè)代碼碼,專業(yè)學級級,課程類型型,開課學期期,學分)VALUES(0002,0101,2001,公共選修修,

16、2,4)GOINSERT教學計劃劃(課程號,專業(yè)代碼碼,專業(yè)學級級,課程類型型,開課學期期,學分)VALUES(0003,0101,2001,專業(yè)必修修,3,4)GOINSERT教學計劃劃(課程號,專業(yè)代碼碼,專業(yè)學級級,課程類型型,開課學期期,學分)VALUES(0004,0101,2001,專業(yè)選修修,4,4)GOINSERT教學計劃劃(課程號,專業(yè)代碼碼,專業(yè)學級級,課程類型型,開課學期期,學分)VALUES(0001,0102,2001,公共必修修,1,4)GOINSERT教學計劃劃(課程號,專業(yè)代碼碼,專業(yè)學級級,課程類型型,開課學期期,學分)VALUES(0002,0102,200

17、1,公共選修修,2,4)GOINSERT教學計劃劃(課程號,專業(yè)代碼碼,專業(yè)學級級,課程類型型,開課學期期,學分)VALUES(0003,0102,2001,專業(yè)必修修,3,4)GOINSERT教學計劃劃(課程號,專業(yè)代碼碼,專業(yè)學級級,課程類型型,開課學期期,學分)VALUES(0004,0102,2001,專業(yè)選修修,4,4)GOINSERT教學計劃劃(課程號,專業(yè)代碼碼,專業(yè)學級級,課程類型型,開課學期期,學分)VALUES(0001,0201,2001,公共必修修,1,4)GOINSERT教學計劃劃(課程號,專業(yè)代碼碼,專業(yè)學級級,課程類型型,開課學期期,學分)VALUES(0002,

18、0201,2001,公共選修修,2,4)GOINSERT教學計劃劃(課程號,專業(yè)代碼碼,專業(yè)學級級,課程類型型,開課學期期,學分)VALUES(0003,0201,2001,專業(yè)必修修,3,4)GOINSERT教學計劃劃(課程號,專業(yè)代碼碼,專業(yè)學級級,課程類型型,開課學期期,學分)VALUES(0004,0201,2001,專業(yè)選修修,4,4)GOINSERT教學計劃劃(課程號,專業(yè)代碼碼,專業(yè)學級級,課程類型型,開課學期期,學分)VALUES(0001,0202,2001,公共必修修,1,4)GOINSERT教學計劃劃(課程號,專業(yè)代碼碼,專業(yè)學級級,課程類型型,開課學期期,學分)VALU

19、ES(0002,0202,2001,公共選修修,2,4)GOINSERT教學計劃劃(課程號,專業(yè)代碼碼,專業(yè)學級級,課程類型型,開課學期期,學分)VALUES(0003,0202,2001,專業(yè)必修修,3,4)INSERT教學計劃劃(課程號,專業(yè)代碼碼,專業(yè)學級級,課程類型型,開課學期期,學分)VALUES(0004,0202,2001,專業(yè)選修修,4,4)GO 圖5-13表結構及及增加16條記錄后后的執(zhí)行行結果 圖5-14表結構及及增加4條記錄后后的執(zhí)行行結果(7)向“教教師”表表添加如如圖5-14所示的4條數據記記錄。代代碼如下下:其代碼如如下:USEstudentGOINSERT教師(教

20、師編號號,姓名,性別,出生日期期,學歷,職務,職稱,系部代碼碼,專業(yè),備注)VALUES(100000000001,張學杰,男,1963-1-1,研究生,副主任,副教授,01,計算機,)GOINSERT教師(教師編號號,姓名,性別,出生日期期,學歷,職務,職稱,系部代碼碼,專業(yè),備注)VALUES(100000000002,王鋼,男,1964-5-8,研究生,教學秘書書,講師,01,計算機,)GOINSERT教師(教師編號號,姓名,性別,出生日期期,學歷,職務,職稱,系部代碼碼,專業(yè),備注)VALUES(100000000003,李麗,女,1972-7-1,本科,教師,助教,02,電視編輯輯,

21、)GOINSERT教師(教師編號號,姓名,性別,出生日期期,學歷,職務,職稱,系部代碼碼,專業(yè),備注)VALUES(100000000004,周紅梅,男,1972-1-1,研究生,主任,副教授,02,機械,)GO(8)利用“教學計計劃”表表(如圖圖5-13所示)向向“教師師任課”表添加加如圖5-15所示的16條數據記記錄。代碼如下下:USEstudentGOINSERT教師任課課(教師編號號,課程號,專業(yè)學級級,專業(yè)代碼碼,學年,學期,學生數)SELECT10000000+課程號,課程號,專業(yè)學級級,專業(yè)代碼碼,2001,開課學期期,0FROM教學計劃劃GO圖5-15表結構及及增加16條記錄后

22、后的執(zhí)行行結果(9)向“課課程注冊冊”表添添加如圖圖5-16所示的16條數據記記錄(注注意,執(zhí)執(zhí)行下列列代碼后后還要手動動修改成成績一列列的值)。代碼如下下:USEstudentGOINSERT課程注冊冊(學號,課程號,教師編號號,專業(yè)代碼碼,專業(yè)學級級,選課類型型,學期,學年,成績,學分)SELECTDISTINCT學生.學號,教師任課課.課程號,教師任課課.教師編號號,教學計劃劃.專業(yè)代碼碼,教學計劃劃.專業(yè)學級級,教學計劃劃.課程類型型,教學計劃劃.開課學期期,0,0,0FROM學生JOIN班級ON學生.班級代碼碼=班級.班級代碼碼JOIN教學計劃劃ON班級.專業(yè)代碼碼=教學計劃劃.專業(yè)

23、代碼碼JOIN教師任課課ON教學計劃劃.課程號=教師任課課.課程號圖5-16表結構及及增加16條記錄后后的執(zhí)行行結果 (10)為了教教學需要要,向“產品”表及“產品銷銷售”表表添加如如圖5-17和和圖5-18所所示的數數據記錄錄。代碼碼如下:USEstudentGOINSERT產產品VALUES(0001,顯顯示器)GOINSERT產產品VALUES(0002,鍵鍵盤)GOINSERT產產品VALUES(0004,鼠鼠標)GOUSEStudentGOINSERT產產品銷銷售VALUES(0001,25)GOINSERT產產品銷銷售VALUES(0003,30)GOINSERT產產品銷銷售VAL

24、UES(0005,35)GO圖5-17向“產品品”表添添加的數數據記錄錄圖5-18向“產品品銷售”表添加加的數據據記錄在數據輸輸入過程程中,可可能會出出現輸入入錯誤,或是因因為時間間變化而而需要更更新數據據。這都都需要修修改數據據。修改表中中的數據據可以使使用查詢詢分析器器中的網網格界面面進行修修改,即即右擊某某數據表表圖標,在彈出的的快捷菜菜單中選選擇“打打開表”命令,在右窗窗格中進進行修改改。這里里主要介介紹T-SQL的UPDATE語句實現現修改的的方法,UPDATE的語法格格式如下下:5.1.2數據的修修改UPDATEtablenameSETcolumn_name=expression|

25、 DEFAULT|NULL ,nFROM,nWHERE:=Table_name AStable_aliasWITH(,n)其中:table_name是需要更更新的表表的名稱稱。SET是指定要要更新的的列或變變量名稱稱的列表表。column_name是含有要要更改數數據的列列的名稱稱。expression| DEFAULT|NULL)是列值表表達式。是修改數數據來源源表。要注意的的是,當當沒有WHERE子句指定定修改條條件時,則表中中所有記記錄的指指定列都都被修改改。若修修改的數數據來自自另一個個表時,則需要要FROM子句語句句指定一一個表。【例5.4】將“教學學計劃”表中專專業(yè)代碼碼為“010

26、1”的“開課課學期”的值改改為第二二學期。代碼如下下:USEstudentGOUPDATE教學計劃劃SET開課學期期=2 WHERE專專業(yè)代碼碼=0101GO在查詢分分析器中中輸入并并執(zhí)行上上述代碼碼后,用用戶可以以通過企企業(yè)管理理器查看看修改的的結果,這里如如果沒有有使用WHERE子句句,則對對表中所所有記錄錄的“開開課學期期”進行行修改?!纠?.5】將將“課程程注冊”表中所所有記錄錄的學分分改為3。代碼如下下:USEstudentGOUPDATE課課程注注冊SET學學分=3GO在查詢分分析器中中輸入并并執(zhí)行上上述代碼碼后,用用戶可以以查看結結果以檢檢驗執(zhí)行行情況。這里沒沒有指定定條件,將對

27、表表中所有有記錄進進行修改改。如要要修改多多個列時時,列與與列之間間要用英英文逗號號隔開。5.1.3數數據的的刪除隨著系統(tǒng)統(tǒng)的運行行,表中中可能產產生一些些無用的的數據,這些數數據不僅僅占用空空間,而而且還影影響查詢詢的速度度,所以以應該及及時地刪刪除。刪刪除數據據可以使使用DELETE語句和TRUNCATETABLE語句。1.使用用DELETE語句刪刪除數據據從表中刪刪除數據據,最常常用的是是DELETE語句。DELETE語句的語語法格式式如下:DELETEtable_nameFROM,nWHERE:=table_nameAStable_alias ,n其中各項項參數含含義如下下:ltabl

28、e_name是要從其其中刪除除數據的的表的名名稱;lFROM為指定附附加的FROM子句; lWHERE指定用于于限制刪刪除行數數的條件件。如果果沒有提提供WHERE子句,則則DELETE刪除表中中的所有有行;l指定刪除除行的限限定條件件。對搜搜索條件件中可以以包含的的謂詞數數量沒有有限制。ltable_nameAStable_alias是為刪除除操作提提供標準準的表名名?!纠?.6】刪除“課課程注冊冊”表中中的所有有記錄。代碼如下下:USEstudentGODELETE課程注冊冊GO此例中沒沒有使用用WHERE語句指定定刪除的的條件,將刪除除課程注注冊表中中的所有有記錄,只剩下下表格的的定義。

29、用戶可可以通過過企業(yè)管管理器查查看?!纠?.6】刪除“課課程注冊冊”表中中的所有有記錄。代碼如下下:USEstudentGODELETE課課程注注冊GO此例中沒沒有使用用WHERE語語句指定定刪除的的條件,將刪除除課程注注冊表中中的所有有記錄,只剩下下表格的的定義。用戶可可以通過過企業(yè)管管理器查查看?!纠?.8】刪刪除“課課程注冊冊”表中中姓名為為“張斌斌”的課課程號為為“0001”的選課課信息。代碼如下下:USEstudentGODELETE課課程注注冊WHERE課課程注冊冊.課程程號=0001AND 學號號=(SELECT學學號FROM學學生WHERE姓姓名LIKE 張張斌)GO在查詢分分

30、析器中中輸入并并執(zhí)行上上述代碼碼。刪除除“課程程注冊”表中的的數據時時,用到到了“學學生”表表里的“姓名”字段值值“張斌斌”,所所以使用用了FROM子子句。用用戶可以以使用企企業(yè)管理理器檢查查代碼執(zhí)執(zhí)行結果果。用戶戶在操作作數據庫庫時,要要小心使使用DELETE語句句,因為為數據會會從數據據庫中永永久的被被刪除。2.使用TRUNCATETABLE清空表格格使用TRUNCATETABLE語句刪除除所有記記錄的語語法格式式為:TRUNCATETABLEtable_nameTRUNCATETABLE為關鍵字字;table_name為要刪除除所用記記錄的表表名。使用TRUNCATETABLE語句清空空

31、表格要要比DELETE語句快,TRUNCATETABLE是不記錄錄日志的的操作,它將釋釋放表的的數據和和索引所所占據的的所有空空間以及及所有為為全部索索引分配配的頁,刪除的的數據是是不可恢恢復的。而DELETE語句則不不同,它它在刪除除每一行行記錄時時都要把把刪除操操作記錄錄在日志志中。刪刪除操作作記錄在在日志中中,可以以通過事事務回滾滾來恢復復刪除的的數據。用TRUNCATETABLE和DELETE都可以刪刪除所有有的記錄錄,但是是表結構構還存在在,而DROP TABLE是刪除表表結構和和所有記記錄,并并釋放表表所占用用的空間間。 【例5.9】用用TRUNCATETABLE語語句清空空“課程

32、程注冊”表。代碼如下下:USEstudentGOTRUNCATETABLE課課程注冊冊GO5.2簡單查詢詢數據庫存存在的意意義在于于將數據據組織在在一起,以方便便查詢?!安樵冊儭钡暮x就是是用來描描述從數數據庫中中獲取數數據和操操縱數據據的過程程。SQL語言中最最主要、最核心心的部份份是它的的查詢功功能。查查詢語言言用來對對已經存存在于數數據庫的的數據按按照特定定的組合合、條件件表達式式或者一一定次序序進行檢檢索。其其基本格格式是由由SELECT子句、FROM子句和WHERE子句組成成的SQL查詢語句句:SELECTFROMWHERE也就是說說,SELECT指定了要要查看的的列(字段),FR

33、OM指定這些些數據的的來源(表或者視視圖),WHERE則指定了了要查詢詢哪些記記錄。提示:在在SQL語言中,SELECT子句除了了進行查查詢外,其他的的很多功功能也都都離不開開SELECT子句,例例如,創(chuàng)創(chuàng)建視圖圖是利用用查詢語語句來完完成的;插入數數據時,在很多多情況下下是從另另外一個個表或者者多個表表中選擇擇符合條條件的數數據。所所以查詢詢語句是是掌握SQL語言的關關鍵。5.2.1完整的SELECT語句的基基本語法法格式雖然SELECT語句的完完整語法法較復雜雜,但是是其主要要的語法法格式可可歸納如如下:SELECTselect_listINTOnew_table_nameFROMtabl

34、e_listWHEREsearch_conditionsGROUPBYgroup_by_expressionHAVINGsearch_ conditionsORDERBYorder_expressionASC|DESC 其中,帶有方括括號的子子句是可可選擇的的,大寫寫的單詞詞表示SQL的關鍵字字,而小小寫的單單詞或者者單詞組組合表示示表或視視圖名稱稱或者給給定條件件。名項項參數含含義如下下:lSELECTselect_list描述結果果集的列列,它是是一個逗逗號分隔隔的表達達式列表表。每個個表達式式通常是是從中獲獲取數據據的源表表或視圖圖的列的的引用,但也可可能是其其他表達達式,例例如常量量或

35、T-SQL函數。在在選擇列列表中使使用*表達式指指定返回回源表中中的所有有列。llINTOnew_table_name用于指定定使用結結果集來來創(chuàng)建一一個新表表,new_table_name是新表的的名稱。lFROMtable_list包含從中中檢索到到結果集集數據來來創(chuàng)建的的表的列列表,也也就是結結果集數數據來源源于哪些些表或視視圖,FROM子句還可可包含連連接的定定義。lWHEREsearch_conditions中的WHERE子句是一一個篩選選,它定定義了源源表中的的行要滿滿足SELECT語句的要要求所必必須達到到的條件件。只有有符合條條件的行行才向結結果集提提供數據據,不符符合條件件的

36、行中中的數據據不會被被使用。lGROUPBYgroup_by_expression中GROUPBY子句根據據group_by_expression列中的值值將結果果集分成成組。lHAVING search_conditions中HAVING子句是應應用于結結果集的的附加篩篩選。邏邏輯上講講,HAVING子句從中中間結果果集對行行進行篩篩選,這這些中間間結果集集是用SELECT語句中的的FROM,WHERE或GROUPBY子句創(chuàng)建建的。HAVING子句通常常與GROUPBY子句一起起使用,盡管HAVING子句前面面不必有有GROUPBY子句。lORDERBYorder_expressionASC

37、 lDESC中ORDERBY子句定義義結果集集中的行行排列的的順序。order_expression指定組成成排序列列表的結結果集的的列。ASC和DESC關鍵字用用于指定定行是按按升序還還是按降降序排序序。5.2.2選擇表中中的若干干列選擇表中中的全部部列或部部分列這這就是表表的投影影運算。這種運運算可以以通過SELECT子句給出出的字段段列表來來實現。字段列列表中的的列可以以是表中中的列,也可以以是表達達式列。所謂表表達式列列就是多多個列運運算后產產生的列列或者是是利用函函數計算算后所得得的列。1.輸出表中中的所有有列將表中的的所有字字段都在在結果集集中列出出來,可可以以有有兩種方方法:一一

38、種是將將所有的的字段名名在SELECT關鍵字后后列出來來;另一一種是在在SELECT語句后使使用一個個“*”?!纠?.10】查詢“學學生”表表中全體體學生的的記錄。代碼如下下:USEstudentGOSELECT*FROM學生GO 在查詢分分析器中中輸入并并執(zhí)行上上述代碼碼,將返返回學生生表中的的全部列列,如圖圖5-19所示示。圖5-19查詢“學學生”表表的全部部字段2.輸出表中中部分列列如果在結結果集中中輸出表表中的部部分列,可以將將要顯示示的字段段名在SELECT關鍵字后后依次列列出來,列名與與列名之之間用英英文逗號號“,”隔開,字段的的順序可可以根據據需要指指定。 【例5.11】查詢全全

39、體教師師的教師師編號、姓名和和職稱信信息。代碼如下下:USEstudentGOSELECT教教師編編號,姓姓名,職職稱FROM 教師師GO在查詢分分析器中中輸入并并執(zhí)行上上述代碼碼,在“結果”窗格中中將只有有“教師師編號”、“姓姓名”和和“職稱稱”三個個字段,如圖5-20所示。圖5-20查詢全體體教師的的編號、姓名和和職稱3.為結果集集內的列列指定別別名所有列有些時候候,結果果集中的的列不是是表中現現成的列列,而是是表中的的一個或或多個列列計算出出來的,這時候候,這個個計算列列需要指指定一個個列名,同時該該表達式式將顯示示在字段段列表中中。使用用格式如如下:SELCET表達式AS列別名FROM

40、數據源【例5.12】查詢“教教師”表表中全體體教師的的姓名及及年齡。代碼如下下:USEstudentGOSELECT姓名,YEAR(GETDATE()-YEAR(出生日期期) AS年齡FROM教師GO 上述語句句中,“YEAR(GETDATE()-YEAR(出生日期期) ”是表達式式,含義義是取得得系統(tǒng)當當前日期期中的年年份減去去“出生生日期”字段中中的年份份,就是是學生的的當前年年齡?!澳挲g”是表達達式別名名。將上上述代碼碼在查詢詢分析器器中輸入入并執(zhí)行行,返回回結果如如圖5-21所示。5.2.3選選擇表表中的若若干記錄錄選擇表中中的若干干記錄這這就是表表的選擇擇運算。這種運運算可以以通過增

41、增加一些些謂詞(例如WHERE子句句)等來來實現。1.消消除取取值重復復的行兩個本來來并不相相同的記記錄,當當投影到到指定的的某些列列上后,可能變變成相同同的行。如果要要去掉結結果集中中的重復復,可以以在字段段列表前前面加上上DISTINCT關關鍵字?!纠?.13】查詢選選修了課課程的學學生學號號。圖5-21帶有別名名的查詢詢代碼如下下:USEstudentGOSELECT學學號FROM課課程注冊冊GO上述代碼碼執(zhí)行結結果如圖圖5-22所示示,選課課的學生生號有重重復,共共有16行記錄錄。下面面的代碼碼就去掉掉了重復復的學號號,僅有有四行記記錄,執(zhí)執(zhí)行結果果如圖5-23所示。USEstuden

42、tGOSELECTDISTINCT學學號FROM 課程程注冊GO圖5-22未去掉重重復學號號的查詢詢圖5-23去掉了重重復學號號的查詢詢 2.限限制返返回行數數如果一個個表中有有上億條條記錄,而用戶戶只是看看一看記記錄的樣樣式和內內容,這這就沒有有必要顯顯示全部部的記錄錄。如果果要限制制返回的的行數,可以在在字段列列表之前前使用TOPn關關鍵字,則查詢詢結果只只顯示表表中前面面n條記記錄,如如果在字字段列表表之前使使用TOPn PERCENT關關鍵字字,則查查詢結果果只顯示示前面n條記記錄。【例5.14】查詢“課程注注冊”表表中的前前三條記記錄的信信息。代碼如下下:USEstudentGOSE

43、LECTTOP 3*FROM 課程程注冊GO在查詢分分析器中中輸入并并執(zhí)行上上述代碼碼,執(zhí)行行結果如如圖5-24所所示。圖5-24顯示前三三條記錄錄3.查詢滿足足條件的的元組如果只希希望得到到表中滿滿足特定定條件的的一些記記錄,用用戶可以以在查詢詢語句中中使用WHERE子句。表5-2常用的查查詢條件件查 詢 條 件 運 算 符 意 義 比較 =、=、=、!=、!; NOT+上述運算符比較大小 查 詢 條 件 運 算 符 意 義 確定范圍 BETWEENAND、NOT BETWEENAND 判斷值是否在范圍內 確定集合 IN、NOT IN 判斷值是否為列表中的值字符匹配 LIKE、NOT LIK

44、E 判斷值是否與指定的字符通配格式相符 空值 IS NULL、NOT IS NULL 判斷值是否為空 多重條件 AND、OR、NOT 用于多重條件判斷 (1)比比較大小小:比較較運算符符是比較較兩個表表達式大大小的運運算符,各運算算符的含含義是=(等于于)、(大于于)、=(大大于或等等于)、=(小于或或等于)、(不等等于)、!=(不等于于)、!(不大大于)。邏輯運運算符NOT可可以與比比較運算算符同用用,對條條件求非非。【例5.15】查詢“課課程注冊冊”表成成績大于于等于50分的記錄錄。代碼如下下:USEstudentGOSELECT*FROM課程注冊冊WHERE成績=50GO將上述代代碼在查

45、查詢分析析器中輸輸入并執(zhí)行,結果如如圖5-25所示。圖5-25查詢成績績大于等等于50分的記錄錄 (2)確確定范圍圍:范圍圍運算符符BETWEENAND和NOTBETWEENAND可可以查找找屬性值值在(或或不在)指定的的范圍內內的記錄錄。其中中,BETWEEN后后是范圍圍的下限限(即低低值),AND后是范范圍的上上限(即即高值)。語法法格式如如下:列表達式式 NOT BETWEEN起起始值值AND 終止止值【例5.16】查詢出出生日期期在19701982年的的學生姓姓名、學學號和出出生日期期。代碼如下下:USEstudentGOSELECT姓姓名,學號,出生日日期FROM 學生生WHEREy

46、ear(出生生日期) BETWEEN1970AND1982GO上述代碼碼的含義義是,如如果返回回出生日日期的年年份大于于等于1970且小于于等于1982,則該該記錄會會在“結結果”窗窗47格中顯示示。在查查詢分析析器中輸輸入并執(zhí)執(zhí)行上述述代碼,執(zhí)行結結果如圖圖5-26所示示。圖5-26范圍查找找(3)確定集集合:確確定集合合運算符符IN和NOTIN可以用來來查找屬屬性值屬屬于(或或不屬于于)指定定集合的的記錄,運算符符的語法法格式如如下:列表達式式NOTIN(列值1,列值2,列值3,)【例5.17】查詢計算算機系、經濟管管理系的的班級名名稱與班班級編號號。代碼如下下:USEstudentGOS

47、ELECT班級代碼碼,班級名稱稱FROM班級WHERE系部代碼碼IN(01,02)GO將上述代代碼在查查詢分析析器中輸輸入并執(zhí)執(zhí)行,結結果如圖圖5-27所示。圖5-27確定集合合查詢(4)字符匹匹配:在在實際的的應用中中,用戶戶有時候候不能給給出精確確的查詢詢條件。因此,經常需需要根據據一些不不確定的的信息來來查詢。T-SQL語言提供供了字符符匹配運運算符LIKE進行字符符串的匹匹配運算算,實現現這類模模糊查詢詢。其一一般語法法格式如如下:NOTLIKE ESCAPE 其含義是是查找指指定的屬屬性列值值與“”相匹配的的記錄?!啊笨梢允且灰粋€完整整的字符符串,也也可以含含有通配配符“”和“_”,

48、其中通通配符包包括如下下四種:百分分號,代代表任意意長度的的字符串串(長度度可以是是0)的字符符串。例例如,ab表示以a開頭,以以b結尾的任任意長度度的字符符串。例例如,acb、adxyzb、ab等都滿足足該匹配配串。_:下畫線線,代表表任意單單個字符符。例如如,a_b表示以a開頭,以以b結尾的長長度為3的任意字字符串。如afb等。:表示方方括號里里列出的的任意一一個字符符。例如如ABCDE,表示第一一個字符符是A第二個字字符為B、C、D、E中的任意意一個。也可以以是字符符范圍,例如AB-E同ABCDE的含義相相同。:表示不不在方括括號里列列出的任任意一個個字符。【例5.18】查詢“學學生”表

49、表中姓“周”的的學生的的信息。代碼如下下:USEstudentGOSELECT*FROM學生WHERE姓名LIKE 周%GO通配符字字符串“周%”的含義是是第一個個漢字是是“周”的字符符串。將將上述代代碼在查查詢分析析器中輸輸入并執(zhí)執(zhí)行,執(zhí)執(zhí)行結果果如圖5-28所示。圖5-28模糊查詢詢如果用戶戶要查詢詢的字符符串本身身就含有有或_,這時就就需要使使用“ESCAPE”短語對通通配符進進行轉義義了。【例5.19】有一門課課程的名名稱是“Photoshop_7.1”,查詢它的的課程號號和課程程名。代碼如下下:USEstudentGOINSERTINTO課程(課程號,課程名,學分)VALUES(00

50、05,Photoshop_7.1,4)GOSELECT課程號,課程名FROM課程WHERE課程名LIKE Photoshop/_7.1ESCAPE /GO “ESCAPE/ ”短語表示示“/”是換碼字字符,這這樣匹配配串中緊緊跟在“/”之后的字字符“_”不再具有有通配符符的含義義,轉義義為普通通的“_”字符。將上述代代碼在查查詢分析析器中輸輸入并執(zhí)執(zhí)行,結結果如圖圖5-29所示:圖5-29使用“ESCAPE”短語對通通配符“_”進行轉義義【例5.20】查詢“教教師”表表中備注注字段為為空的教教師信息息。代碼如下下:USEstudentGOSELECT*FROM教師WHERE備注ISNULLGO

51、這里的IS運算符不不能用“=”代替。將將上述代代碼在查查詢分析析器中輸輸入并執(zhí)執(zhí)行,執(zhí)執(zhí)行結果果如圖5-30所示。圖5-30查詢空值值(6)多重條條件查詢詢。用戶戶可以使使用邏輯輯運算符符AND、OR、NOT連接多個個查詢條條件,實實現多重重條件查查詢。邏邏輯運算算符使用用格式如如下:NOT邏輯表達達式AND|ORNOT邏輯表達達式【例5.21】查詢“課課程注冊冊”表中中課程號號為“000l”成績在7079分之間(不含79分)的學學生的學學號、成成績。代碼如下下:USEstudentGOSELECT學號,成績FROM課程注冊冊WHERE課程號=0001 AND成績=70 AND成績79GO將上

52、述代代碼在查查詢分析析器中輸輸入并執(zhí)執(zhí)行,結結果如圖圖5-31所示。圖5-31多重條件件查詢5.2.4對對查詢的的結果排排序用戶可以以使用ORDERBY子句句對查詢詢結果按按照一個個或多個個屬性列列的升序序(ASC)或或降序(DESC)排排列,默默認為升升序。如如果不使使用ORDER BY子句,則結果果集按照照記錄在在表中的的順序排排列。ORDERBY子子句的語語法格式式如下:ORDERBY列名ASC|DESC,n當按多列列排序時時,先按按前面的的列排序序,如果果值相同同再按后后面的列列排序?!纠?.22】查詢選修修了“0001”號課程的的學生的的學號,并按成成績降序序排列。代碼如下下:USE

53、studentGOSELECT學號,成績FROM課程注冊冊WHERE課程號=0001ORDERBY成績DESCGO 將上述代代碼在查查詢分析析器中輸輸入并執(zhí)執(zhí)行,結結果如圖圖5-32所示。圖5-32將查詢結結果降序序排序【例5.23】查詢全體體學生信信息,查查詢結果果按所在在班級代代碼降序序排列,同一個個班的按按照升序序排列。代碼如下下:USEstudentGOSELECT*FROM學生ORDERBY班級代碼碼DESC,學號ASCGO將上述代代碼在查查詢分析析器中輸輸入并執(zhí)執(zhí)行,結結果如圖圖5-33所示。圖5-33組合排序序5.2.5對數據進進行統(tǒng)計計用戶經常常需要對對結果集集進行統(tǒng)統(tǒng)計,例例

54、如求和和、平均均值、最最大值、最小值值、個數數等,這這些統(tǒng)計計可以通通過集合合函數、COMPUTE子句、GROUPBY子句來實實現。1.使用集合合函數為了進一一步方便便用戶,增強檢檢索功能能,SQLServer提供了許許多集合合函數,主要有有:COUNT( DISTINCT|ALL* )統(tǒng)計記錄錄個數。COUNT( DISTINCT|ALL )統(tǒng)計一列列中值的的個數。SUM( DISTINCT |ALL )計算一列列值的總總和(此列必須須是數值值型)。AVG( DISTINCT |ALL )計算一列列值的平平均值(此列必須須是數值值型)。MAX( DISTINCT |ALL )求一列值值中的最

55、最大值。MIN( DISTINCT |ALL )求一列值值中的最最小值。在SELECT子句中集集合函數數用來對對結果集集記錄進進行統(tǒng)計計計算。DISTINCT是去掉指指定列中中的重復復信息的的意思,ALL是不取消消重復,默認是是ALL?!纠?.24】查詢“教教師”表表中的教教師總數數。代碼如下下:USEstudentGOSELECTCOUNT(*)AS教師總數數FROM教師GO將上述代代碼在查查詢分析析器中輸輸入并執(zhí)執(zhí)行,結結果如圖圖5-34所示圖5-34統(tǒng)計記錄錄總數【例5.25】查詢“課課程注冊冊”表中中學生的的成績平平均分。代碼如下下:USEstudentGOSELECTAVG (成績)

56、 AS平均分FROM課程注冊冊GO將上述代代碼在查查詢分析析器中輸輸入并執(zhí)執(zhí)行,結結果如圖圖5-35所示。圖5-35求學生成成績的平平均分2.對結果進進行分組組GROUPBY子句將查查詢結果果集按某某一列或或多列值值分組,分組列列值相等等的為一一組,并并對每一一組進行行統(tǒng)計。對查詢詢結果集集分組的的目的是是為了細細化集合合函數的的作用對對象。GROUPBY子句的語語法格式式為:GROUPBY列名 HAVING篩選條件件表達式式其中:“BY列名”是是按列名名指定的的字段進進行分組組,將該該字段值值相同的的記錄組組成一組組,對每每一組記記錄進行行匯總計計算并生生成一條條記錄?!癏AVING篩選條件

57、件表達式式”表示示對生成成的組篩篩選后再再對滿足足條件的的組進行行統(tǒng)計。SELECT子句的列列名必須須是GROUPBY子句已有有的列名名或是計計算列。 【例5.26】查詢“課課程注冊冊”表中中課程選選課人數數4人以上的的各個課課程號和和相應的的選課人人數。代碼如下下:USEstudentGOSELECT課程號,COUNT(*)AS選課人數數FROM課程注冊冊GROUPBY課程號HAVINGCOUNT(*)=4GO將上述代代碼在查查詢分析析器中輸輸入并執(zhí)執(zhí)行,結果如圖圖5-36所示。HAVING與WHERE子句的區(qū)區(qū)別在于于作用的對象不不同。HAVING作用于組組,選擇擇滿足條件的的組,WHER

58、E子句作用用于表,選擇滿足條條件的記記錄。圖5-36分組統(tǒng)計計3.使用COMPUTE子句COMPUTE子句對查查詢結果果集中的的所有記記錄進行行匯總統(tǒng)統(tǒng)計,并并顯示所所有參加加匯總記記錄的詳詳細信息息。使用用語法格格式如下下COMPUTE集合函數數 BY列名其中:集合函數數,例如如SUM()、AVG()、COUNT()等。“BY列名”按按指定“列名”字段進進行分組組計算,并顯示示被統(tǒng)計計記錄的的詳細信信息。BY選項必須須與ORDERBY子句一起起使用?!纠?.27】查詢所有有學生所所有成績績的總和和。代碼如下下:USEstudentGOSELECT*FROM課程注冊冊ORDERBY學號COMP

59、UTE SUM(成績)GO在查詢分分析器中中輸入并并執(zhí)行上述代碼碼,結果果如圖5-37所示,在最最后一行行,有一一條匯總記錄。圖5-37COMPUTE計算【例5.28】對每個學學生的所所有課程程的成績績求和,并顯示示詳細記記錄。代碼如下下:USEstudentGOSELECT*FROM課程注冊冊ORDERBY學號COMPUTE SUM(成績) BY學號GO上述代碼碼中COMPUTE BY子句之前前使用了了ORDERBY子句,原原因是必必須先按按分類字字段排序序之后才才能使用用COMPUTE BY子句進行行分類匯匯總。COMPUTE BY與GROUPBY子句的區(qū)區(qū)別在于于:前者者既顯示示統(tǒng)計記記

60、錄又顯顯示詳細細記錄,后者僅僅顯示分分組統(tǒng)計計的匯總總記錄。將上述述代碼在在查詢分分析器中中輸入并并執(zhí)行,結果如如圖5-38所示。圖5-38學生成績績匯總5.2.6用查詢結結果生成成新表在實際的的應用系系統(tǒng)中,用戶有有時需要要將查詢詢結果保保存成一一個表,這個功功能可以以通過SELECT語句中的的INTO子句實現現。INTO子句語法法格式如如INTO新表名其中:新表名是是被創(chuàng)建建的新表表,查詢詢的結果果集中的的記錄將添添加到此此表中。新表的字字段由結結果集中中的字段段列表決決定。如果表名名前加“#”則創(chuàng)建的的表為臨臨時表。用戶必須須擁有該該數據庫庫中建表表的權限限。INTO子句不能能與COMP

溫馨提示

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

最新文檔

評論

0/150

提交評論