SQLServer數(shù)據(jù)庫應(yīng)用與開發(fā)教程ch04T-SQL數(shù)據(jù)庫操作語句_第1頁
SQLServer數(shù)據(jù)庫應(yīng)用與開發(fā)教程ch04T-SQL數(shù)據(jù)庫操作語句_第2頁
SQLServer數(shù)據(jù)庫應(yīng)用與開發(fā)教程ch04T-SQL數(shù)據(jù)庫操作語句_第3頁
SQLServer數(shù)據(jù)庫應(yīng)用與開發(fā)教程ch04T-SQL數(shù)據(jù)庫操作語句_第4頁
SQLServer數(shù)據(jù)庫應(yīng)用與開發(fā)教程ch04T-SQL數(shù)據(jù)庫操作語句_第5頁
已閱讀5頁,還剩90頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第4章T-SQL數(shù)據(jù)庫操作語句SqlServer2005數(shù)據(jù)庫應(yīng)用與開發(fā)教程清華大學(xué)出版社教學(xué)目標(biāo)教學(xué)重點(diǎn)教學(xué)過程2/2/20251教學(xué)目標(biāo)掌握使用DDL語句操作數(shù)據(jù)庫、數(shù)據(jù)表、視圖和索引的方法掌握SELECT以及各個(gè)子句的使用方法掌握INSERT語句的使用方法掌握UPDATE語句的使用方法掌握DELETE語句的使用方法2/2/20252教學(xué)重點(diǎn)DDL語句操作數(shù)據(jù)庫、數(shù)據(jù)表、視圖和索引SELECT語句以及各個(gè)子句的使用方法INSERT語句的使用方法UPDATE語句的使用方法DELETE語句的使用方法2/2/20253教學(xué)過程4.1數(shù)據(jù)定義語言〔DDL〕4.2數(shù)據(jù)查詢語句〔SELECT語句〕4.3數(shù)據(jù)操縱語言〔DML〕4.4T-SQL的可視化操作4.5習(xí)題2/2/202544.1數(shù)據(jù)定義語言〔DDL〕數(shù)據(jù)定義語言〔DDL:DataDefinitionLanguage〕主要用于對(duì)數(shù)據(jù)庫對(duì)象的創(chuàng)立、修改和刪除。其中數(shù)據(jù)庫對(duì)象包括數(shù)據(jù)庫、表、視圖、過程、觸發(fā)器、函數(shù)等。DDL的語法非常簡單,以下是分別對(duì)三個(gè)DDL語句簡單的解釋。CREATE語句:用來創(chuàng)立新的數(shù)據(jù)庫對(duì)象。ALTER語句:用來修改已有對(duì)象的結(jié)構(gòu)。DROP語句:用來刪除已有的數(shù)據(jù)庫對(duì)象。2/2/20255操作數(shù)據(jù)庫T-SQL提供了對(duì)數(shù)據(jù)庫管理的語句,包括創(chuàng)立數(shù)據(jù)庫、修改數(shù)據(jù)庫、刪除數(shù)據(jù)庫、別離數(shù)據(jù)庫和附加數(shù)據(jù)庫等。1.創(chuàng)立數(shù)據(jù)庫2.修改數(shù)據(jù)庫3.刪除數(shù)據(jù)庫2/2/202561.創(chuàng)立數(shù)據(jù)庫【例4-1】創(chuàng)立“Example〞數(shù)據(jù)庫。CREATEDATABASE"Example“【例4-2】創(chuàng)立“實(shí)例數(shù)據(jù)庫〞數(shù)據(jù)庫。其中主數(shù)據(jù)文件大小為10MB,最大值不受限,每次增量為1MB;事務(wù)日志文件大小為1MB,最大值不受限,文件每次增量10%。CREATEDATABASE實(shí)例數(shù)據(jù)庫ONPRIMARY(NAME='實(shí)例數(shù)據(jù)庫',FILENAME='D:\數(shù)據(jù)庫\實(shí)例數(shù)據(jù)庫\實(shí)例數(shù)據(jù)庫.mdf',SIZE=10MB,MAXSIZE=UNLIMITED,FILEGROWTH=1MB)LOGON(NAME='實(shí)例數(shù)據(jù)庫_LOG',FILENAME='D:\數(shù)據(jù)庫\實(shí)例數(shù)據(jù)庫\實(shí)例數(shù)據(jù)庫.ldf',SIZE=1MB,MAXSIZE=UNLIMITED,FILEGROWTH=1%)GO2/2/20257【例4-3】創(chuàng)立名為“DB1〞的數(shù)據(jù)庫,要求同時(shí)創(chuàng)立3個(gè)數(shù)據(jù)文件。其中主數(shù)據(jù)文件為10MB,最大大小為100MB,增量為10MB;次要數(shù)據(jù)文件屬于F_Group文件組,文件大小為10MB,最大值不受限,增量為10%。事務(wù)日志文件大小為20MB,最大值不受限,每次增量為5MB。CREATEDATABASEDB1ONPRIMARY(NAME=DB1,FILENAME='D:\數(shù)據(jù)庫\DB1\DB1.mdf',SIZE=10MB,MAXSIZE=100MB,FILEGROWTH=10MB),FILEGROUPF_Group(NAME=DB2,FILENAME='D:\數(shù)據(jù)庫\DB1\DB2.Ndf',SIZE=10MB,MAXSIZE=UNLIMITED,FILEGROWTH=10%)LOGON(NAME='DB1_LOG',FILENAME='D:\數(shù)據(jù)庫\DB1\DB1.ldf',SIZE=20MB,MAXSIZE=UNLIMITED,FILEGROWTH=5MB)GO2/2/202582.修改數(shù)據(jù)庫ALTERDATABASE語句可以對(duì)創(chuàng)立的的數(shù)據(jù)庫進(jìn)行修改,包括添加或刪除文件和文件組,更改文件和文件組的屬性,例如更改文件的名稱、大小和增量方式。【例4-4】向所創(chuàng)立的“Example〞中增加一個(gè)次要數(shù)據(jù)文件。文件的邏輯名為Exa,物理名為Exa.ndf,大小為20MB,最大大小不受限制,每次增加5MB。ALTERDATABASEExampleADDFILE(NAME='Exa',FILENAME='C:\ProgramFiles\MicrosoftSQLServer\MSSQL\Data\exa.ndf',SIZE=20MB,MAXSIZE=UNLIMITED,FILEGROWTH=10%)GO2/2/20259【例4-5】向所創(chuàng)立的“Example〞中增加一個(gè)日志文件數(shù)據(jù)文件。文件的邏輯名為Exa_1,物理名為Exa_1.ldf,大小為10MB,最大大小不受限制,每次增加10MB。ALTERDATABASEExampleADDLOGFILE(NAME='Exa_1',FILENAME='C:\ProgramFiles\MicrosoftSQLServer\MSSQL\Data\exa_1.ldf',SIZE=10MB,MAXSIZE=UNLIMITED,FILEGROWTH=10MB)GO【例4-6】刪除名為“Exa_1.ldf〞的日志文件。ALTERDATABASEExampleREMOVEFILEExa_1GO2/2/202510【例4-7】將數(shù)據(jù)庫“DB1〞的大小修改為100MB。ALTERDATABASEDB1MODIFYFILE(NAME=DB1,SIZE=100MB)GO【例4-8】將數(shù)據(jù)庫“DB1〞重新命名為“DataBase1〞ALTERDATABASEDB1MODIFYNAME=DATABASE1GO2/2/2025113.刪除數(shù)據(jù)庫DROPDATABASE語句從SQLServer中刪除一個(gè)或者多個(gè)數(shù)據(jù)庫。用戶只能根據(jù)自己的權(quán)限刪除數(shù)據(jù)庫,不能刪除當(dāng)前翻開的數(shù)據(jù)庫,不能刪除系統(tǒng)數(shù)據(jù)庫,數(shù)據(jù)庫刪除后不可恢復(fù)。刪除數(shù)據(jù)庫的語法如下:DROPDATABASEdatabase_name[,…n]【例4-9】刪除“Example〞數(shù)據(jù)庫DROPDATABASEexampleGO2/2/202512操作數(shù)據(jù)表數(shù)據(jù)表是數(shù)據(jù)庫的非常重要的對(duì)象,對(duì)數(shù)據(jù)表的操作也使用DDL語句,包括對(duì)表的創(chuàng)立、修改和刪除,以及添加表的約束。1.創(chuàng)立表2.修改表3.刪除表

2/2/2025131.創(chuàng)立表【例4-10】在“實(shí)例數(shù)據(jù)庫〞創(chuàng)立“學(xué)生表〞。USE實(shí)例數(shù)據(jù)庫CREATETABLE學(xué)生表( [學(xué)號(hào)][varchar](12)NOTNULL, [姓名][nchar](20)NOTNULL, [性別][char](2)NULL, [出生日期][smalldatetime]NULL, [入學(xué)日期][smalldatetime]NULLDEFAULT('2005.08.01'), [院系名稱][varchar](20)NULL, )GO2/2/2025142.修改表【例4-11】為“學(xué)生表〞添加“備注〞列。USE實(shí)例數(shù)據(jù)庫ALTERTABLE學(xué)生表ADD[備注][text]NULL GO【例4-12】將“學(xué)生表〞的“學(xué)號(hào)〞設(shè)置為主鍵。USE實(shí)例數(shù)據(jù)庫ALTERTABLE學(xué)生表ADDCONSTRAINTPK_IDPRIMARYKEY(學(xué)號(hào))GO2/2/202515如果實(shí)例數(shù)據(jù)庫存在另一個(gè)表“選課〞表,包括“學(xué)號(hào)〞、“課程號(hào)〞和“分?jǐn)?shù)〞三列,其中的“學(xué)號(hào)〞列的定義為[varchar](12)NOTNULL。并且已經(jīng)設(shè)置“學(xué)號(hào)〞和“課程號(hào)〞為該表的主鍵。那么可以為“選課表〞的“學(xué)號(hào)〞列添加外鍵。【例4-13】為“選課表〞的“學(xué)號(hào)〞列添加外鍵,外鍵的名稱為“fk_學(xué)號(hào)〞,對(duì)應(yīng)了“學(xué)生表〞的“學(xué)號(hào)〞。USE實(shí)例數(shù)據(jù)庫ALTERTABLE選課表ADDCONSTRAINTfk_學(xué)號(hào)FOREIGNKEY(學(xué)號(hào))REFERENCES學(xué)生表(學(xué)號(hào))GO2/2/2025163.刪除表DROPTABLE語句用于從數(shù)據(jù)庫中刪除表,同時(shí)刪除該表的所有數(shù)據(jù)、索引,觸發(fā)器、約束和權(quán)限標(biāo)準(zhǔn)。DROPTABLE不能用于有FOREIGNKEY約束引用的表。必須先刪除引用的FOREIGNKEY約束或者引用的表。不能使用DROPTABLE語句刪除系統(tǒng)表。語法如下:DROPTABLEtable_name2/2/202517操作視圖語句使用T-SOL可以創(chuàng)立、修改和刪除視圖。1.創(chuàng)立視圖2.修改視圖3.刪除視圖2/2/2025181.創(chuàng)立視圖【例4-14】創(chuàng)立視圖“view_1〞,該視圖包含三個(gè)列,分別來自“學(xué)生表〞的“姓名,“課程表〞的“課程名〞列,“選課表〞的“分?jǐn)?shù)〞分?jǐn)?shù)列。CREATEVIEWview_1ASSELECT學(xué)生表.姓名,課程表.課程名,選課表.分?jǐn)?shù)FROM課程表INNERJOIN選課表ON課程表.課程號(hào)=選課表.課程號(hào)INNERJOIN學(xué)生表ON選課表.學(xué)號(hào)=學(xué)生表.學(xué)號(hào)GO2/2/2025192.修改視圖【例4-15】修改視圖“view_1〞。ALTERVIEWview_1ASSELECT學(xué)生表.學(xué)號(hào),學(xué)生表.姓名,課程表.課程名,選課表.分?jǐn)?shù)FROM課程表INNERJOIN選課表ON課程表.課程號(hào)=選課表.課程號(hào)INNERJOIN學(xué)生表ON選課表.學(xué)號(hào)=學(xué)生表.學(xué)號(hào)GO修改后的視圖“view_1〞又添加了“學(xué)生表〞的“學(xué)號(hào)〞列。2/2/2025203.刪除視圖DROPVIEW語句刪除視圖。【例4-16】刪除視圖“view_1〞DROPVIEWview_12/2/2025214.1.4管理索引語句1.創(chuàng)立索引2.修改索引3.刪除索引2/2/2025221.創(chuàng)立索引【例4-17】在“學(xué)生表〞的“姓名〞列上創(chuàng)立非聚集索引。USE實(shí)例數(shù)據(jù)庫CREATEINDEXname_idxON學(xué)生表(姓名)GO【例4-18】在“學(xué)生表〞的“學(xué)號(hào)〞列上創(chuàng)立唯一聚集索引。USE實(shí)例數(shù)據(jù)庫CREATEUNIQUECLUSTEREDINDEXid_idxON學(xué)生表(學(xué)號(hào))GO【例4-19】在“選課表〞的“學(xué)號(hào)〞和“課程號(hào)〞列上創(chuàng)立組合索引。USE實(shí)例數(shù)據(jù)庫CREATEINDEXindex_1ON選課表(學(xué)號(hào),課程號(hào))GO2/2/2025232.修改索引【例4-20】修改“學(xué)生表〞的索引。USE實(shí)例數(shù)據(jù)庫ALTERINDEXid_idxON學(xué)生表REBUILDWITH(FILFACTOR=80,SORT_IN_TEMPDB=ON)GO【例4-21】禁用“學(xué)生表〞的非聚集索引。USE實(shí)例數(shù)據(jù)庫ALTERINDEXname_idxON學(xué)生表DISABLEGO2/2/2025243.刪除索引DROPINDEX語句刪除索引?!纠?-22】刪除“選課表〞的索引。USE實(shí)例數(shù)據(jù)庫DROPINDEX選課表.index_1GO2/2/2025254.2數(shù)據(jù)查詢語句〔SELECT語句〕SELECT語句是SQLServer中使用最頻繁,功能最強(qiáng)大的語句。用戶可以使用最簡單不包括任何條件的查詢,也可以使用添加了多個(gè)子句的查詢。SELECT語句的子句包括以下幾個(gè):SELECT:指定從數(shù)據(jù)庫中要查詢的列。INTO:創(chuàng)立新表,并將查詢的結(jié)果行插入到新表中FROM:指定要查詢的數(shù)據(jù)所在的表。WHERE:指定查詢返回的數(shù)據(jù)要符合的條件。ORDERBY:指定查詢的排序條件。GROUPBY:指定查詢結(jié)果的分組條件。HAVING:分組后查詢要符合的條件。在SELECT語句中經(jīng)常使用的還有UNION、COMPUTE、FOR、OPTION等關(guān)鍵詞。2/2/2025264.2.1SELECT語句的簡單使用1.簡單查詢列〔SELECT和FROM子句〕SELECT子句指定了要返回的列名,F(xiàn)ROM子句指定了改列所在的表?!纠?-22】查詢學(xué)生表的其中三列。SELECT學(xué)號(hào),姓名,院系名稱FROM學(xué)生表【例4-23】查詢課程表的所有列SELECT*FROM課程表在SELECT子句中,如果要查詢某個(gè)表的所有的列,可以使用“*〞代替所有的列名?!?〞號(hào)的使用可以簡化用戶的書寫過程,但是會(huì)降低查詢的效率,一般應(yīng)具體指明查詢的列。2/2/2025272.限制結(jié)果集〔TOP和PERCENT〕在SELECT子句中使用TOP和PERCENT關(guān)鍵詞可以限制查詢的結(jié)果集?!纠?-24】返回最上面5條記錄。SELECTTOP5學(xué)號(hào),姓名,院系名稱FROM學(xué)生表【例4-25】返回結(jié)果集的50%。SELECTTOP50PERCENT學(xué)號(hào),姓名,院系名稱FROM學(xué)生表2/2/2025283.過濾結(jié)果的重復(fù)值〔DISTINCT〕DISTINCT關(guān)鍵字可以從SELECT語句的結(jié)果集中消除重復(fù)項(xiàng)。查詢時(shí)如果沒有指定DISTINCT,將返回所有的行。如果指定了DISTINCT那么只返回取值不同的行。【例4-26】沒有指定DISTINCT,查詢所有的院系。SELECT院系名稱FROM學(xué)生表【例4-27】指定DISTINCT,查詢所有的院系。SELECTDISTINCT院系名稱FROM學(xué)生表對(duì)DISTINCT關(guān)鍵字來說,NULL將被認(rèn)為是相互重復(fù)的內(nèi)容。當(dāng)SELECT語句中指定DISTINCT時(shí),無論遇到多少個(gè)空值,結(jié)果中只返回一個(gè)NULL。2/2/2025294.對(duì)查詢的列排序〔ORDERBY〕ORDERBY實(shí)現(xiàn)對(duì)結(jié)構(gòu)集的排序?!纠?-28】按照院系名稱排序。SELECT學(xué)號(hào),姓名,院系名稱FROM學(xué)生表ORDERBY院系名稱ORDERBY子句后可以跟多個(gè)列,第一列優(yōu)先級(jí)最高。2/2/2025305.查詢列的重新命名(AS)

【例4-29】查詢“pubs〞數(shù)據(jù)庫的“authors〞表,并將返回的列命名為中文。USEpubsSELECTau_idAS編號(hào),au_lnameAS姓氏,au_fnameAS名字FROMauthorspubs數(shù)據(jù)庫是SQLServer自帶的一個(gè)數(shù)據(jù)庫,用戶可以對(duì)象資源管理器查看數(shù)據(jù)庫中的表的定義,表的關(guān)系以及表之間的聯(lián)系。2/2/2025316.為表指定別名〔AS〕SELECT語句可以通過指定表的別名來提高程序的可讀性,別名也稱相關(guān)變量或范圍變量。在分配表的別名時(shí),可以使用AS關(guān)鍵字,格式為table_nameAStablealias,也可以省略AS,直接在表后跟別名:table_nametable_alias。【例4-30】查詢學(xué)生表的同時(shí)將學(xué)生表命名為“X〞。SELECTX.學(xué)號(hào),X.姓名,X.性別FROM學(xué)生表ASX如果為表分配了別名,那么T-SQL語句中查詢的列的所有顯示引用必須使用別名,而不能使用表名。例如下面的查詢?cè)趫?zhí)行時(shí)會(huì)產(chǎn)生錯(cuò)誤。SELECT學(xué)生表.學(xué)號(hào),X.姓名,X.性別FROM學(xué)生表ASX2/2/2025327.INTO子句的使用INTO子句的作用時(shí)創(chuàng)立新表,并將查詢的結(jié)果插入新表中。如果執(zhí)行帶有INTO子句的SELECT語句時(shí),要確保在目標(biāo)數(shù)據(jù)庫中具有CREATETABLE權(quán)限。INTO子句的語法是:INTOnew_table其中new_table是根據(jù)選擇列表中的列和WHERE子句選擇的行,指定要?jiǎng)?chuàng)立的新表名。new_table的格式通過對(duì)選擇列表中的表達(dá)式進(jìn)行取值來確定。new_table中的列按選擇列表指定的順序創(chuàng)立。new_table中的每列與選擇列表中的相應(yīng)表達(dá)式具有相同的名稱、數(shù)據(jù)類型和值?!纠?-31】創(chuàng)立新表“student〞,其列來自于學(xué)生表的“學(xué)號(hào),姓名,性別,院系名稱〞四列。SELECT學(xué)號(hào),姓名,性別,院系名稱INTOstudentFROM學(xué)生表用戶可以在“對(duì)象資源管理器〞中查看“實(shí)例數(shù)據(jù)庫〞中的新建“student〞表。2/2/202533在結(jié)果集列表中使用表達(dá)2/2/2025342.連接兩個(gè)或者多個(gè)列可以使用“+〞將兩個(gè)或者多個(gè)列連接起來,作為一列來顯示。【例4-33】將學(xué)生和學(xué)號(hào)作為一列顯示。SELECT學(xué)號(hào)+':'+姓名AS學(xué)生,(YEAR(GETDATE())-YEAR(出生日期))AS年齡,院系名稱FROM學(xué)生表【例4-34】將“pubs〞中的“authors〞的姓名作為一列顯示,中間用空格分開。SELECTau_idAS編號(hào),au_fname+''+au_lnameAS姓名,cityAS城市FROMauthors2/2/2025353.數(shù)據(jù)類型的轉(zhuǎn)換CAST和CONVERT函數(shù)功能相似,可以將常量、變量或者列進(jìn)行顯示的數(shù)據(jù)類型轉(zhuǎn)換。二者的使用語法不同,CAST函數(shù)的語法如下:CAST(expressionASdata_type[(length)])CONVERT函數(shù)的語法如下:CONVERT(data_type[(length)],expression[,style])【例4-35】例如使用CAST函數(shù)將10.67轉(zhuǎn)換為整形。SELECTCAST(10.67ASint)【例4-36】使用CONVERT函數(shù)將10.67轉(zhuǎn)換為整形。SELECTCONVERT(int,10.67)【例4-37】查詢結(jié)果進(jìn)行數(shù)據(jù)轉(zhuǎn)換。SELECTCAST(學(xué)號(hào)ASVARCHAR(15)),姓名,CAST((YEAR(GETDATE())-YEAR(出生日期))ASINT)AS年齡FROM學(xué)生表2/2/2025364.使用CASE語句在查詢的結(jié)果列表中使用CASE語句對(duì)查詢的結(jié)果進(jìn)行分類?!纠?-38】使用CASE語句。SELECT學(xué)號(hào),課程號(hào),分?jǐn)?shù),等級(jí)=CASEWHEN分?jǐn)?shù)>=85THEN'優(yōu)秀'WHEN分?jǐn)?shù)>=70THEN'良好'WHEN分?jǐn)?shù)>=60THEN'及格'ELSE'不及格'END FROM選課表2/2/2025374.2.3WHERE子句的使用使用WHERE子句可以對(duì)查詢的結(jié)果進(jìn)行篩選,WHERE子句后是邏輯表達(dá)式,該式定義了要返回結(jié)果符合的條件,滿足條件的行被返回,不滿足條件的行不采用。WHERE子句同時(shí)也可以用在DELETE和UPDATE語句中。WHERE子句的限定條件可以有多種表達(dá)形式。下面分別討論。2/2/2025381.使用比較運(yùn)算符比較算符包括以下幾個(gè):等于〔=〕、大于〔>〕、小于〔<〕、大于等于〔>=〕、小于等于〔<=〕、不等于〔<>或者!=〕、不大于〔!>〕、不小于〔!<〕?!纠?-39】查詢學(xué)號(hào)為“20050101〞的學(xué)生的根本信息。SELECT*FROM學(xué)生表WHERE學(xué)號(hào)='20050101'【例4-40】查詢所有課程成績?cè)?5分以上的學(xué)生及相關(guān)科目。SELECT*FROM選課表WHERE分?jǐn)?shù)>=852/2/2025392/2/2025403.限定查詢的范圍使用BETWEEN和NOTBETWEEN關(guān)鍵字對(duì)條件進(jìn)行限制【例4-46】查詢分?jǐn)?shù)在0到59的學(xué)生信息。SELECT*FROM選課表WHERE分?jǐn)?shù)BETWEEN0AND59【例4-47】查詢分?jǐn)?shù)不在0到59的學(xué)生信息。SELECT*FROM選課表WHERE分?jǐn)?shù)NOTBETWEEN0AND592/2/2025414.使用列表(IN和NOTIN)使用IN和NOTIN關(guān)鍵字。查詢與IN子句中的任意一項(xiàng)匹配的記錄?!纠?-48】不使用IN子句查詢計(jì)算機(jī)系或者國貿(mào)系學(xué)生。SELECT*FROM學(xué)生表WHERE院系名稱='計(jì)算機(jī)系'OR院系名稱='國貿(mào)系'【例4-49】使用IN子句查詢“計(jì)算機(jī)系〞或者“國貿(mào)系〞學(xué)生。SELECT*FROM學(xué)生表WHERE院系名稱IN('計(jì)算機(jī)系','國貿(mào)系')【例4-50】使用NOTIN子句查詢非“計(jì)算機(jī)系〞或者“國貿(mào)系〞學(xué)生。SELECT*FROM學(xué)生表WHERE院系名稱NOTIN('計(jì)算機(jī)系','國貿(mào)系')2/2/2025425.模糊查詢〔LIKE和NOTLIKE〕使用LIKE和NOTLIKE關(guān)鍵字可以實(shí)現(xiàn)模糊查詢。LIKE后跟匹配的模式,可以是字符串、日期或者時(shí)間值。匹配包含的通配符包含以下四種。%:包含零個(gè)或多個(gè)字符的任意字符串。例如WHERE學(xué)號(hào)LIKE'2005%'查詢學(xué)號(hào)以2005開頭的記錄信息。_:下劃線,任何單個(gè)字符。WHEREtitleLIKE'_x',查找以x結(jié)尾的,前面只有一個(gè)字符的字符串。[]:指定范圍〔[a-f]〕或集合〔[abcdef]〕內(nèi)的任何單個(gè)字符。WHEREau_lnameLIKE'[C-P]arsen',查找以arsen結(jié)尾并且以介于C與P之間的任何單個(gè)字符開始的作者姓氏,例如Carsen、Karsen等。[^]:不在指定范圍〔[^a-f]〕或集合〔[^abcdef]〕內(nèi)的任何單個(gè)字符。例如WHEREau_lnameLIKE‘de[^l]%’將查找以de開頭并且其后的字母不為l的所有的作者的姓氏?!纠?-51】查找“pubs〞數(shù)據(jù)庫中“authors〞表的號(hào)碼中以415開頭的SELECTau_id,au_fname+''+au_lnameASname,phoneFROMauthorsWHEREphoneLIKE'415%'2/2/202543【例4-52】查找“pubs〞數(shù)據(jù)庫中“authors〞表的號(hào)碼中不以415開頭的SELECTau_id,au_fname+''+au_lnameASname,phoneFROMauthorsWHEREphoneNOTLIKE'415%'如果要查詢的目標(biāo)本身就是通配符的情況,例如需要查詢“10%〞其中的“%〞是通配符,這時(shí)可以采用ESCAPE關(guān)鍵字或者[]進(jìn)行轉(zhuǎn)化。ESCAPE關(guān)鍵字可以定義轉(zhuǎn)義符。當(dāng)轉(zhuǎn)義符置于通配符之前時(shí),該通配符解釋為普通字符,例如WHEREcolLIKE'%10/%%'ESCAPE'/'。該句中的前導(dǎo)和結(jié)尾的'%'為通配符,而由于使用了ESCAPE'/',那么'/'之后的'%'被轉(zhuǎn)義為普通字符。使用[],將通配符指定為中括號(hào)中的第一個(gè)字符,表示詞通配符作為普通的字符使用。例如WHEREcolLIKE'%10[%]%',中括號(hào)中的'%'為普通字符。2/2/2025446.ALL和ANY(SOME)關(guān)鍵字的使用ALL關(guān)鍵字的使用語法為:scalar_expression{=|<>|!=|>|>=|!>|<|<=|!<}ALL(subquery)其中scalar_expression是數(shù)量表達(dá)式,subquery是值的列表。例如:>ALL(1,8,6)表示要大于1,8和6中的所有的每一個(gè)值,即大于8。ANY(SOME)的語法為:scalar_expression{=|<>|!=|>|>=|!>|<|<=|!<}

{SOME|ANY}(subquery)其中參數(shù)的含義同ALL的語法,例如>ANY(1,8,6)表示大于三個(gè)數(shù)中的至少一個(gè)值,即大于1。SOME和ANY的功能相同。ALL和ANY關(guān)鍵字較多用于子查詢中,在子查詢中查找到符合的某些值,而外部查詢?cè)诖烁咨显僮鞒鰲l件查詢。2/2/2025454.2.4GROUPBY子句的使用使用GROUPBY子句可以將結(jié)果集進(jìn)行分組。分組的主要目的就是對(duì)分組后的數(shù)據(jù)進(jìn)行統(tǒng)計(jì),因此使用GROUPBY的SELECT語句中一般也包含了聚合函數(shù)的使用,例如SUM()、AVG()、COUNT()、MAX()、MIN()等等。2/2/2025461.GROUPBY的簡單使用【例4-53】以“院系名稱〞分組,并統(tǒng)計(jì)各系的人數(shù)。SELECT院系名稱,COUNT(學(xué)號(hào))AS人數(shù)FROM學(xué)生表GROUPBY院系名稱【例4-54】以“課程號(hào)〞分組,并統(tǒng)計(jì)各門課程的平均分。SELECT課程號(hào),AVG(分?jǐn)?shù))AS平均分FROM選課表GROUPBY課程號(hào)使用了GROUPBY子句后,SELECT后的列必須是分組依據(jù)的列,或者是聚合函數(shù)的參數(shù),否那么不能作為返回的列表。例如,以下的語句執(zhí)行時(shí)會(huì)出現(xiàn)錯(cuò)誤。SELECT學(xué)號(hào),姓名,院系名稱FROM學(xué)生表GROUPBY院系名稱2/2/2025472.CUBE關(guān)鍵字的使用在GROUPBY子句后如果使用了CUBE關(guān)鍵字,那么指定返回的結(jié)果不僅包含分組列,聚合函數(shù)的結(jié)果還包括了匯總行?!纠?-55】以“課程號(hào)〞分組,并統(tǒng)計(jì)各門課程的平均分,同時(shí)給出匯總行。SELECT課程號(hào),AVG(分?jǐn)?shù))AS平均分FROM選課表GROUPBY課程號(hào)WITHCUBECUBE的匯總行在查詢結(jié)果中用NULL表示。2/2/2025483.HAVING子句的使用在完成分組之前,如果使用了WEHER子句,那么不符合WHERE子句的記錄將不參與分組,如果在分組之后還要按照某種條件進(jìn)行篩選,那么需要用HAVING子句。WHERE子句和HAVING子句的根本區(qū)別在于作用的對(duì)象不同:WHERE子句作用于根本表或者視圖,從中選擇滿足條件的元組,用于GROUPBY子句之前;HAVING子句作用于組,選擇滿足條件的組,必須用于GROUPBY子句之后。HAVING語法與WHERE語法相似,但HAVING可以包含聚合函數(shù)。2/2/202549【例4-56】以“課程號(hào)〞分組,并統(tǒng)計(jì)各門課程的平均分,并且只查詢平均分大于80分的行。SELECT課程號(hào),AVG(分?jǐn)?shù))AS平均分FROM選課表GROUPBY課程號(hào)HAVINGAVG(分?jǐn)?shù))>80【例4-57】以“課程號(hào)〞分組,并統(tǒng)計(jì)各門課程的平均分,并且只查詢課程號(hào)不為01001和01002的行。SELECT課程號(hào),AVG(分?jǐn)?shù))AS平均分FROM選課表GROUPBY課程號(hào)HAVING課程號(hào)NOTIN(01001,01002)2/2/202550表的連接〔JOIN〕和聯(lián)合〔UNION〕查詢的結(jié)果可以來自多個(gè)表,這些表可以通過JOIN連接起來,也可以通過UNION進(jìn)行聯(lián)合。連接分為連接、外連接和交叉連接。內(nèi)連接(INNERJOIN)是系統(tǒng)的默認(rèn)方式。外連接又分為左外連接〔LEFTJOIN或LEFTOUTERJOIN〕、右外連接〔RIGHTJOIN或RIGHTOUTERJOIN〕和全外連接〔FULLJOIN或FULLOUTERJOIN〕三種。交叉連接返回表中所有數(shù)據(jù)行的笛卡爾積。聯(lián)合那么是將多個(gè)SELECT的語句合并成一個(gè)結(jié)果。使用JOIN連接的語法如下。SELECTselect_listFROMtable_name<join_type>table[<join_type>table_name…]ONjoin_conditionWHEREcondition2/2/2025511.內(nèi)連接〔INNERJOIN〕內(nèi)連接〔INNERJOIN〕是T-SQL中最典型,使用最多的連接方式。如果使用了內(nèi)連接,那么查詢返回的結(jié)果是兩個(gè)表中相匹配的記錄,而相連的兩個(gè)表中不匹配的記錄那么不顯示。在一個(gè)JOIN語句中可以連接多個(gè)ON子句?!纠?.58】查詢學(xué)生的分?jǐn)?shù)情況,查詢的各列來自于三個(gè)表。SELECT學(xué)生表.學(xué)號(hào),學(xué)生表.姓名,課程表.課程名,選課表.分?jǐn)?shù)FROM學(xué)生表INNERJOIN選課表ON(學(xué)生表.學(xué)號(hào)=選課表.學(xué)號(hào))INNERJOIN課程表ON(課程表.課程號(hào)=選課表.課程號(hào))2/2/2025522.左外連接〔LEFTJOIN或LEFTOUTERJOIN〕左外連接的結(jié)果集包括LEFTOUTER子句中指定的左表的所有行,而不僅僅是連接列所匹配的行。如果左表的某一行在右表中沒有匹配行,那么在關(guān)聯(lián)的結(jié)果集行中,來自右表的所有選擇列表列均為空值?!纠?-59】查詢學(xué)生表中的學(xué)號(hào)和姓名以及該生的分?jǐn)?shù)。SELECT學(xué)生表.學(xué)號(hào),學(xué)生表.姓名,選課表.分?jǐn)?shù)FROM學(xué)生表LEFTOUTERJOIN選課表ON(學(xué)生表.學(xué)號(hào)=選課表.學(xué)號(hào))2/2/2025533.右外連接〔RIGHTJOIN或RIGHTOUTERJOIN〕右外連接和左外連接是反向的,右外連接返回RIGHTOUTER子句中指定的右表的所有行,而不僅僅是連接列所匹配的行?!纠?-60】查詢課程表和選課表中相匹配的內(nèi)容,使用右外連接。SELECT 課程表.課程號(hào),課程表.課程名,選課表.分?jǐn)?shù)FROM課程表RIGHTOUTERJOIN選課表ON(課程表.課程號(hào)=選課表.課程號(hào))注意,由于“課程表〞和“選課表〞存在外鍵關(guān)系,“課程表〞是“選課表〞的主表,因此在“選課表〞中的任何一條記錄中的“課程號(hào)〞必須也存在于“課程表〞中,因此對(duì)這兩個(gè)表使用右外連接的結(jié)果和內(nèi)連接的結(jié)果是一樣的。2/2/2025544.全外連接〔FULLJOIN或FULLOUTERJOIN〕全外連接將返回左表和右表中的所有行。當(dāng)某一行在另一個(gè)表中沒有匹配時(shí),另一個(gè)表的選擇列表列將包含空值。如果表之間有匹配行,那么整個(gè)結(jié)果集行包含基表的數(shù)據(jù)值。5.交叉連接〔CROSSJOIN〕交叉連接將返回左表中的所有行。左表中的每一行均與右表中的所有行組合。交叉連接返回的行數(shù)是兩個(gè)表的行數(shù)的乘積,即笛卡爾積?!纠?-61】查詢課程表和選課表的交叉連接。SELECT 課程表.課程號(hào),課程表.課程名,選課表.分?jǐn)?shù)FROM課程表CROSSJOIN選課表2/2/2025556.聯(lián)合〔UNION〕使用使用UNION關(guān)鍵字可以將兩個(gè)或者多個(gè)查詢的結(jié)果合并為單個(gè)結(jié)果集。系統(tǒng)會(huì)對(duì)查詢結(jié)果的重復(fù)值自動(dòng)屏蔽。但是參加UNION操作的各個(gè)數(shù)據(jù)工程必須相同;對(duì)應(yīng)項(xiàng)的數(shù)據(jù)類型也必須相同。例如在數(shù)據(jù)庫“example〞中有“teacher〞和“employee〞兩個(gè)表,分別包含兩列,且相應(yīng)的列的類型相同。第一列是“編號(hào)〞列,數(shù)據(jù)類型是CHAR(6),第二列是“姓名〞列,數(shù)據(jù)類型是CHAR(8)?!皌eacher〞表包含200條數(shù)據(jù),“employee〞表包含100條數(shù)據(jù)。那么可以定義兩個(gè)表的UNION查詢?!纠?-62】對(duì)“teacher〞和“employee〞兩個(gè)表進(jìn)行UNION查詢USEexampleSELECT*FROMteacherUNIONSELECT*FROMemployee如果兩個(gè)表中不包含相同內(nèi)容的行,那么系統(tǒng)將返回300條記錄。如果兩個(gè)表中包含了相同的內(nèi)容,那么系統(tǒng)將相同的行合并為一行返回。2/2/202556子查詢?nèi)绻赪HERE語句中中包含了SELECT查詢塊,那么此查詢塊稱為子查詢或者嵌套查詢,包含子查詢的語句稱為父查詢或者外部查詢。子查詢有幾種表現(xiàn)形式:使用比較運(yùn)算符、使用IN關(guān)鍵字、使用ANY或者ALL關(guān)鍵字以及使用EXISTS關(guān)鍵字。子查詢可以多層嵌套,系統(tǒng)執(zhí)行時(shí)從內(nèi)層到外層進(jìn)行。子查詢的不同關(guān)鍵字之間可以相互轉(zhuǎn)換,許多子查詢也可以使用連接的方式表示。2/2/2025571.使用比較運(yùn)算符的子查詢帶有比較運(yùn)算符的子查詢是指父查詢與子查詢之間用比較運(yùn)算符〔=、>、<、>=、<=、!=〕進(jìn)行連接。如果使用了比較運(yùn)算符那么子查詢的返回結(jié)果必須是只有一個(gè)值?!纠?-63】查詢和“張利〞同學(xué)在同一個(gè)院系的所有的學(xué)生的根本信息。SELECT*FROM學(xué)生表WHERE院系名稱=(SELECT院系名稱FROM學(xué)生表WHERE姓名='張利')2/2/202558【例4-64】查詢選課表中課程號(hào)為“02002〞的分?jǐn)?shù)比學(xué)號(hào)為“20050101〞低的信息。SELECT*FROM選課表WHERE分?jǐn)?shù)<(SELECT分?jǐn)?shù)FROM選課表WHERE學(xué)號(hào)='20050101'AND課程號(hào)='01002')AND課程號(hào)='01002‘圖4-28【例4-64】查詢結(jié)果需要注意的是使用比較運(yùn)算符的子查詢必須返回單個(gè)值否那么會(huì)出錯(cuò)。例如以下語句:SELECT*FROM選課表WHERE分?jǐn)?shù)<(SELECT分?jǐn)?shù)FROM選課表WHERE學(xué)號(hào)='20050101')AND課程號(hào)='01002'由于學(xué)號(hào)為“20050101〞的學(xué)生有不同科目的多個(gè)成績,因此執(zhí)行后系統(tǒng)會(huì)提示錯(cuò)誤,2/2/2025592.使用IN和NOTIN關(guān)鍵字帶有IN以及NOTIN關(guān)鍵字的子查詢是指父查詢與子查詢之間用IN或者NOTIN進(jìn)行連接,判斷某個(gè)屬性列值是否在子查詢的結(jié)果中。子查詢的結(jié)果往往是多個(gè)值的集合。【例4-65】查詢學(xué)生分?jǐn)?shù)在80分以上的學(xué)生的“學(xué)號(hào)〞、“姓名〞和所在“院系名稱〞。SELECT學(xué)生表.學(xué)號(hào),學(xué)生表.姓名,學(xué)生表.院系名稱FROM學(xué)生表WHERE學(xué)生表.學(xué)號(hào)IN(SELECT選課表.學(xué)號(hào)FROM選課表WHERE選課表.分?jǐn)?shù)>80)2/2/2025603.使用ANY或者ALL關(guān)鍵字的子查詢使用ANY或者ALL關(guān)鍵字的同時(shí)也要使用運(yùn)算符?!纠?-66】查詢選修課程號(hào)“01002〞的所有的學(xué)生的信息。SELECT學(xué)生表.學(xué)號(hào),學(xué)生表.姓名,學(xué)生表.院系名稱FROM學(xué)生表WHERE學(xué)生表.學(xué)號(hào)=ANY(SELECT選課表.學(xué)號(hào)FROM選課表WHERE選課表.課程號(hào)='01002')2/2/2025614.使用EXISTS、NOTEXISTS關(guān)鍵詞帶有EXISTS的子查詢不返回任何實(shí)際的數(shù)據(jù),它只得到邏輯值“真〞或者“假〞。當(dāng)子查詢的查詢結(jié)果不為空時(shí),外層的WHERE子句返回真值,否那么返回假值?!纠?-67】查詢選修課程號(hào)“01002〞的所有的學(xué)生的信息。SELECT*FROM學(xué)生表WHEREEXISTS(SELECT選課表.學(xué)號(hào)FROM選課表WHERE選課表.課程號(hào)='01002'AND學(xué)生表.學(xué)號(hào)=選課表.學(xué)號(hào))使用EXISTS引入的查詢和其他子查詢略有不同,需要注意以下幾點(diǎn)。?EXISTS關(guān)鍵字前面沒有列名、常量或其他表達(dá)式。?由EXISTS關(guān)鍵字引入子查詢其父查詢的SELECT子句通常是由*號(hào)組成的。由于只是測(cè)試是否存在符合子查詢中指定條件的行,所以不必列出列名。?使用IN、ALL、ANY的子查詢都可以轉(zhuǎn)換為用EXISTS代替。但是某些EXISTS的查詢不能以任何其他方法表示。2/2/2025625.嵌套子查詢的WHERE子句中也可以使用子查詢,構(gòu)成多層嵌套。T-SQL對(duì)嵌套的層數(shù)沒有限制?!纠?-68】查詢選修“C語言〞的所有的學(xué)生的信息。SELECT學(xué)生表.學(xué)號(hào),學(xué)生表.姓名,學(xué)生表.院系名稱FROM學(xué)生表WHERE學(xué)生表.學(xué)號(hào)IN(SELECT選課表.學(xué)號(hào)FROM選課表WHERE選課表.課程號(hào)=(SELECT課程表.課程號(hào)FROM課程表WHERE課程表.課程名='C語言'))2/2/2025636.將子查詢修改為連接大局部包含子查詢的語句都可以用連接表示。通常情況下使用連接會(huì)提供查詢的效率,產(chǎn)生更好的效果?!纠?-69】查詢學(xué)生分?jǐn)?shù)在80分以上的所有的學(xué)生的“學(xué)號(hào)〞、“姓名〞和所在“院系名稱〞。SELECTDISTINCT學(xué)生表.學(xué)號(hào),學(xué)生表.姓名,學(xué)生表.院系名稱FROM學(xué)生表JOIN選課表ON學(xué)生表.學(xué)號(hào)=選課表.學(xué)號(hào)WHERE選課表.分?jǐn)?shù)>80【例4-70】查詢選修“C語言〞的所有的學(xué)生的信息。SELECT學(xué)生表.學(xué)號(hào),學(xué)生表.姓名,學(xué)生表.院系名稱FROM學(xué)生表JOIN選課表ON學(xué)生表.學(xué)號(hào)=選課表.學(xué)號(hào)JOIN課程表ON課程表.課程號(hào)=選課表.課程號(hào)WHERE課程表.課程名='C語言'2/2/2025644.3數(shù)據(jù)操縱語言〔DML〕數(shù)據(jù)操縱語言〔DML,DataManipularionLanguage〕是指對(duì)已創(chuàng)立的數(shù)據(jù)庫對(duì)象中的數(shù)據(jù)表數(shù)據(jù)的添加、修改和刪除。包括以下三個(gè)語句:INSERT向表中添加新行。UPDATE更改表中的現(xiàn)有數(shù)據(jù)。DELETE從表中刪除行。2/2/2025654.3.1INSERT語句INSERT語句向表中插入新行,其語法格式為:INSERT[INTO]table_or_view[(column_list)]VALUES(DATA_VALUES)1.簡單的INSERT語句【例4-71】向?qū)W生表插入一個(gè)學(xué)生信息。INSERTINTO學(xué)生表(學(xué)號(hào),姓名,性別,院系名稱)VALUES('20050302','李婷','女','國貿(mào)系')

沒有插入的列值為NULL。如果省略表后的列名那么BALUES中必須包含各個(gè)列的值,這些值可以是NULL。【例4-72】向?qū)W生表中插入一條記錄。INSERTINTO學(xué)生表VALUES('20050306','趙莘','男','1985-6-230:00:00','2005-8-100:00:00','國貿(mào)系',NULL)2/2/2025662.按照與表中列的順序不同插入數(shù)據(jù)如果顯示指定了列名,這些列名的順序可以和CREATETABLE中定義的列的順序不同?!纠?-73】向?qū)W生表中插入一條記錄。INSERTINTO學(xué)生表(學(xué)號(hào),姓名,性別,院系名稱,出生日期,入學(xué)日期)VALUES(20050204,'趙勤','女','國貿(mào)系','1985-12-030:00:00','2005-8-100:00:00')2/2/2025673.INSERT…SELECT語句INSERT…SELECT語句從其他表或者視圖中添加數(shù)據(jù),該語句用于批量添加數(shù)據(jù)。使用時(shí)要保證目標(biāo)表和源表的列的數(shù)量、數(shù)據(jù)類型以及排列順序要完全一致?!纠?-74】創(chuàng)立“男生情況表〞。CREATETABLE男生情況表(學(xué)號(hào)varchar(12)NOTNULL,姓名nchar(10)NOTNULL,性別char(2)NULL,出生日期smalldatetimeNULL,入學(xué)日期smalldatetimeNULL,院系名稱varchar(20)NULL,備注textNULL)【例4-75】將學(xué)生表中所有男生的信息存儲(chǔ)到“男生情況表〞中。INSERTINTO男生情況表SELECT*FROM學(xué)生表WHERE性別='男'2/2/2025684.TOP關(guān)鍵字的使用【例4-76】創(chuàng)立一個(gè)成績表,包含四列“學(xué)號(hào)〞、“姓名〞、“科目〞和“成績〞。CREATETABLE成績表(學(xué)號(hào)varchar(12)NOTNULL,姓名nchar(20)NOTNULL,科目varchar(20)NOTNULL,成績tinyintNULL)【例4-77】將“學(xué)生表〞“課程表〞“選課表〞的相關(guān)匹配信息聯(lián)合起來,并將前面100條記錄存儲(chǔ)在“成績表〞中。INSERTTOP(100)INTO成績表SELECT學(xué)生表.學(xué)號(hào),學(xué)生表.姓名,課程表.課程名,選課表.分?jǐn)?shù)FROM學(xué)生表JOIN選課表ON學(xué)生表.學(xué)號(hào)=選課表.學(xué)號(hào)JOIN課程表ON課程表.課程號(hào)=選課表.課程號(hào)2/2/202569語句UPDATE語句用于更新一個(gè)表中選定行的一列或者多列的值。其語法格式如下:UPDATEtable_or_viewSET<column>=<expression>[,<column>=<expression>]…[WHERE(condition)]其中的SET子句指定要更改的列和這些列的新值。對(duì)所以符合WHERE條件的行,都將使用SET子句中指定的值更新指定列中的值。2/2/2025701.簡單的UPDATE的語句【例4-78】將學(xué)生表中學(xué)號(hào)為“20050202〞的學(xué)生姓名改為“張純〞。UPDATE學(xué)生表SET姓名='張純'WHERE學(xué)號(hào)='20050202'【例4-79】修改學(xué)號(hào)為“20050306〞的學(xué)生信息。UPDATE學(xué)生表SET學(xué)號(hào)='20050206',姓名='魏海平',性別='男',院系名稱='企管系'WHERE學(xué)號(hào)='20050306'2/2/2025712.計(jì)算列的值SET子句可以設(shè)定某列的值經(jīng)過某種計(jì)算后存儲(chǔ)到列中【例4-80】將“選課表〞所有學(xué)生分?jǐn)?shù)乘以0.8后存儲(chǔ)在選課表中。UPDATE選課表SET分?jǐn)?shù)=分?jǐn)?shù)*0.83.TOP的使用可以使用TOP子句來限制UPDATE語句修改的行數(shù)。其中TOP后的n值決定了修改的行數(shù)。系統(tǒng)隨機(jī)選擇n行執(zhí)行更新操作?!纠?-81】將“選課表〞前20個(gè)學(xué)生分?jǐn)?shù)乘以1.25后存儲(chǔ)在選課表中。UPDATETOP(20)選課表SET分?jǐn)?shù)=分?jǐn)?shù)*1.252/2/2025724.3.2DELETE語句DELETE語句可以實(shí)現(xiàn)從表中刪除已有的數(shù)據(jù)行。其語法非常簡單,格式如下:DELETEFROMtable_or_view[WHERE<condition>]其中WHERE子句指定要?jiǎng)h除記錄應(yīng)當(dāng)滿足的條件?!纠?-82】將學(xué)號(hào)為“20050304〞的學(xué)生信息從學(xué)生表中刪除。DELETEFROM學(xué)生表WHERE學(xué)號(hào)='2005030【例4-83】將“選課表〞中低于60分的記錄刪除。DELETEFROM選課表WHERE分?jǐn)?shù)<60【例4-84】刪除“實(shí)例數(shù)據(jù)庫〞中“選課表〞的所有記錄。USE實(shí)例數(shù)據(jù)庫DELETEFROM選課表執(zhí)行此語句后,選課表的所有記錄都被刪除,但是選課表的定義仍然存在。2/2/2025734.4T-SQL的可視化操作SQLServer2005的管理界面支持T-SQL的可視化操作,對(duì)于大多數(shù)的T-SQL語句都有相對(duì)應(yīng)的語法模版,用戶可以在模版中編寫相應(yīng)的操作語句。使用可視化的編程可以簡化用戶的編程過程,并減少語句語法錯(cuò)誤。下面分別介紹SELECT、INSERT和UPDATE的可視化操作。2/2/2025744.4.1SELECT語句的可視化操作。在編寫SELECT語句時(shí),用戶可以采用可視化操作,通過點(diǎn)擊鼠標(biāo),選定相關(guān)表及列的形式自動(dòng)生成相應(yīng)的SELECT語句。2/2/2025751.單個(gè)表的SELECT語句的自動(dòng)生成。要查詢“學(xué)生表〞的學(xué)生信息,步驟如下?!?〕翻開SQLServerManagementStudio管理器,在“對(duì)象資源管理器〞視圖中依次展開以下節(jié)點(diǎn):數(shù)據(jù)庫/實(shí)例數(shù)據(jù)庫/dbo.學(xué)生表,在該項(xiàng)上單擊右鍵,在彈出菜單中依次選擇:編寫腳本為(S)/SELECT到(S)/新查詢編輯器窗口(N),如圖1所示。圖12/2/202576〔2〕點(diǎn)擊圖1的菜單項(xiàng)“新查詢編輯器窗口(N)〞,那么在新的查詢編輯器中自動(dòng)生成“學(xué)生表〞的SELECT語句,如圖2所示。圖22/2/2025772.在編輯器中設(shè)計(jì)查詢?nèi)绻奢^為復(fù)雜的SELECT語句,用戶還可以通過SQLServerManagementStudio管理器提供的“查詢編輯器〞來設(shè)計(jì)該SELECT語句。例如要查詢“學(xué)生表〞.“學(xué)號(hào)〞、“學(xué)生表〞.“姓名〞、“課程表〞.“課程名〞和“選課表〞.“分?jǐn)?shù)〞并且符合院系名稱是“計(jì)算機(jī)系〞的條件。下面介紹設(shè)計(jì)查詢的具體步驟?!?〕選擇SQLServerManagementStudio管理器中的菜單:查詢/在編輯器中設(shè)計(jì)查詢(Q)…Ctrl+Shift+Q,如圖4-35所示。或者點(diǎn)擊“在編輯器中設(shè)計(jì)查詢〞的圖標(biāo):2/2/202578〔2〕翻開“查詢?cè)O(shè)計(jì)器〞窗口和“添加表〞窗口,如圖3所示。“查詢?cè)O(shè)計(jì)器〞窗口共有三個(gè)視圖:最上面的是“選擇表〞的視圖,中間是“已選擇列〞的視圖,最下面是“SQL語句〞視圖,三個(gè)視圖相互對(duì)應(yīng),任意一個(gè)視圖的修改都會(huì)引起另外兩個(gè)視圖的相應(yīng)的變化。已選列視圖SQL語句視圖選擇表視圖圖32/2/202579〔3〕在圖3示“添加表〞窗口中,分別選擇“選課表〞、“學(xué)生表〞和“課程表〞,點(diǎn)擊“添加〞命令按鈕,將三個(gè)表添加到“查詢?cè)O(shè)計(jì)器〞中,如圖4所示。圖42/2/202580〔4〕關(guān)閉“添加表〞窗口〔如果需要翻開“添加表〞窗口,在“查詢?cè)O(shè)計(jì)器〞中點(diǎn)擊右鍵,在彈出菜單中選擇“添加表〞即可〕,在“查詢?cè)O(shè)計(jì)器〞翻開的三個(gè)表中需要查詢的列前選中復(fù)選框,即“學(xué)生表〞.“學(xué)號(hào)〞、“學(xué)生表〞.“姓名〞、“課程表〞.“課程名〞和“選課表〞.“分?jǐn)?shù)〞四列。選中的四列出現(xiàn)在“查詢?cè)O(shè)計(jì)器〞的“已選擇列〞中,如圖5所示。圖52/2/202581〔5〕要查詢“院系名稱為“計(jì)算機(jī)系〞的列,那么要添加“WHERE子句〞即篩選條件。方法是在“選擇表〞視圖中選擇“學(xué)生表〞.“院系名稱〞列,該列出現(xiàn)在“已選擇列〞視圖中。如果不希望該列出現(xiàn)在查詢的返回結(jié)果中那么取消“已選擇列〞視圖中“輸出〞一項(xiàng)復(fù)選框。在“已選擇列〞視圖的“篩選〞列中輸入“計(jì)算機(jī)系〞,相應(yīng)的“WHERE子句〞被添加到了“SQL語句〞視圖中,如圖6所示。圖62/2/202582〔6〕點(diǎn)擊“查詢?cè)O(shè)計(jì)器〞的“確定〞命令按鈕。那么設(shè)計(jì)的SELECT語句出現(xiàn)在查詢編輯器中,語法是:SELECT學(xué)生表.學(xué)號(hào),學(xué)生表.姓名,選課表.分?jǐn)?shù),課程表.課程名FROM課程表INNERJOIN選課表ON課程表.課程號(hào)=選課表.課程號(hào)INNERJOIN學(xué)生表ON選課表.學(xué)號(hào)=學(xué)生表.學(xué)號(hào)WHERE(學(xué)生表.院系名稱='計(jì)算機(jī)系')〔7〕用戶可以直接執(zhí)行以上的SELECT語句,查看返回的結(jié)果。在“查詢?cè)O(shè)計(jì)器〞的“以選擇列〞視圖中,可以對(duì)選定的列定義其“是否輸出、“排序類型〞、“排序順序〞以及“篩選〞等操作,通過這些操作,用戶可以添加SELECT語句的ORDERBY子句、ASC或者DSC關(guān)鍵詞以及WHERE子句的多個(gè)條件。2/2/202583語句的可視化操作。也可以使用自動(dòng)生成的方法生成INSERT語句,方法同單個(gè)表的SELECT語句的生成類似。例如向?qū)W生表插入一個(gè)記錄?!?0050109,湯城,男,1986-04-16,2005-08-01,計(jì)算機(jī)系,NULL〞?!?〕翻開SQLServerManagementStudio管理器,在“對(duì)象資源管理器〞視圖中依次展開以下節(jié)點(diǎn):數(shù)據(jù)庫/實(shí)例數(shù)據(jù)庫/dbo.學(xué)生表,在該項(xiàng)上單擊右鍵,在彈出菜單中依次選擇:編寫腳本為(S)/INSERT到(I)/新查詢編輯器窗口(N)。2/2/2025842/2/202585〔2〕點(diǎn)擊的“新查詢編輯窗口〞菜單項(xiàng),翻開“查詢分析器〞,如圖7所示。系統(tǒng)已經(jīng)自動(dòng)生成的INSERT語句的模版。圖7〔3〕用戶直接在該模版上修改VALUES后的內(nèi)容即可。2/2/2025864.4.3UPDATE語句的可視化操作UPDATE語句也可以使用同樣的方法生成。例如修改學(xué)號(hào)為“20050109〞的學(xué)生信息,將其姓名修改為“湯琛琛〞。〔1〕翻開SQLServerM

溫馨提示

  • 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)論