sql server2008由淺入深課件第7章使用操作_第1頁(yè)
sql server2008由淺入深課件第7章使用操作_第2頁(yè)
sql server2008由淺入深課件第7章使用操作_第3頁(yè)
sql server2008由淺入深課件第7章使用操作_第4頁(yè)
sql server2008由淺入深課件第7章使用操作_第5頁(yè)
已閱讀5頁(yè),還剩38頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡(jiǎn)介

第7章使用SQLServer2008操作數(shù)據(jù)通過(guò)第4章的學(xué)習(xí),我們已經(jīng)初步了解了T-SQL語(yǔ)言。而對(duì)于T-SQL語(yǔ)言來(lái)說(shuō),其根本的功能就在于對(duì)關(guān)系型數(shù)據(jù)庫(kù)中數(shù)據(jù)的查詢和控制。本章將學(xué)習(xí)在SQLServer2008中如何通過(guò)T-SQL語(yǔ)言來(lái)完成各種數(shù)據(jù)的操作功能。7.1使用SELECT語(yǔ)句完成簡(jiǎn)單查詢使用SELECT語(yǔ)句進(jìn)行數(shù)據(jù)查詢是數(shù)據(jù)庫(kù)的核心操作。該語(yǔ)句具有靈活的使用方式和豐富的功能,能夠較完整的完成數(shù)據(jù)查詢工作。SQLServer2008對(duì)數(shù)據(jù)的操作也是基于SELECT語(yǔ)句來(lái)完成的。在對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行操作之前,必須先使用USE命令打開(kāi)數(shù)據(jù)庫(kù),并使用GO語(yǔ)句作為結(jié)束行。例如,要打開(kāi)我們?cè)谇懊嬲鹿?jié)中創(chuàng)建的wj數(shù)據(jù)庫(kù),可以使用下面的語(yǔ)句:USEwjGO7.1.1基本的SELECT語(yǔ)句SELECT語(yǔ)句主要用于查詢數(shù)據(jù),也可以用來(lái)向局部變量賦值。常用的SELECT語(yǔ)句的語(yǔ)法為:SELECT選擇列表(查詢所顯示的內(nèi)容)FROM表的列表(查詢內(nèi)容所在的表〕WHERE查詢的條件(查詢內(nèi)容的條件)

7.1.2使用DISTINCT避免重復(fù)項(xiàng)執(zhí)行SQL語(yǔ)句,在查詢結(jié)果中可能有值相同的行,如果需要把相同的行只顯示一行,即對(duì)相同值只需要顯示一行,就需要使用DISTINCT關(guān)鍵字。例如,如果只需要查詢?cè)趕tudent表中不同的年齡情況,對(duì)于某一個(gè)年齡值,只需要一個(gè)返回值即可,則需要使用DISTINCT關(guān)鍵字。7.1.3使用TOP子句返回部分結(jié)果使用TOP關(guān)鍵字,可以從結(jié)果集中僅返回前n行。如果指定了PERCENT關(guān)鍵字,則返回前n%行,n介于0~100之間。如果查詢包括ORDERBY子句,則首先對(duì)行進(jìn)行排序,然后從排序的結(jié)果集中返回前n行或行的n%(ORDERBY子句參見(jiàn)本章稍后部分)。7.1.4為查詢結(jié)果設(shè)置顯示別名在查詢結(jié)果中,可以看到顯示結(jié)果的列標(biāo)題就是表的列名字,同時(shí)也可以將顯示結(jié)果的列標(biāo)題修改為更加直觀易懂的標(biāo)題。修改查詢列標(biāo)題有以下3種方法:將要顯示的列標(biāo)題用單引號(hào)括起來(lái)后接等號(hào)(=),后接要查詢的列名。將要顯示的列標(biāo)題用單引號(hào)括起來(lái)后,寫(xiě)在列名后面,兩者之間使用空格隔開(kāi)。將要顯示的列標(biāo)題用單引號(hào)括起來(lái)后,寫(xiě)在列名后面,兩者之間使用AS關(guān)鍵字。7.1.5在查詢結(jié)果中添加說(shuō)明字符串在一些查詢中,經(jīng)常需要在查詢結(jié)果中增加一些字符串?!痉独?-6】如要求查詢結(jié)果為:姓名為“張三”的學(xué)生年齡為18等。在SELECT子句中,將要增加的字符串用單引號(hào)括起來(lái),然后和列的名字寫(xiě)在一起,中間用逗號(hào)分隔開(kāi)。在SQLServerManagementStudio查詢窗口中運(yùn)行如下命令:USEwjSELECT'學(xué)生學(xué)號(hào)為:',編號(hào),'學(xué)生姓名為:',姓名,'學(xué)生性別為:',性別,'學(xué)生年齡為:',年齡FROMstudentGO7.1.6使用WHERE子句設(shè)定查詢條件使用WHERE子句可以限制查詢的范圍。通常情況下,必須定義一個(gè)或多個(gè)條件限制查詢選擇的數(shù)據(jù)行。WHERE子句指定邏輯表達(dá)式(返回值為真或假的表達(dá)式),結(jié)果集將返回表達(dá)式為真的數(shù)據(jù)行。在WHERE子句中,可以包含比較運(yùn)算符、邏輯運(yùn)算符。比較運(yùn)算符有=(等于)、<>(不等于)、!=(不等于)、>(大于)、>=(大于等于)、!>(不大于)、<(小于)、<=(小于等于)、!<(不小于)。邏輯運(yùn)算符有AND(與)、QR(或)、NOT(非),用來(lái)連接表達(dá)式。通過(guò)使用比較運(yùn)算符能夠查詢一定的取值范圍。7.1.7使用ORDERBY子句進(jìn)行查詢結(jié)果排序可以使用ORDERBY子句對(duì)查詢結(jié)果重新排序,可以規(guī)定升序(從低到高)或降序(從高到低),方法是使用關(guān)鍵字ASC(升序)或DESC(降序)。如果省略ASC或DESC,系統(tǒng)則默認(rèn)為升序??梢栽贠RDERBY子句中指定多個(gè)列,查詢結(jié)果首先按第1列進(jìn)行排序,對(duì)第1列值相同的那些數(shù)據(jù)行,再按照第2列排序,依此類(lèi)推,ORDERBY子句,要寫(xiě)在WHERE子句的后面。7.1.8使用IN關(guān)鍵字判定查詢結(jié)果范圍在很多情況下,可能存在多個(gè)查詢條件并列的情況,可以使用OR關(guān)鍵字將它們并列連接,也可以使用IN關(guān)鍵字進(jìn)行查詢。這樣比使用兩個(gè)OR運(yùn)算符進(jìn)行查詢更為簡(jiǎn)單,并且易于閱讀和理解。7.1.9使用LIKE關(guān)鍵字判斷相似查詢?cè)趯?shí)際使用中經(jīng)常會(huì)碰到這樣的問(wèn)題:查詢以“黃”開(kāi)頭的學(xué)生,查詢以“01”結(jié)尾的學(xué)生編號(hào),或者查詢第二個(gè)字為“飛”的學(xué)生姓名等。查詢與給定的某些字符串相匹配的數(shù)據(jù)可以使用LIKE關(guān)鍵字。LIKE關(guān)鍵字是一個(gè)匹配運(yùn)算符,它與字符串表達(dá)式相匹配,字符串表達(dá)式由字符串和通配符組成。SQL的4個(gè)通配符為:%百分號(hào),匹配包含0個(gè)或多個(gè)字符的字符串。_下劃線,匹配任何單個(gè)的字符。[]排列通配符,匹配任何在范圍或集合之內(nèi)的單個(gè)字符,例如,[m-p]匹配的是rn、n、o、p單個(gè)字符。[^]不在范圍之內(nèi)的字符,匹配任何不在范圍或集合之內(nèi)的單個(gè)字符,例如[^mnop]或[^m-p]匹配的是除了rn、n、o、p之外的任何字符。7.1.10使用BETWEEN關(guān)鍵字在7.1.6節(jié)中我們學(xué)習(xí)了通過(guò)比較運(yùn)算符的方法查詢一定范圍內(nèi)的查詢結(jié)果。同樣,通過(guò)使用BETWEEN關(guān)鍵字和AND關(guān)鍵字結(jié)合,也可以完成一定范圍的查詢。7.1.11使用COMPUTE子句COMPUTE子句用來(lái)計(jì)算總計(jì)或進(jìn)行分組小計(jì)??傆?jì)值或小計(jì)值將作為附加的新行出現(xiàn)在查詢結(jié)果中。該子句用在WHERE子句之后。7.1.12使用COMPUTEBY子句使用COMPUTE函數(shù)可以對(duì)查詢結(jié)果進(jìn)行簡(jiǎn)單的計(jì)算,而在實(shí)際運(yùn)用中,可以需要對(duì)不同類(lèi)別的查詢結(jié)果進(jìn)行不同的分類(lèi)計(jì)算。7.1.13使用GROUPBY子句查詢結(jié)果能夠使用GROUPBY后指定的列進(jìn)行分組(將相同條件的列聚集在一起),該子句寫(xiě)在WHERE子句的后面。當(dāng)在SELECT子句中包含聚合函數(shù)時(shí),最適合使用GROUPBY子句。SELECT子句中的選項(xiàng)列表中出現(xiàn)的列,包含在聚合函數(shù)中或者包含在GROUPBY子句中,否則,SQLServer將返回如下錯(cuò)誤提示消息:“表名.列名在選擇列表中無(wú)效,因?yàn)樵摿屑炔话诰酆虾瘮?shù)中,也不包含在GROUPBY子句中”。7.1.14HAVING子句HAVING子句用于限定分組或聚合函數(shù)的查詢條件,通過(guò)該子句,能夠把不同特征的查詢結(jié)果更好的區(qū)分開(kāi)來(lái)。該子句常常用在GROUPBY子句之后,在結(jié)果集分組之后再進(jìn)行判斷。7.2使用復(fù)雜查詢?cè)谏弦还?jié)中我們學(xué)習(xí)了簡(jiǎn)單查詢的各種不同形式,同時(shí)學(xué)習(xí)了常見(jiàn)的查詢關(guān)鍵字,在本節(jié)中我們將在此基礎(chǔ)上學(xué)習(xí)相對(duì)復(fù)雜的查詢方式。7.2.1使用嵌套查詢SQLServer允許多層嵌套查詢,即一個(gè)子查詢中還可以嵌套其他子查詢。嵌套查詢一般的求解方法是由里向外進(jìn)行處理,即每個(gè)子查詢?cè)谏弦患?jí)查詢處理之前求解,子查詢的結(jié)果用于建立其父查詢的查找條件。子查詢中所存取的表可以是父查詢役有存取的表,子查詢選出的記錄不顯示。需要特別指出?氖牽硬檠?SELECT語(yǔ)句中不能使用ORDERBY子句,ORDERBY子句只能對(duì)最終查詢結(jié)果排序。子查詢的返回結(jié)果是一個(gè)值的嵌套查詢稱(chēng)為單值嵌套查詢。7.2.2使用UNION關(guān)鍵字進(jìn)行合并查詢UNION運(yùn)算符用于將兩個(gè)或多個(gè)查詢結(jié)果合并成一個(gè)結(jié)果。當(dāng)使用UNION運(yùn)算符時(shí),需要遵循以下兩個(gè)規(guī)則:所有查詢中列數(shù)和列的順序必須相同。所有查詢中按順序?qū)?yīng)列的數(shù)據(jù)類(lèi)型必須兼容。7.3使用連接查詢前面學(xué)習(xí)的內(nèi)容主要是針對(duì)單個(gè)表進(jìn)行的查詢,但在實(shí)際應(yīng)用中,我們往往需要多個(gè)表的共同查詢結(jié)果,這些查詢往往都是表的連接來(lái)完成的,因此本節(jié)我們主要學(xué)習(xí)連接查詢。7.3.1笛卡爾積首先介紹一下笛卡爾積。笛卡爾(Descartes)乘積又叫直積。設(shè)A、B是任意兩個(gè)集合,在集合A中任意取一個(gè)元素x,在集合B中任意取一個(gè)元素y,組成一個(gè)有序?qū)Γ▁,y),把這樣的有序?qū)ψ鳛樾碌脑?,他們的全體組成的集合稱(chēng)為集合A和集合B的笛卡爾積,記為A×B,即A×B={(x,y)|x∈A且y∈B}。例如假設(shè)集合A={a,b},集合B={0,1,2},則兩個(gè)集合的笛卡爾積為{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。7.3.2連接條件對(duì)student表、study表的查詢,需要給出1(N-1,N=2)個(gè)連接條件。student表和study表是通過(guò)編號(hào)進(jìn)行連接的,這兩個(gè)列稱(chēng)為連接列。student表中的編號(hào)一定會(huì)和study表中某個(gè)編號(hào)相等。可將該連接條件表示為:student.編號(hào)=study.編號(hào)。兩個(gè)或兩個(gè)以上的表或視圖查詢連接條件類(lèi)似于此。多表查詢中的表或視圖可以在同一個(gè)數(shù)據(jù)庫(kù)中,也可以來(lái)自不同的數(shù)據(jù)庫(kù)。在FROM子句中最多可使用16個(gè)表或視圖。7.3.3連接分類(lèi)連接的類(lèi)型有內(nèi)連接、外連接和交叉連接。內(nèi)連接是包含滿足連接條件的數(shù)據(jù)行,它主要有自然連接、相等連接、不等值連接等形式。內(nèi)連接是從結(jié)果中刪除其他被連接表中沒(méi)有匹配行的所有行,所以內(nèi)連接可能會(huì)丟失信息。外連接則擴(kuò)充了內(nèi)連接的功能,會(huì)把內(nèi)連接中刪除表源中的一些保留下來(lái),跟據(jù)保留下來(lái)的行不同,把外連接分為左外連接、右外連接和全外連接這3種連接。交叉連接是一種很少使用的連接,兩個(gè)表的交叉連接的結(jié)果集的總行數(shù)等于所連接的兩個(gè)表的行數(shù)相乘,也就是兩個(gè)表進(jìn)行笛卡爾積。在SQLServer中可以使用兩種連接語(yǔ)法形式。一種是ANSI連接語(yǔ)法形式,此時(shí)連接用在FROM子句中。另外一種是使用SQLServer連接語(yǔ)法形式,此時(shí)連接用在WHERE子句中。7.3.4相等連接相等連接是將要連接的列作相等比較后所作的連接,相等連接總會(huì)產(chǎn)生冗余,因?yàn)檫B接的列要顯示兩次。7.3.5自然連接自然連接是將要連接的列作相等比較的連接,但是連接的列只顯示一次。自然連接消除了相等連接產(chǎn)生的冗余。7.3.6有選擇的連接在對(duì)多表查詢時(shí),在指定的連接條件之外也可以包括其他的選擇條件。7.3.7不等值連接所謂不等值連接,是指在連接條件中使用等于運(yùn)算符以外的其他比較運(yùn)算符(>、>=、<=、<、!>、!<、<>)來(lái)比較被連接的列值。7.3.7左外連接外連接分為左外連接(LEFTOUTERJOIN或LEFTJOIN)、右外連接(RIGHTOUTERJOIN或RIGHTJOIN)和全外連接(FULLOUTERJOIN或FULLJOIN)三種。與內(nèi)連接不同的是,外連接不只列出與連接條件相匹配的行,而是列出左表(左外連接時(shí))、右表(右外連接時(shí))或兩個(gè)表(全外連接時(shí))中所有符合搜索條件的數(shù)據(jù)行。7.3.8右外連接右外連接也叫右連接,右外連接與左外連接相對(duì)應(yīng):右外連接首先計(jì)算兩個(gè)表的自然連接,再取出右表中與左表任一數(shù)據(jù)行都不匹配的那些行,用空值填充所有來(lái)自左表的那些列,再把增加的這些行增加到自然連接的結(jié)果集中。右外連接需要在FROM子句中指明:FROM左表名RIGHTJOIN右表名ON連接條件7.3.9全外連接全外連接是用來(lái)包含兩個(gè)表中都不匹配的數(shù)據(jù)行,它完成左外連接和右外連接的操作,包括了左表和右表中所有不滿足條件的行。全外連接的FROM子句為:FROM左表名FULLJOIN右表名ON連接條件7.3.10自連接如果所連接的兩個(gè)表為同一個(gè)表,那么這種連接又稱(chēng)為自連接。自連接能把一個(gè)表中的行和該表中的另外一些行聯(lián)系起來(lái)。7.4數(shù)據(jù)的添加、刪除與修改一個(gè)數(shù)據(jù)庫(kù)能否保持信息的正確性和及時(shí)性,很大程度上依賴(lài)于數(shù)據(jù)庫(kù)的更新功能的強(qiáng)弱與實(shí)時(shí)。數(shù)據(jù)庫(kù)的更新包括數(shù)據(jù)添加、數(shù)據(jù)刪除與數(shù)據(jù)修改三種操作。本章將分別講述如何使用這些操作以便有效地更新數(shù)據(jù)庫(kù)內(nèi)容。7.4.1插入數(shù)據(jù)T-SQL使用INSERT語(yǔ)句向表中添加一個(gè)新記錄,INSERT語(yǔ)句的一般形式是:INSERT{

[TOP(expression)[PERCENT]]

[INTO]

{

[(column_list)]--要插入的列名

[<OUTPUTClause>]

{VALUES({DEFAULT|NULL|expression}[,...n])[,...n

]--要插入的值

|derived_table|execute_statement

|<dml_table_source>|DEFAULTVALUES

}

}}[;]7.4.2修改數(shù)據(jù)T-SQL使用UPDATE語(yǔ)句修改表中已經(jīng)存在的一條或多條記錄,UPDATE語(yǔ)句可以使用WHERE子句來(lái)選擇更新特定的記錄,其一般語(yǔ)法形式如下:UPDATEtable_name--要修改的表名SETcolumn1=value,column2=value2,...--要修改的列值WHEREsome_column=some_value--修改條件7.4.3刪除數(shù)據(jù)T-SQL使用DELETE語(yǔ)句從表中刪除一個(gè)或多個(gè)記錄,WHERE子句用來(lái)選擇要?jiǎng)h除的記錄。DELETE語(yǔ)句的一般語(yǔ)法如下:DELETE[FROM]{table_name|view_name}[WHEREclause]在SQLSELECT語(yǔ)句中可以使用的任何條件都可以在DELECT語(yǔ)句的WHERE子句中使用。7.5游標(biāo)游標(biāo)是類(lèi)似于C語(yǔ)言指針一樣的一種數(shù)據(jù)訪問(wèn)機(jī)制,在SQLServer2008中它是一種數(shù)據(jù)訪問(wèn)機(jī)制,允許用戶訪問(wèn)單獨(dú)的數(shù)據(jù)行,而不是對(duì)整個(gè)行集進(jìn)行操作(通過(guò)使用SELECT、UPDATE或者DELETE語(yǔ)句進(jìn)行)。用戶可以通過(guò)單獨(dú)處理每一行來(lái)逐條收集信息并對(duì)數(shù)據(jù)逐行進(jìn)行操作,從而降低系統(tǒng)開(kāi)銷(xiāo)和潛在的阻隔情況。用戶也可以使用這些數(shù)據(jù)生成SQL代碼并立即執(zhí)行或輸出。用戶也可以使用這些數(shù)據(jù)生成Transact-SQL代碼并立即執(zhí)行或輸出。從另一種角度來(lái)看,游標(biāo)是用戶使用Transact-SQL代碼可能獲得數(shù)據(jù)集中最緊密的數(shù)據(jù)的一種方法。在SQLServer2008中游標(biāo)主要包括游標(biāo)結(jié)果集和游標(biāo)位置兩部分,游標(biāo)結(jié)果集是由定義游標(biāo)的SELECT語(yǔ)句返回行的集合,游標(biāo)位置則是指向這個(gè)結(jié)果集中的某一行的指針。7.5.1聲明游標(biāo)和普通變量的使用一樣,在使用游標(biāo)之前需要先對(duì)游標(biāo)進(jìn)行聲明。聲明游標(biāo)的語(yǔ)法形式為:DECLAREcursornameCURSORFORselect_statament[FOR{READONLY|UPDATE[OFcolumn_name_list[,...]]}]7.5.2打開(kāi)游標(biāo)在實(shí)際通過(guò)游標(biāo)進(jìn)行操作前需要完成游標(biāo)的打開(kāi)操作。打開(kāi)游標(biāo)的語(yǔ)法形式為:OPENcursor_name語(yǔ)句打開(kāi)已被聲明的游標(biāo),分析定義這個(gè)游標(biāo)的select_statement,并使結(jié)果集對(duì)于處理是可用的。其中,cursor_name是一個(gè)已聲明的尚未打開(kāi)的游標(biāo)名。7.5.3檢索游標(biāo)游標(biāo)聲明被打開(kāi)后,游標(biāo)指針位于結(jié)果集的第一行之前,由此可以從結(jié)果集中提取行。SQLServer將沿著游標(biāo)結(jié)果集一行或多行地向下移動(dòng)游標(biāo)指針,不斷提取結(jié)果集中的數(shù)據(jù),并修改和保存游標(biāo)當(dāng)前的位置,直到結(jié)果集中的行全部被提取。讀取游標(biāo)中的數(shù)據(jù)的語(yǔ)法形式如下:FETCH[[NEXT|FRIOR|FIRST|LAST]FROM]cursor_n

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論