數(shù)據(jù)庫SQL ServeSQLite教程 課件 第6、7章 視圖與索引、Transact-SQL應(yīng)用_第1頁
數(shù)據(jù)庫SQL ServeSQLite教程 課件 第6、7章 視圖與索引、Transact-SQL應(yīng)用_第2頁
數(shù)據(jù)庫SQL ServeSQLite教程 課件 第6、7章 視圖與索引、Transact-SQL應(yīng)用_第3頁
數(shù)據(jù)庫SQL ServeSQLite教程 課件 第6、7章 視圖與索引、Transact-SQL應(yīng)用_第4頁
數(shù)據(jù)庫SQL ServeSQLite教程 課件 第6、7章 視圖與索引、Transact-SQL應(yīng)用_第5頁
已閱讀5頁,還剩146頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

數(shù)據(jù)庫SQLServer/SQlite教程授課教師:第6章視圖與索引視圖是關(guān)系數(shù)據(jù)庫系統(tǒng)為用戶提供的從多角度觀察分析數(shù)據(jù)庫中數(shù)據(jù)的一種機(jī)制,通過視圖可以看到自己感興趣的信息。而索引的建立為用戶快速查找所需信息提供了條件,合理使用索引能極大地提高數(shù)據(jù)檢索的速度,提高數(shù)據(jù)庫的性能。第6章

視圖與索引6.1視圖目錄6.2索引6.1視圖視圖(View)是保存在數(shù)據(jù)庫中從一個(gè)或多個(gè)表或視圖中導(dǎo)出由查詢語句定義生成的一個(gè)虛擬表。與真正的數(shù)據(jù)表類似,視圖也是由一組命名的列和數(shù)據(jù)行構(gòu)成的,其結(jié)構(gòu)和數(shù)據(jù)是建立在對(duì)表或視圖查詢的基礎(chǔ)上。數(shù)據(jù)庫只存儲(chǔ)視圖的定義,而不存儲(chǔ)對(duì)應(yīng)的數(shù)據(jù),這些數(shù)據(jù)仍然存儲(chǔ)在導(dǎo)出該視圖的數(shù)據(jù)表中,當(dāng)基本表中的數(shù)據(jù)發(fā)生變化時(shí),從視圖中查詢出來的數(shù)據(jù)也隨之改變。6.1.1

視圖的概念和作用1.視圖的概念視圖由視圖名和視圖定義兩部分組成。例如,涉及學(xué)生的課程和成績等基本信息的數(shù)據(jù)表有學(xué)生信息表student(s#、sname、age、sex、classid)、課程表course(c#、cname、credit)、成績表sc(s#、c#、score),可以在這些表的基礎(chǔ)上定義一個(gè)或多個(gè)視圖,比如學(xué)生選課情況(s#、sname、c#、cname、credit)、學(xué)生學(xué)習(xí)情況(s#、sname、c#、score)等視圖,這些視圖的數(shù)據(jù)仍然存儲(chǔ)在student、sc、course等表中。6.1.1

視圖的概念和作用1.視圖的概念通過視圖來訪問數(shù)據(jù),而不必直接去訪問對(duì)應(yīng)的數(shù)據(jù)表,實(shí)現(xiàn)數(shù)據(jù)從分散到集中,簡化處理,便于共享。對(duì)視圖的一般操作與對(duì)表的操作一樣,可以對(duì)其進(jìn)行查詢、修改、刪除和更新。當(dāng)對(duì)視圖中的數(shù)據(jù)表進(jìn)行修改時(shí),其對(duì)應(yīng)數(shù)據(jù)表的數(shù)據(jù)也會(huì)同步發(fā)生變化,同時(shí)這種變化也自動(dòng)地反映到視圖中。6.1.1

視圖的概念和作用2.視圖的使用及注意事項(xiàng)在創(chuàng)建視圖時(shí),應(yīng)注意以下幾點(diǎn):(1)只能在當(dāng)前數(shù)據(jù)庫中才能創(chuàng)建視圖。在定義視圖時(shí),select子句中不能包含compute或computeby子句。在select子句中使用了top關(guān)鍵字,則可以使用orderby子句。(2)視圖的命名必須遵守標(biāo)識(shí)符命名規(guī)則,不能與表同名,且對(duì)每一個(gè)用戶視圖名必須是唯一的。不能把規(guī)則、默認(rèn)值或觸發(fā)器與視圖相關(guān)聯(lián)。6.1.1

視圖的概念和作用2.視圖的使用及注意事項(xiàng)視圖的作用有以下幾點(diǎn):(1)視圖隱藏了底層的表結(jié)構(gòu),簡化了數(shù)據(jù)訪問操作,客戶端不再需要知道底層表的結(jié)構(gòu)及其之間的關(guān)系。(2)視圖提供了一個(gè)統(tǒng)一訪問數(shù)據(jù)的接口,即可以允許用戶通過視圖訪問數(shù)據(jù)的安全機(jī)制,而不授予用戶直接訪問底層表的權(quán)限。(3)增強(qiáng)了安全性,使用戶只能看到視圖所顯示的數(shù)據(jù)。6.1.1

視圖的概念和作用3.視圖的作用例6-1

使用表student(s#,sname)、sc(s#,c#,score)、course(c#,cname,credit)創(chuàng)建視圖,顯示學(xué)號(hào)、姓名、課程代碼、成績、課程名和學(xué)分等信息。操作步驟如下:(1)在“對(duì)象資源管理器”中展開“數(shù)據(jù)庫”節(jié)點(diǎn),展開要?jiǎng)?chuàng)建視圖的數(shù)據(jù)庫,再展開“視圖”節(jié)點(diǎn),顯示當(dāng)前數(shù)據(jù)庫的所有視圖。右擊“視圖”節(jié)點(diǎn),在彈出的快捷菜單中選擇“新建視圖”命令。6.1.2

視圖的創(chuàng)建、修改及刪除1.創(chuàng)建視圖1)使用菜單方式創(chuàng)建視圖(2)在彈出的“添加表”對(duì)話框中選擇與視圖相關(guān)聯(lián)的表、視圖或函數(shù),可以按住“Ctrl”鍵選擇相應(yīng)的多個(gè)表。選擇完畢后,單擊“添加”按鈕,然后單擊“關(guān)閉”按鈕,如圖6-2所示。6.1.2

視圖的創(chuàng)建、修改及刪除1.創(chuàng)建視圖1)使用菜單方式創(chuàng)建視圖圖6-2添加表對(duì)話框(3)在視圖設(shè)計(jì)器中共有4個(gè)區(qū):表區(qū)、列區(qū)、SQL語句區(qū)和查詢結(jié)果區(qū)。在表區(qū)中選擇創(chuàng)建視圖所需要的列,此時(shí)SQLServer腳本顯示在SQL區(qū),在列區(qū)可以指定別名、排序方式和規(guī)則等。除此之外,在視圖設(shè)計(jì)器的4個(gè)區(qū)中,可以通過右擊空白區(qū)域,在彈出的快捷菜單中選擇有關(guān)選項(xiàng),在彈出的級(jí)聯(lián)菜單中執(zhí)行相應(yīng)的操作。6.1.2

視圖的創(chuàng)建、修改及刪除1.創(chuàng)建視圖1)使用菜單方式創(chuàng)建視圖(4)右擊創(chuàng)建視圖域,在彈出的快捷菜單中選擇“執(zhí)行SQL”命令,或單擊工具欄中的“執(zhí)行”按鈕,在最下面的窗口中顯示視圖對(duì)應(yīng)的結(jié)果集,如圖6-3所示。6.1.2

視圖的創(chuàng)建、修改及刪除1.創(chuàng)建視圖1)使用菜單方式創(chuàng)建視圖圖6-3“創(chuàng)建視圖”選項(xiàng)卡(5)右擊視圖選項(xiàng)卡,在彈出的快捷菜單中選擇“保存視圖”命令(如圖6-4所示),或單擊工具欄中的“保存”按鈕,在彈出的“選擇名稱”窗口中輸入新的視圖的名稱,單擊“確定”按鈕,完成視圖的創(chuàng)建。6.1.2

視圖的創(chuàng)建、修改及刪除1.創(chuàng)建視圖1)使用菜單方式創(chuàng)建視圖圖6-4“保存視圖”快捷菜單使用createview語句創(chuàng)建視圖,其語法格式如下:createview[schemaname.]view_name[(column[,...n])][with<view_attribute>[,...n]]as<select_statement>[withcheckoption]6.1.2

視圖的創(chuàng)建、修改及刪除1.創(chuàng)建視圖2)使用代碼方式創(chuàng)建視圖參數(shù)說明:(1)schemaname是視圖在數(shù)據(jù)庫中所屬架構(gòu)的名稱,如果沒有指定,則視圖屬于默認(rèn)架構(gòu)dbo。view_name是新建視圖的名稱。column是視圖中的列名,如果沒有指定,則列名由select語句指定。6.1.2

視圖的創(chuàng)建、修改及刪除1.創(chuàng)建視圖2)使用代碼方式創(chuàng)建視圖(2)<view_attribute>={[encryption][,schemabinding][,view_metadata]},其中:encryption表示對(duì)視圖進(jìn)行加密。SQLServer為了保護(hù)視圖的定義,使用withencryption子句可以不讓用戶查看視圖的定義文本。schemabinding表示將視圖綁定到底層所應(yīng)用到的表,在select語句中如果包含表、視圖或函數(shù),則表名、視圖名或函數(shù)名前必須有所有者前綴。6.1.2

視圖的創(chuàng)建、修改及刪除1.創(chuàng)建視圖2)使用代碼方式創(chuàng)建視圖指定schemabinding時(shí),不能以影響視圖定義的方式修改表,必須先修改或刪除視圖定義,以刪除要修改的表的依賴關(guān)系。view_metadata表示當(dāng)使用withview_metadata創(chuàng)建視圖時(shí),返回的是視圖的元數(shù)據(jù),否則返回的元數(shù)據(jù)是視圖所引用表的元數(shù)據(jù)。6.1.2

視圖的創(chuàng)建、修改及刪除1.創(chuàng)建視圖2)使用代碼方式創(chuàng)建視圖(3)as指定視圖要執(zhí)行的操作。select_statement是定義視圖的select語句。(4)withcheckoption是附加檢查選項(xiàng),從而保證在對(duì)視圖執(zhí)行數(shù)據(jù)修改后,通過視圖仍可看到這些數(shù)據(jù),否則修改無效。也就是對(duì)視圖上的數(shù)據(jù)的修改都必須符合select語句設(shè)置的條件。6.1.2

視圖的創(chuàng)建、修改及刪除1.創(chuàng)建視圖2)使用代碼方式創(chuàng)建視圖例6-2

使用表student(s#,sname)、sc(s#,c#,score)、course(c#,cname,credit)創(chuàng)建視圖,顯示學(xué)號(hào)、姓名、課程代碼、成績、課程名和學(xué)分等信息。代碼如下:createviewssc_viewasselects.s#,sname,sc.c#,score,cname,creditfromstudents,sc,coursecwheres.s#=sc.s#andsc.c#=c.c#6.1.2

視圖的創(chuàng)建、修改及刪除1.創(chuàng)建視圖2)使用代碼方式創(chuàng)建視圖在默認(rèn)情況下,視圖中的列名和查詢語句中的列名相同,也可以通過createview語句中指定列別名。例6-3

使用表student(s#,sname)、sc(s#,c#,score)、course(c#,cname,credit)創(chuàng)建視圖,并統(tǒng)計(jì)學(xué)生的平均分、課程門數(shù),并在createview語句中指定列的別名。要求視圖包括學(xué)號(hào)、姓名、平均分和課程門數(shù)。代碼如下:createviewssc_view2(學(xué)號(hào),姓名,平均分,課程門數(shù))asselects.s#,sname,avg(score),count(*)fromstudents,sc,coursecwheres.s#=sc.s#andsc.c#=c.c#groupbys.s#,sname6.1.2

視圖的創(chuàng)建、修改及刪除1.創(chuàng)建視圖3)使用別名創(chuàng)建視圖結(jié)果如圖6-5所示。6.1.2

視圖的創(chuàng)建、修改及刪除1.創(chuàng)建視圖3)使用別名創(chuàng)建視圖圖6-5使用別名創(chuàng)建視圖并顯示結(jié)果視圖的使用隔斷了用戶與表之間的聯(lián)系,方便用戶理解。為了防止用戶錯(cuò)誤地插入或修改,在視圖定義時(shí)需要使用到withcheckoption選項(xiàng)。例6-4使用表student(s#,sname,age,sex,classid),創(chuàng)建一個(gè)只包含20180102班的視圖。查詢視圖顯示結(jié)果如圖6-6所示。6.1.2

視圖的創(chuàng)建、修改及刪除1.創(chuàng)建視圖4)使用withcheckoption子句創(chuàng)建視圖圖6-6使用withcheckoption子句創(chuàng)建視圖并顯示結(jié)果代碼如下:createviewstudent_2asselect*fromstudentwhereclassid='20180102'在對(duì)視圖student_2的插入記錄操作中插入一條錯(cuò)誤記錄,如insertstudent_2values('2018010203','呂梅',21,'女','20180101')6.1.2

視圖的創(chuàng)建、修改及刪除1.創(chuàng)建視圖4)使用withcheckoption子句創(chuàng)建視圖操作顯示插入成功(在student表插入了一條記錄)。但是,這樣的插入操作是不正確的。為了防止這種情況的發(fā)生,必須在createview語句中添加withcheckoption選項(xiàng),強(qiáng)制要求通過視圖插入或修改數(shù)據(jù)時(shí)滿足視圖定義中的where條件。上述代碼修改為:createviewstudent_2asselect*fromstudentwhereclassid='20180102'withcheckoption6.1.2

視圖的創(chuàng)建、修改及刪除1.創(chuàng)建視圖4)使用withcheckoption子句創(chuàng)建視圖先刪除視圖student_2,再執(zhí)行上述代碼。再次在對(duì)視圖student_2的插入記錄操作中插入以下記錄:insertstudent_2values('2018010203','呂梅',21,'女','20180101')此次操作后提示“進(jìn)行的插入或更新失敗”。6.1.2

視圖的創(chuàng)建、修改及刪除1.創(chuàng)建視圖4)使用withcheckoption子句創(chuàng)建視圖(1)使用菜單方式修改視圖。在“對(duì)象資源管理器”中展開“數(shù)據(jù)庫”節(jié)點(diǎn),展開相應(yīng)的數(shù)據(jù)庫和視圖節(jié)點(diǎn),右擊視圖,選擇“設(shè)計(jì)”菜單,進(jìn)入視圖設(shè)計(jì)器進(jìn)行必要的修改,修改完成單擊“保存”按鈕即可。(2)使用代碼方式修改視圖。使用alterview語句可以修改視圖。修改視圖與刪除并重新創(chuàng)建視圖是不同的,修改視圖會(huì)保持視圖的權(quán)限不變,但刪除并重新創(chuàng)建視圖則意味著視圖的重新定義。6.1.2

視圖的創(chuàng)建、修改及刪除2.修改、刪除視圖1)視圖的修改例6-5

在當(dāng)前數(shù)據(jù)庫中,修改在例6-4中創(chuàng)建的視圖student_2,添加withencryption選項(xiàng)。代碼如下:alterviewstudent_2withencryptionasselect*fromstudentwhereclassid='20180102'withcheckoption6.1.2

視圖的創(chuàng)建、修改及刪除2.修改、刪除視圖1)視圖的修改視圖并不是數(shù)據(jù)庫中必需的數(shù)據(jù)庫對(duì)象,對(duì)于不需要的視圖可以使用dropview語句將其刪除,刪除視圖后,其所對(duì)應(yīng)的數(shù)據(jù)不會(huì)受到影響。如果有其他數(shù)據(jù)庫對(duì)象使用了該視圖,仍可以刪除該視圖,只是再使用那些數(shù)據(jù)庫對(duì)象時(shí),將會(huì)發(fā)生錯(cuò)誤。(1)使用代碼刪除視圖。例6-6

刪除例6-5中創(chuàng)建的視圖student_2。代碼如下:dropviewstudent_2(2)使用菜單刪除視圖。展開數(shù)據(jù)庫和視圖節(jié)點(diǎn),在要?jiǎng)h除的視圖上右擊鼠標(biāo),在彈出的快捷菜單中選擇“刪除”命令,單擊“確定”按鈕即可刪除視圖。6.1.2

視圖的創(chuàng)建、修改及刪除2.修改、刪除視圖2)視圖的刪除視圖一經(jīng)創(chuàng)建,就可以當(dāng)成表來使用??梢栽诓樵冎惺褂脝蝹€(gè)視圖,也可以使用視圖和表或者視圖與視圖關(guān)聯(lián)查詢。例6-7

使用例6-3中創(chuàng)建的視圖ssc_view2,查詢平均分大于等于75分的學(xué)生信息。代碼如下:select*fromssc_view2where平均分>=756.1.3

視圖的使用6.2索引SQLServer有兩種數(shù)據(jù)存儲(chǔ)文件,分別是數(shù)據(jù)文件和日志文件,其中數(shù)據(jù)文件是以8KB

(8192Byte)的頁面(Page)作為存儲(chǔ)單元,日志文件是以日志記錄作為存儲(chǔ)單元。以數(shù)據(jù)文件為例,從頁面類型、數(shù)據(jù)頁面結(jié)構(gòu)、數(shù)據(jù)頁緩存、盤區(qū)、數(shù)據(jù)訪問等方面入手,討論其存儲(chǔ)格式與方式。6.2.1

SQLServer的數(shù)據(jù)存儲(chǔ)SQlServer定義的頁面類型有8種,如表6-1所示。用戶的數(shù)據(jù)一般存儲(chǔ)在數(shù)據(jù)頁面中,在一個(gè)數(shù)據(jù)頁面中,要知道數(shù)據(jù)如何存放,根據(jù)什么來定位頁面與頁面上的數(shù)據(jù),就要先了解數(shù)據(jù)頁面的結(jié)構(gòu)。6.2.1

SQLServer的數(shù)據(jù)存儲(chǔ)頁面類型內(nèi)容數(shù)據(jù)包含數(shù)據(jù)行除text、ntext和image外的所有數(shù)據(jù)索引索引項(xiàng)文本/圖像text、ntext和image數(shù)據(jù)全局分配映射表、輔助全局分配映射表有關(guān)已分配的擴(kuò)展區(qū)的信息頁的可用空間有關(guān)頁上可用空間的信息索引分配映射表有關(guān)表或索引所使用的擴(kuò)展盤的信息大容量更改映射表有關(guān)自上次執(zhí)行backuplog語句后大容量操作所修改的擴(kuò)展盤區(qū)的信息差異更改映射表有關(guān)自上次執(zhí)行backupdatabase語句后更改的擴(kuò)展盤區(qū)的信息表6-1SQLServer頁面類型1.SQlServer定義的頁面類型在數(shù)據(jù)頁面上,數(shù)據(jù)行緊接著頁首按順序放置,在頁尾有一個(gè)行偏移表。在行偏移表中,頁上的每一行都有一個(gè)條目,每個(gè)條目記錄那一行的第一個(gè)字節(jié)與頁首的距離。頁偏移表中的條目序列與頁中行的序列相反。數(shù)據(jù)頁面的結(jié)構(gòu)如圖6-7所示。數(shù)據(jù)頁面頁首96個(gè)字節(jié)保存著頁面的系統(tǒng)信息,如頁的類型、頁的可用空間量、擁有頁的對(duì)象的ID及該頁面屬于哪個(gè)物理文件。數(shù)據(jù)區(qū)則對(duì)應(yīng)于圖6-7中所有數(shù)據(jù)行的總區(qū)域,存放真正的數(shù)據(jù)。行偏移數(shù)組用于記錄該數(shù)據(jù)頁面中每個(gè)數(shù)據(jù)區(qū)在數(shù)據(jù)頁面所處的相對(duì)位置,便于定位和檢索每個(gè)數(shù)據(jù)區(qū)在數(shù)據(jù)頁面中的位置,數(shù)組中每個(gè)記錄占兩個(gè)字節(jié)。6.2.1

SQLServer的數(shù)據(jù)存儲(chǔ)2.數(shù)據(jù)頁面結(jié)構(gòu)6.2.1

SQLServer的數(shù)據(jù)存儲(chǔ)2.數(shù)據(jù)頁面結(jié)構(gòu)圖6-7SQLServer數(shù)據(jù)頁SQLServer數(shù)據(jù)庫的主要用途是存儲(chǔ)和檢索數(shù)據(jù),因此密集型磁盤I/O是數(shù)據(jù)庫引擎的一大特點(diǎn)。由于完成磁盤I/O需要消耗許多資源且耗時(shí)較長,因此SQLServer側(cè)重于提高I/O效率。緩沖區(qū)管理是實(shí)現(xiàn)高效I/O的關(guān)鍵環(huán)節(jié),一個(gè)緩沖區(qū)就是一個(gè)8KB大小的內(nèi)存頁,其大小與一個(gè)數(shù)據(jù)頁或索引頁相當(dāng),因此緩沖區(qū)高速緩存被劃分為多個(gè)8KB頁。緩沖區(qū)管理器負(fù)責(zé)將數(shù)據(jù)頁或索引頁從數(shù)據(jù)庫磁盤文件讀入緩沖區(qū)高速緩存中,并將修改后的頁寫回磁盤。6.2.1

SQLServer的數(shù)據(jù)存儲(chǔ)3.數(shù)據(jù)頁緩存SQLServer默認(rèn)的存儲(chǔ)分配單位是盤區(qū)。為了避免頻繁地讀寫I/O,在表或其他對(duì)象分配存儲(chǔ)空間時(shí),不是直接分配一個(gè)8KB的頁面,而是以一個(gè)盤區(qū)(Extent)為存儲(chǔ)分配單位,一個(gè)盤區(qū)為8個(gè)頁面(8×8KB=64KB)。SQLServer定義了兩種盤區(qū)類型:統(tǒng)一盤區(qū)和混合盤區(qū)。統(tǒng)一盤區(qū)只能存放同一對(duì)象,該對(duì)象擁有這個(gè)盤區(qū)的所有頁面。混合盤區(qū)由多個(gè)對(duì)象共同擁有該盤區(qū)。在為對(duì)象分配存儲(chǔ)盤區(qū)時(shí),為了提高空間利用率,默認(rèn)情況下,如果一個(gè)對(duì)象初始大小小于8個(gè)頁面,就盡量放在混合盤區(qū),當(dāng)該對(duì)象大小增加到8個(gè)頁面后,SQLServer會(huì)為這個(gè)對(duì)象重新分配一個(gè)統(tǒng)一盤區(qū)。6.2.1

SQLServer的數(shù)據(jù)存儲(chǔ)4.盤區(qū)系統(tǒng)訪問表中的數(shù)據(jù)時(shí),可以采用表掃描和索引查找兩種方式。如果對(duì)數(shù)據(jù)頁上的數(shù)據(jù)進(jìn)行訪問,一維升序或降序數(shù)據(jù)序列可以采用兩分檢索的方法迅速找到需要插入或刪除元素的位置。但當(dāng)采用順序存儲(chǔ)的方式時(shí),插入一個(gè)元素,需要將其下面的數(shù)據(jù)進(jìn)行后移,反之刪除一個(gè)元素,需要將其下面的數(shù)據(jù)進(jìn)行前移。為避免大量的數(shù)據(jù)移動(dòng),提高插入或刪除的工作效率,研究者提出了多種解決方案,其中B樹是較好的一種方案。6.2.1

SQLServer的數(shù)據(jù)存儲(chǔ)5.數(shù)據(jù)訪問B樹是由一系列節(jié)點(diǎn)所構(gòu)成,它的每一個(gè)節(jié)點(diǎn)均由2M個(gè)數(shù)據(jù)域和2M+1個(gè)指針域構(gòu)成,每個(gè)節(jié)點(diǎn)的數(shù)據(jù)從左向右升序排列。一般情況下,B樹的每個(gè)節(jié)點(diǎn)中的數(shù)據(jù)域不一定存滿數(shù)據(jù),但基本上每個(gè)節(jié)點(diǎn)存放的數(shù)據(jù)個(gè)數(shù)大于B樹M個(gè),如圖6-8所示。6.2.1

SQLServer的數(shù)據(jù)存儲(chǔ)5.數(shù)據(jù)訪問圖6-8B樹示例(節(jié)點(diǎn)數(shù)據(jù)的關(guān)系)B樹中父節(jié)點(diǎn)與子節(jié)點(diǎn)中的數(shù)據(jù)之間具有以下關(guān)系:父節(jié)點(diǎn)中每一數(shù)據(jù)域中存放的數(shù)據(jù),均大于該數(shù)據(jù)域左側(cè)指針指向的子節(jié)點(diǎn)中的所有數(shù)據(jù),也小于該數(shù)據(jù)域右側(cè)指針指向子節(jié)點(diǎn)中的所有數(shù)據(jù)。如圖6-8所示,為建立一棵B樹,需要將一個(gè)個(gè)的數(shù)據(jù)插入其中。當(dāng)查詢到插入位置,發(fā)現(xiàn)該節(jié)點(diǎn)已填滿數(shù)據(jù)時(shí),需要進(jìn)行節(jié)點(diǎn)的分割,如圖6-9所示。6.2.1

SQLServer的數(shù)據(jù)存儲(chǔ)5.數(shù)據(jù)訪問圖6-9B樹示例(節(jié)點(diǎn)分割)用戶對(duì)數(shù)據(jù)庫最頻繁的操作是進(jìn)行數(shù)據(jù)查詢。一般地,查詢操作時(shí)需要對(duì)整個(gè)表進(jìn)行數(shù)據(jù)搜索,當(dāng)表中數(shù)據(jù)很多時(shí),搜索數(shù)據(jù)需要的時(shí)間比較長,這就會(huì)造成服務(wù)器資源的浪費(fèi)。為了提高檢索的能力,引入了索引機(jī)制。6.2.1

SQLServer的數(shù)據(jù)存儲(chǔ)5.數(shù)據(jù)訪問索引(Index)是SQLServer在列上建立的一種數(shù)據(jù)庫對(duì)象。它保存著表中排序的索引列,并記錄索引列在表中的物理存儲(chǔ)位置,從而實(shí)現(xiàn)表中數(shù)據(jù)的邏輯排序。一張表的存儲(chǔ)是由數(shù)據(jù)頁面和索引頁面組成的。索引就存放在索引頁面上,當(dāng)進(jìn)行數(shù)據(jù)檢索時(shí)系統(tǒng)先搜索索引頁面,從中找到所需數(shù)據(jù)的指針,再通過指針從數(shù)據(jù)頁面中讀取數(shù)據(jù)。利用索引可以加快數(shù)據(jù)檢索的速度,提升系統(tǒng)的性能。6.2.2

索引及其創(chuàng)建與刪除1.索引的概念對(duì)于索引類型的劃分有多種,通常根據(jù)索引對(duì)表中記錄順序的影響分類,可以分為聚集索引和非聚集索引。此外,還有唯一索引與非唯一索引、單列索引與多列索引等分類。下面主要介紹聚集索引和非聚集索引。6.2.2

索引及其創(chuàng)建與刪除2.索引的類型1)2)聚集索引非聚集索引聚集索引(ClusteredIndex)是指表中的數(shù)據(jù)記錄實(shí)際存儲(chǔ)的次序與索引中相對(duì)應(yīng)的鍵值的實(shí)際存儲(chǔ)次序完全相同的索引。也就是說,聚集索引將對(duì)表中的物理數(shù)據(jù)頁中的數(shù)據(jù)按列進(jìn)行排序,然后再存儲(chǔ)到磁盤上。聚集索引與數(shù)據(jù)是融為一體的,因此聚集索引查找數(shù)據(jù)最快。當(dāng)然,一個(gè)表只能有一個(gè)聚集索引。比如設(shè)置主鍵,系統(tǒng)自動(dòng)創(chuàng)建一個(gè)聚集索引。6.2.2

索引及其創(chuàng)建與刪除2.索引的類型1)聚集索引非聚集索引(NonclusteredIndex)是指表中的數(shù)據(jù)記錄實(shí)際存儲(chǔ)的次序與索引中相對(duì)應(yīng)的鍵值的實(shí)際存儲(chǔ)次序不相同的索引。也就是說,表中的數(shù)據(jù)不是按照索引列排序的,使用索引頁存儲(chǔ),比聚集索引占用更多的存儲(chǔ)空間,檢索效率也較低。一個(gè)表中可以同時(shí)有聚集索引和非聚集索引,而且一個(gè)表可以有多個(gè)非聚集索引,但是一個(gè)表中最多不超過250個(gè)索引。非聚集索引將行定位器按關(guān)鍵字的值用一定的方法排序,這個(gè)順序與表的行在數(shù)據(jù)頁中的排序是不匹配的,在非聚集索引創(chuàng)建之前創(chuàng)建聚集索引,否則會(huì)引發(fā)索引重建。6.2.2

索引及其創(chuàng)建與刪除2.索引的類型2)非聚集索引索引的創(chuàng)建分為直接方式和間接方式兩種。直接方式就是使用命令或工具直接創(chuàng)建索引;間接方式就是在創(chuàng)建其他對(duì)象時(shí)附帶創(chuàng)建了索引,例如在設(shè)置主鍵約束或唯一性約束時(shí),系統(tǒng)將自動(dòng)創(chuàng)建索引。這里重點(diǎn)介紹直接創(chuàng)建索引的方法。6.2.2

索引及其創(chuàng)建與刪除3.索引的創(chuàng)建與刪除例6-8

在books表為bookid列創(chuàng)建聚集索引,索引名為Ix_books_bookid。操作步驟如下:(1)在“對(duì)象資源管理器”中展開數(shù)據(jù)庫節(jié)點(diǎn)和表節(jié)點(diǎn),右擊“索引”節(jié)點(diǎn),在彈出的快捷菜單中選擇“新建索引”命令,彈出“新建索引”對(duì)話框。(2)在“新建索引”對(duì)話框中進(jìn)行設(shè)置。單擊“常規(guī)”選項(xiàng),在“索引名稱”框中輸入名稱,在“索引類型”框中選擇“聚集”,單擊“添加”按鈕,在彈出的“從表dbo.books中選擇列”對(duì)話框中選中bookid列前面的復(fù)選框,單擊“確定”按鈕,返回“新建索引”對(duì)話框,如圖6-10所示。(3)單擊“確定”按鈕,完成聚集索引的創(chuàng)建。6.2.2

索引及其創(chuàng)建與刪除3.索引的創(chuàng)建與刪除1)使用菜單方式創(chuàng)建/修改/刪除索引6.2.2

索引及其創(chuàng)建與刪除3.索引的創(chuàng)建與刪除1)使用菜單方式創(chuàng)建/修改/刪除索引圖6-10“新建索引”對(duì)話框例6-9

在表sc的s#列已創(chuàng)建聚集索引Ix_sc_s#,要求修改該索引,使索引設(shè)置在s#和c#列上,索引名改為Ix_sc_s#c#。操作步驟如下:(1)在“對(duì)象資源管理器”中展開“數(shù)據(jù)庫”節(jié)點(diǎn)和“表”節(jié)點(diǎn),再展開sc表節(jié)點(diǎn),展開“索引”節(jié)點(diǎn),右擊“Ix_sc_s#(聚集)”,在彈出的快捷菜單中選擇“屬性”命令,彈出“索引屬性”對(duì)話框。6.2.2

索引及其創(chuàng)建與刪除3.索引的創(chuàng)建與刪除1)使用菜單方式創(chuàng)建/修改/刪除索引(2)“索引屬性”對(duì)話框中進(jìn)行相應(yīng)設(shè)置。在“常規(guī)”選項(xiàng)中單擊“添加”按鈕,在彈出的“從dbo.sc中選擇列”對(duì)話框中同時(shí)選中s#列和c#列前面的復(fù)選框,如圖6-11所示。單擊“確定”按鈕,返回“索引屬性”對(duì)話框。(3)單擊“確定”按鈕,完成聚集索引的修改。注意:該聚集索引是直接創(chuàng)建的,如果是設(shè)置主鍵附加的聚集索引,則不能手動(dòng)刪除索引,在修改主鍵約束的同時(shí)重新創(chuàng)建索引。6.2.2

索引及其創(chuàng)建與刪除3.索引的創(chuàng)建與刪除1)使用菜單方式創(chuàng)建/修改/刪除索引6.2.2

索引及其創(chuàng)建與刪除3.索引的創(chuàng)建與刪除1)使用菜單方式創(chuàng)建/修改/刪除索引圖6-11“修改索引-添加列”對(duì)話框例6-10

在表studinfo的email列上創(chuàng)建一個(gè)唯一的非聚集索引,該列的email值是不重復(fù)的,索引名為Ix_studinfo_email,該索引建立在文件組filegroup1上,該索引的中間節(jié)點(diǎn)和葉級(jí)節(jié)點(diǎn)的填滿度均為60%。6.2.2

索引及其創(chuàng)建與刪除3.索引的創(chuàng)建與刪除1)使用菜單方式創(chuàng)建/修改/刪除索引操作步驟如下:(1)在“對(duì)象資源管理器”中展開“數(shù)據(jù)庫”節(jié)點(diǎn)和“表”節(jié)點(diǎn),再展開studinfo表節(jié)點(diǎn),右擊“索引”節(jié)點(diǎn),在彈出的快捷菜單中選擇“新建索引”命令,彈出“新建索引”對(duì)話框。在“新建索引”對(duì)話框中進(jìn)行設(shè)置。(2)單擊“常規(guī)”選項(xiàng),在“索引名稱”框中輸入名稱,在“索引類型”框中選擇“非聚集”,勾選“唯一”復(fù)選框,單擊“添加”按鈕,在彈出的“從dbo.studinfo中選擇對(duì)話框中選中email列前面的復(fù)選框,單擊“確定”按鈕,返回“新建索引”對(duì)話框。6.2.2

索引及其創(chuàng)建與刪除3.索引的創(chuàng)建與刪除1)使用菜單方式創(chuàng)建/修改/刪除索引(3)單擊“選項(xiàng)”選項(xiàng),勾選“設(shè)置填充因子”復(fù)選框,在后面的列表框中輸入60勾選“填充索引”復(fù)選框,如圖6-12所示。(4)單擊“存儲(chǔ)”選項(xiàng),在“文件組”下拉列表中選擇“filegroup1”。單擊“確定”按鈕,完成唯一的非聚集索引的創(chuàng)建。6.2.2

索引及其創(chuàng)建與刪除3.索引的創(chuàng)建與刪除1)使用菜單方式創(chuàng)建/修改/刪除索引圖6-12“新建索引”對(duì)話框例6-11

刪除在表studinfo的email列上創(chuàng)建的非聚集索引,該列的索引名為Ix_studinfo_email。操作步驟如下:(1)在“對(duì)象資源管理器”中展開“數(shù)據(jù)庫”節(jié)點(diǎn)和“表”節(jié)點(diǎn),再展開studinfo表節(jié)點(diǎn),然后再展開“索引”節(jié)點(diǎn),右擊Ix_studinfo_email索引節(jié)點(diǎn),在彈出的快捷菜單中選擇“刪除”命令,彈出“刪除索引”對(duì)話框。(2)單擊“確定”按鈕,完成索引的刪除。6.2.2

索引及其創(chuàng)建與刪除3.索引的創(chuàng)建與刪除1)使用菜單方式創(chuàng)建/修改/刪除索引(1)索引的創(chuàng)建。使用createindex命令創(chuàng)建索引,語法格式如下:create[unique][clustered|nonclustered]indexindexnameon{tablename|viewname}(column[asc|desc][,...n])[with(<indexoption>[,...n])][onfilegroup]6.2.2

索引及其創(chuàng)建與刪除3.索引的創(chuàng)建與刪除2)使用代碼方式創(chuàng)建/重新生成索引/刪除索引參數(shù)說明:①unique是指創(chuàng)建唯一索引,clustered是指創(chuàng)建聚集索引,nonclustered是指創(chuàng)建非聚集索引。indexname是索引名稱引所在的視圖的名稱。注意:只有使用schemabinding定義的視圖才能在視圖上創(chuàng)建索引,并且在視圖上必須創(chuàng)建了唯一聚集索引之后,才能在視圖上創(chuàng)建非聚集索引。column是應(yīng)用索引的列,可以是一列或多列。asc|desc是指指定索引列的升序或降序方式,默認(rèn)值為asc。②onfilegroup是指將索引存放在指定的文件組中。6.2.2

索引及其創(chuàng)建與刪除3.索引的創(chuàng)建與刪除2)使用代碼方式創(chuàng)建/重新生成索引/刪除索引③<indexoption>={pad_index={on|off}|fillfactor=fillfactor|sort_in_tempdb={on|off}|ignore_dup_key={on|off}|statistics_norecompute={on|off}|drop_existing={on|off}},其中:indexoption是索引屬性。pad_index用于指定索引填充,默認(rèn)值為off。fillfactor用于指定填充因子,即索引頁葉級(jí)的填滿程度,即數(shù)據(jù)占索引頁大小的百分比,取值范圍為1~100。6.2.2

索引及其創(chuàng)建與刪除3.索引的創(chuàng)建與刪除2)使用代碼方式創(chuàng)建/重新生成索引/刪除索引sort_in_tempdb用于指定是否在tempdb中存儲(chǔ)臨時(shí)排序結(jié)果,默認(rèn)值為off。ignore_dup_key用于指定對(duì)唯一聚集索引或唯一非聚集索引執(zhí)行多行插入操作時(shí)出現(xiàn)重復(fù)鍵值的錯(cuò)誤響應(yīng),默認(rèn)值為off。statistics_norecompute用于指定是否重新計(jì)算分發(fā)統(tǒng)計(jì)信息,默認(rèn)值為off。drop_existing用于指定應(yīng)刪除并重新生成已索引,默認(rèn)值為off。6.2.2

索引及其創(chuàng)建與刪除3.索引的創(chuàng)建與刪除2)使用代碼方式創(chuàng)建/重新生成索引/刪除索引例6-12

在books表為isbn列創(chuàng)建一個(gè)唯一的非聚集索引,索引名為ix_books_isbn。代碼如下:createuniquenonclusteredindexix_books_isbnonbooks(isbn)例6-13

在customers表中為customerid列創(chuàng)建一個(gè)聚集索引,該索引的中間結(jié)點(diǎn)和葉級(jí)結(jié)點(diǎn)的填滿度均為60%,并將該索引創(chuàng)建在文件組filegroup1。代碼如下:createclusteredindexix_customers_customeridoncustomers(customerid)with(fillfactor=60,pad_index=on)onfilegroup16.2.2

索引及其創(chuàng)建與刪除3.索引的創(chuàng)建與刪除2)使用代碼方式創(chuàng)建/重新生成索引/刪除索引例6-14

在sc表中,為s#和c#兩列的組合創(chuàng)建聚集索引,索引名為ix_sc_s#c#,如果已經(jīng)存在名為ix_sc_s#c#的索引,則在創(chuàng)建索引的同時(shí)刪除已經(jīng)存在的同名索引。代碼如下:createclusteredindexix_sc_s#c#onsc(s#,c#)with(drop_existing=on)6.2.2

索引及其創(chuàng)建與刪除3.索引的創(chuàng)建與刪除2)使用代碼方式創(chuàng)建/重新生成索引/刪除索引(2)重新生成索引。重新生成索引將根據(jù)指定的或現(xiàn)有的填充因子設(shè)置壓縮頁來刪除碎片、回收磁盤空間,然后對(duì)連接頁中的索引行重新排序。重新生成索引將會(huì)刪除并重新創(chuàng)建索引。用alterindex命令可重新生成索引或禁用索引,語法格式如下:alterindex{indexname|all}on<object>{rebuild[with(<rebuildindexoption>[,...n])]|disable}6.2.2

索引及其創(chuàng)建與刪除3.索引的創(chuàng)建與刪除2)使用代碼方式創(chuàng)建/重新生成索引/刪除索引參數(shù)說明:①indexname是索引的名稱,all是指定與表或視圖相關(guān)聯(lián)的所有索引,object是指重建索引的表的名稱。②rebuild[with(<rebuildindexoption>[,...n])]是指定將使用相同的列、索引類型、唯一性屬性和排序順序重新生成索引,其中:<rebuildindexoption>={pad_index={on|off}|fillfactor=fillfactor|sort_in_tempdb={on|off}|ignore_dup_key={on|off}|statistics_norecompute={on|off}}③<rebuildindexoption>和<indexoption>的選項(xiàng)的含義相同。disable是將索引標(biāo)記為已禁用,任何索引均可被禁用。6.2.2

索引及其創(chuàng)建與刪除3.索引的創(chuàng)建與刪除2)使用代碼方式創(chuàng)建/重新生成索引/刪除索引例6-15

將表sc的索引文件Ix_sc_s#重新生成。代碼如下:alterindexIx_sc_s#c#onscrebuild例6-16

將books表的所有索引文件重新生成,索引的葉級(jí)節(jié)點(diǎn)的填滿度均設(shè)為70%,在tempdb中存儲(chǔ)臨時(shí)排序結(jié)果,但不自動(dòng)重新計(jì)算過時(shí)的統(tǒng)計(jì)信息。代碼如下:alterindexallonbooksrebuildwith(fillfactor=70,sort_in_tempdb=on,statistics_norecompute=on)6.2.2

索引及其創(chuàng)建與刪除3.索引的創(chuàng)建與刪除2)使用代碼方式創(chuàng)建/重新生成索引/刪除索引(3)刪除索引。當(dāng)不需要某個(gè)索引時(shí),可以用dropindex命令將它從數(shù)據(jù)庫中刪除。刪除索引可以收回索引所占用的存儲(chǔ)空間。不能用dropindex命令刪除由primarykey約束或unique約束創(chuàng)建的索引。①使用命令方式刪除索引。使用dropindex命令的語法格式如下:dropindex<table_name>.<index_name>參數(shù)說明:table_name是索引所在的表的名稱。index_name是要?jiǎng)h除的索引的名稱。6.2.2

索引及其創(chuàng)建與刪除3.索引的創(chuàng)建與刪除2)使用代碼方式創(chuàng)建/重新生成索引/刪除索引例6-17

刪除bookds表中的索引文件Ix_books_isbn。代碼如下:dropindexbooks.Ix_books_isbn②使用菜單方式重新生成或刪除索引。在表中直接創(chuàng)建的索引,可以重新生成或刪除。但是,在刪除聚集索引時(shí),表中的所有非聚集索引都將重建。例6-18

使用菜單方式重新生成或刪除books表中的索引文件Ix_books_isbn。6.2.2

索引及其創(chuàng)建與刪除3.索引的創(chuàng)建與刪除2)使用代碼方式創(chuàng)建/重新生成索引/刪除索引操作步驟如下:(1)在“對(duì)象資源管理器”中展開“數(shù)據(jù)庫”節(jié)點(diǎn)和“表”節(jié)點(diǎn),再展開books表節(jié)點(diǎn),然后再展開“索引”節(jié)點(diǎn),在文件名“Ix_books_isbn...”上右擊鼠標(biāo),在彈出的快捷菜單中選擇“重新生成”或“刪除”命令,彈出“重新生成索引”或“刪除對(duì)象”對(duì)話框,如圖6-13所示。(2)單擊“確定”按鈕,完成重新生成索引或刪除索引。6.2.2

索引及其創(chuàng)建與刪除3.索引的創(chuàng)建與刪除2)使用代碼方式創(chuàng)建/重新生成索引/刪除索引6.2.2

索引及其創(chuàng)建與刪除3.索引的創(chuàng)建與刪除2)使用代碼方式創(chuàng)建/重新生成索引/刪除索引圖6-13“重新生成/刪除”快捷菜單習(xí)題1.使用菜單方式創(chuàng)建視圖時(shí),單擊“新建視圖”命令,彈出

對(duì)話框。2.在數(shù)據(jù)頁面上,數(shù)據(jù)行緊接著

按順序放置,在頁尾有一個(gè)

偏移表,在數(shù)據(jù)區(qū)則存放真正的

。3.SQLServer默認(rèn)的存儲(chǔ)分配單位是盤區(qū),又分

,其中

只能存放同一對(duì)象,該對(duì)象擁有這個(gè)盤區(qū)的所有頁面。一、填空題1.對(duì)視圖的一般操作也有查詢、修改、刪除和更新。2.為了防止用戶不正確地插入或修改,在視圖定義時(shí)需要使用到withcheckoption選項(xiàng)。3.在查詢中,可以使用單個(gè)視圖,也可以使用視圖和表或者視圖與視圖關(guān)聯(lián)查詢。4.索引(Index)是SQLServer在數(shù)據(jù)行上建立的一種數(shù)據(jù)庫對(duì)象。(判斷題剩余習(xí)題見教材132頁)習(xí)題二、判斷題(

)(

)(

)(

)習(xí)題1.關(guān)于視圖,正確的說法有(

)。A.視圖由查詢語句定義生成的一個(gè)虛擬表。B.與真正的數(shù)據(jù)表類似,視圖也是由一組命名的列和數(shù)據(jù)行構(gòu)成的。C.數(shù)據(jù)庫只存儲(chǔ)視圖的定義,而不存儲(chǔ)對(duì)應(yīng)的數(shù)據(jù)。D.當(dāng)表中的數(shù)據(jù)發(fā)生變化時(shí),從視圖中查詢出來的數(shù)據(jù)也隨之改變。2.在視圖設(shè)計(jì)器中顯示的區(qū)域有(

)。A.表區(qū)

B.列區(qū)

C.SQL語句區(qū)

D.查詢結(jié)果區(qū)三、選擇題習(xí)題1.使用表student(s#,sname)、sc(s#,c#,score)、course(c#,cname,credit)創(chuàng)建視圖,顯示學(xué)號(hào)、姓名、課程代碼、成績、課程名和學(xué)分等信息。2.使用表student(s#,sname)、sc(s#,c#,score)、course(c#,cname,credit)創(chuàng)建視圖,并統(tǒng)計(jì)學(xué)生的平均分、課程門數(shù),并在createview語句中指定列的別名。(操作題詳情見教材132頁)四、操作題習(xí)題1.使用表student(s#,sname,age,sex,classid),創(chuàng)建一個(gè)只包含20180102班的視圖,并添加check選項(xiàng)。2.在books表為isbn列創(chuàng)建一個(gè)唯一的非聚集索引,索引名為ix_books_isbn。五、實(shí)踐題【謝謝觀看】謝謝觀看數(shù)據(jù)庫SQLServer/SQlite教程授課教師:第7章Transact-SQL應(yīng)用Transact-SQL簡稱T-SQL,是標(biāo)準(zhǔn)SQL語言的增強(qiáng)版。它對(duì)SQL-92標(biāo)準(zhǔn)進(jìn)行了幾種擴(kuò)展以增強(qiáng)其性能,為處理大量數(shù)據(jù)提供必要的結(jié)構(gòu)化處理能力,并作為應(yīng)用程序與SQL

Server溝通的主要語言。T-SQL提供標(biāo)準(zhǔn)SQL的數(shù)據(jù)定義、操作和控制的功能,加上延伸的函數(shù)、系統(tǒng)預(yù)存程序以及程序設(shè)計(jì)結(jié)構(gòu),讓程序設(shè)計(jì)更有彈性。第7章

Transact-SQL應(yīng)用7.1T-SQL運(yùn)算符與表達(dá)式目錄7.2T-SQL的變量7.3程序控制語句7.4自定義函數(shù)7.1T-SQL運(yùn)算符與表達(dá)式運(yùn)算符是一種符號(hào),用來指定在一個(gè)或多個(gè)表達(dá)式中執(zhí)行的操作。SQLServer2008R2的運(yùn)算符有算術(shù)運(yùn)算符、位運(yùn)算符、比較運(yùn)算符、邏輯運(yùn)算符、字符串連接運(yùn)算符、賦值運(yùn)算符等。7.1T-SQL運(yùn)算符與表達(dá)式1.算術(shù)運(yùn)算符2.位運(yùn)算符3.比較運(yùn)算符4.邏輯運(yùn)算符5.字符串連接運(yùn)算符6.賦值運(yùn)算符算術(shù)運(yùn)算符在兩個(gè)表達(dá)式間執(zhí)行數(shù)學(xué)運(yùn)算,這兩個(gè)表達(dá)式可以是任何數(shù)字?jǐn)?shù)據(jù)類型。算術(shù)運(yùn)算符有+(加)、-(減)、*(乘)、/(除)和%(求模)5種運(yùn)算。+(加)和-(減)運(yùn)算符也可用于對(duì)datetime及smalldatetime值進(jìn)行算術(shù)運(yùn)算。7.1T-SQL運(yùn)算符與表達(dá)式1.算術(shù)運(yùn)算符2.位運(yùn)算符位運(yùn)算符用于對(duì)兩個(gè)表達(dá)式進(jìn)行的位操作,這兩個(gè)表達(dá)式可為整型或與整型兼容的數(shù)據(jù)類型。位運(yùn)算符及其規(guī)則如表7-1所示。SQL中的位運(yùn)算不但可以取出各種值,而且還可以對(duì)數(shù)據(jù)進(jìn)行排序。7.1T-SQL運(yùn)算符與表達(dá)式運(yùn)算符運(yùn)算符名稱運(yùn)算規(guī)則&按位與兩個(gè)位均為1時(shí),結(jié)果為1,否則為0丨按位或只要一個(gè)位為1,結(jié)果為1,否則為0^按位異或兩個(gè)位值不同時(shí),結(jié)果為1,否則為0表7-1位運(yùn)算符及規(guī)則2.位運(yùn)算符以&為例,&是二進(jìn)制“與”運(yùn)算,參加運(yùn)算的兩個(gè)數(shù)的二進(jìn)制按位進(jìn)行運(yùn)算,運(yùn)算的規(guī)律是:0&0=0,0&1=0,1&0=0,1&1=1。對(duì)于參加運(yùn)算的數(shù)要換算為二進(jìn)制進(jìn)行運(yùn)算,例如,3&2的結(jié)果是2,運(yùn)算過程是:3&2=0111&0010=0010=2。例7-1

聲明兩個(gè)局部變量并賦值,求它們的位運(yùn)算。declare@aint,@bintselect@a=7,@b=4select@a&@bas'a&b',@a|@bas'a|b',@a^@bas'a^b'顯示結(jié)果為:4、7、3。7.1T-SQL運(yùn)算符與表達(dá)式比較運(yùn)算符用于測(cè)試兩個(gè)表達(dá)式的值是否相同,運(yùn)算結(jié)果為“true”或“false”。比較運(yùn)算符及名稱如表7-2所示。7.1T-SQL運(yùn)算符與表達(dá)式3.比較運(yùn)算符運(yùn)算符運(yùn)算名稱運(yùn)算符運(yùn)算名稱=相等<=小于或等于>大于<>、?。讲坏扔冢夹∮冢。疾恍∮冢荆酱笥诨虻扔冢。静淮笥诒?-2比較運(yùn)算符及名稱邏輯運(yùn)算符用于對(duì)某個(gè)條件進(jìn)行測(cè)試,運(yùn)算結(jié)果為“true”或“false”,邏輯運(yùn)算符及規(guī)則如表7-3所示。7.1T-SQL運(yùn)算符與表達(dá)式運(yùn)算符運(yùn)算名稱and如果兩個(gè)操作數(shù)都為“true”,則運(yùn)算結(jié)果為“true”or如果兩個(gè)操作數(shù)中有一個(gè)為“true”,則運(yùn)算結(jié)果為“true”not若一個(gè)操作值為“true”,則運(yùn)算結(jié)果為“false”,否則為“true”all如果兩個(gè)操作數(shù)值都為“true”,則運(yùn)算結(jié)果為“true”any如果在一系列操作數(shù)中只要有一個(gè)為“true”,則運(yùn)算結(jié)果為“true”between如果兩個(gè)操作數(shù)在指定的范圍內(nèi),則運(yùn)算結(jié)果為“true”exists如果子查詢包含一些行,則運(yùn)算結(jié)果為“true”in如果操作數(shù)值等于表達(dá)式列表中的一個(gè),則運(yùn)算結(jié)果為“true”like如果操作數(shù)與一種模式相匹配,則運(yùn)算結(jié)果為“true”some如果在一系列操作數(shù)中有些值為“true”,則運(yùn)算結(jié)果為“true”表7-3邏輯運(yùn)算符及規(guī)則4.邏輯運(yùn)算符字符串連接運(yùn)算符通過運(yùn)算符“+”實(shí)現(xiàn)兩個(gè)或多個(gè)字符串的連接運(yùn)算。例7-2

執(zhí)行下面的語句連接多個(gè)字符串。運(yùn)算結(jié)果為“abcdefghijk”。select('ab'+'cdefg'+'hijk')as字符串連接7.1T-SQL運(yùn)算符與表達(dá)式5.字符串連接運(yùn)算符6.賦值運(yùn)算符在給局部變量賦值的set和select語句中使用的“=”運(yùn)算符稱為賦值運(yùn)算符。賦值運(yùn)算符用于將表達(dá)式的值賦予另外一個(gè)變量,也可以使用賦值運(yùn)算符在列標(biāo)題和為列定義值的表達(dá)式之間建立關(guān)系。當(dāng)一個(gè)復(fù)雜的表達(dá)式有多個(gè)運(yùn)算符時(shí),運(yùn)算符優(yōu)先級(jí)決定執(zhí)行運(yùn)算的先后次序,執(zhí)行的順序會(huì)影響所得到的運(yùn)算結(jié)果。在一個(gè)表達(dá)式中,括號(hào)最優(yōu)先,其次按先高(優(yōu)先級(jí)數(shù)字小)后低(優(yōu)先級(jí)數(shù)字大)的順序進(jìn)行運(yùn)算。運(yùn)算符的優(yōu)先級(jí)如表7-4所示。7.1T-SQL運(yùn)算符與表達(dá)式6.賦值運(yùn)算符7.1T-SQL運(yùn)算符與表達(dá)式運(yùn)算符優(yōu)先級(jí)+(正),-(負(fù))1*(乘),/(除),%(模)2+(加),+(串聯(lián)),-(減)3=,>,<,>=,<=,<>,!=,!>,!<(比較運(yùn)算符)4^(位異或),&(位與),|(位或)5not6and7all,any,between,in,like,or,some8=(賦值)9表7-4運(yùn)算符的優(yōu)先級(jí)7.2T-SQL的變量變量是執(zhí)行程序中必不可少的部分,主要用來在程序運(yùn)行過程中存儲(chǔ)和傳遞數(shù)據(jù)。變量其實(shí)就是內(nèi)存中的一個(gè)存儲(chǔ)區(qū)域,存儲(chǔ)在這個(gè)區(qū)域中的數(shù)據(jù)就是變量的值,由系統(tǒng)或用戶定義并賦值。T-SQL語句中的變量有兩種:局部變量和全局變量。這兩種變量在使用方法和具體意義上均不相同。7.2

T-SQL的變量局部變量是作用域局限在一定范圍內(nèi)的變量,是用戶自定義的變量。一般來說,局部變量的使用范圍局限于定義它的批處理內(nèi)。定義它的批處理中的SQL語句可以引用這個(gè)局部變量,直到批處理結(jié)束,這個(gè)局部變量的生命周期也就結(jié)束了。局部變量在程序中通常用來存儲(chǔ)從表中查詢到的數(shù)據(jù)或在程序執(zhí)行過程中用于暫存變量。通常將其用于下面3種情況:(1)作為計(jì)數(shù)器,計(jì)算循環(huán)執(zhí)行的次數(shù)或控制循環(huán)執(zhí)行的次數(shù)。(2)保存數(shù)據(jù)值以供控制流語句測(cè)試。(3)保存由存儲(chǔ)過程返回代碼返回的數(shù)據(jù)值。7.2.1

局部變量1.概念及其用途在使用一個(gè)局部變量之前,必須先聲明該變量。其語法格式如下:declare@變量名變量類型[,...n]參數(shù)說明:(1)局部變量名的命名必須遵循SQLServer的標(biāo)識(shí)符命名規(guī)則,并且必須以字符“@”開頭。(2)局部變量的類型可以是系統(tǒng)數(shù)據(jù)類型,也可以是用戶自定義的數(shù)據(jù)類型。(3)declare語句可以聲明一個(gè)或多個(gè)局部變量,變量被聲明以后初值都是“null”。7.2.1

局部變量2.聲明及其賦值1)聲明局部變量局部變量被創(chuàng)建之后,系統(tǒng)將其初始值設(shè)為“null”。若要改變局部變量的值,可以使用set語句或select語句給局部變量重新賦值。select語句的語法格式如下:select@變量名=表達(dá)式[,...]set語句的語法格式如下:set@變量名=表達(dá)式7.2.1

局部變量2.聲明及其賦值2)局部變量賦值參數(shù)說明:(1)@變量名是準(zhǔn)備為其賦值的局部變量。表達(dá)式是有效的SQLServer表達(dá)式,且其類型應(yīng)與局部變量的數(shù)據(jù)類型相匹配。(2)從語法格式中可以看出,select語句和set語句的區(qū)別在于使用set語句一次只能給一個(gè)變量賦值,而select語句可以一次給多個(gè)變量賦值。7.2.1

局部變量2.聲明及其賦值2)局部變量賦值可以使用select或print語句顯示局部變量的值。其語法格式如下:select@變量名[,...n]print@變量名兩者的區(qū)別在于,select語句以表格方式顯示一個(gè)或多個(gè)變量的值,而print語句在消息框中顯示一個(gè)變量的值。7.2.1

局部變量3.顯示局部變量的值例7-3

聲明一個(gè)長度為12個(gè)字符的局部變量s#,并為其賦值。代碼如下:declare@s#varchar(12)select@s#='2018010101'例7-4聲明一個(gè)局部變量maxscore,將sc表中學(xué)號(hào)(s#)為2018010101的最高分賦值給這個(gè)變量。代碼如下:declare@maxscorenumeric(6,1)select@maxscore=max(score)fromscwheres#='2018010101'7.2.1

局部變量3.顯示局部變量的值例7-5

顯示例1和例2中定義的局部變量@s#和@maxscore的值。代碼如下:declare@s#varchar(12)select@s#='2018010101'declare@maxscorenumeric(6,1)select@maxscore=max(score)fromscwheres#='2018010101'print@s#print@maxscore7.2.1

局部變量3.顯示局部變量的值選定上述語句,單擊“執(zhí)行”按鈕,print一次只能顯示一個(gè)變量的值。顯示結(jié)果如圖7-1所示。7.2.1

局部變量3.顯示局部變量的值圖7-1局部變量的聲明、賦值和顯示全局變量是以“@@”開頭,由系統(tǒng)預(yù)先定義并負(fù)責(zé)維護(hù)的變量。也可以把全局變量看成是一種特殊形式的函數(shù)。全局變量不可以由用戶隨意建立和修改,其作用范圍也并不局限于某個(gè)程序,而是任何程序均可調(diào)用。常用的全局變量有30多個(gè),通常用來存儲(chǔ)一些SQLServer的配置值和效能統(tǒng)計(jì)數(shù)字,用戶可以通過查詢?nèi)肿兞縼頇z測(cè)系統(tǒng)的參數(shù)值或執(zhí)行查詢命令后的狀態(tài)值。在全局變量的使用過程中要注意,全局變量是由SQLServer服務(wù)器定義的,用戶只能使用全局變量,且在引用全局變量時(shí),必須以“@@”開頭。另外,局部變量的名稱不能與全局變量的名稱相同,否則就會(huì)在應(yīng)用程序中出錯(cuò)。7.2.2

全局變量表7-5列出了SQLServer的幾個(gè)常用全局變量及其含義,其他全局變量可查閱SQLServer聯(lián)機(jī)叢書。7.2.2

全局變量全局變量名稱全局變量的意義@@version返回當(dāng)前安裝的日期、版本和處理器類型@@servername返回運(yùn)行MicrosoftSQLServer的本地服務(wù)器名稱@@spid返回當(dāng)前用戶進(jìn)程的進(jìn)程ID@@identity返回最后插入的標(biāo)識(shí)列的列值@@error返回執(zhí)行Transact-SQL語句的錯(cuò)誤代碼@@procid返回當(dāng)前存儲(chǔ)過程的ID值@@language返回當(dāng)前使用的語言名表7-5幾個(gè)常見的全局變量例7-6執(zhí)行select@@servername,返回服務(wù)器名稱,顯示結(jié)果如圖7-2所示。7.2.2

全局變量圖7-2服務(wù)器名稱執(zhí)行select*FromSys.SysServers,返回服務(wù)器名稱等信息,顯示結(jié)果如圖7-3所示。圖7-3服務(wù)器名稱信息例7-7執(zhí)行Select@@spidas'ID',system_useras'LoginName',useras'UserName',返回用戶ID、登錄名及用戶名信息,如圖7-4所示。7.2.2

全局變量圖7-4用戶ID、登錄名及用戶名信息7.3程序控制語句SQLServer支持結(jié)構(gòu)化的編程方法,結(jié)構(gòu)化編程中程序流程控制的三大結(jié)構(gòu)是順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。T-SQL提供了實(shí)現(xiàn)這3種結(jié)構(gòu)的流程控制語句,使用這些流程控制語句可以控制命令的執(zhí)行順序,以便更好地組織程序。7.3

程序控制語句begin…end語句相當(dāng)于其他語言中的復(fù)合語句,如C語言中的{}。它用于將多條T-SQL語句封裝為一個(gè)整體的語句塊,即將begin…end內(nèi)的所有T-SQL語句視為一個(gè)單元執(zhí)行。在實(shí)際應(yīng)用中,begin…end語句一般與if…else、while等語句聯(lián)用,當(dāng)判斷條件符合需要執(zhí)行兩個(gè)或多個(gè)語句時(shí),就需要使用begin…end語句將這些語句封裝為一個(gè)語句塊。begin…end語句塊允許嵌套。7.3.1

begin…end語句其語法格式如下:begin{SQL語句塊|程序塊}end該語句適用于以下情況:while循環(huán)需要包含多條語句,case函數(shù)的元素需要包含多條語句,if或else子句中需要包含多條語句。7.3.1

begin…end語句例7-8在數(shù)據(jù)庫studscore_ds1的職工信息表employees中,查詢001號(hào)員工是否存在,如果有則刪除該員工,并顯示提示信息。代碼如下:usestudscore_ds1ifexists(select*fromemployeeswhereempid='001')begindeletefromemployeeswhereempid='001'print'001employeeisdeleted!'endelseprint'001employeenotfound!'7.3.1

begin…end語句if…else語句是條件判斷語句,用以實(shí)現(xiàn)選擇結(jié)構(gòu)。當(dāng)if后的條件成立時(shí)就執(zhí)行其后的T-SQL語句,條件不成立時(shí)執(zhí)行else語句后的T-SQL語句。其中,else子句是可選項(xiàng),如果沒有else子句,當(dāng)條件不成立時(shí)則執(zhí)行if語句后的其他語句。其語法格式如下:if<條件表達(dá)式>{SQL語句塊|程序塊}[else{SQL語句塊|程序塊}]7.3.2

單條件分支語句語法說明:①條件表達(dá)式是作為執(zhí)行和判斷條件的布爾表達(dá)式,返回“true”或“false”。如果布爾表達(dá)式中含有select語句,則必須用圓括號(hào)將select語句括起來。②程序塊是一條T-SQL語句或一個(gè)begin…end語句塊。③if…else語句允許嵌套使用,可以在if之后或在else的下面嵌套另一個(gè)if語句。嵌套級(jí)數(shù)的限制取決于可用內(nèi)存。7.3.2

單條件分支語句例7-9在數(shù)據(jù)庫studscore_ds1的學(xué)生成績sc表中,查詢是否存在考90分及以上的學(xué)生信息;有則顯示結(jié)果,無則顯示“沒有考90分及以上的學(xué)生”。代碼如下:usestudscore_ds1ifexists(select*fromscwherestudscore>=90)beginprint'有考90分及以上的學(xué)生'select*fromscwherestudscore>=90endelseprint'沒有考90分及以上的學(xué)生'7.3.2

單條件分支語句if…elseif…else語句用于多條件分支執(zhí)行。其語法格式如下:if<條件表達(dá)式>{SQL語句塊|程序塊}elseif<條件表達(dá)式>{SQL語句塊|程序塊}…else{SQL語句塊|程序塊}7.3.3

多條件分支語句1.if多條件分支elseif@avgsc>=80set@scorelevel='良好'elseif@avgsc>=70set@scorelevel='中等'elseif@avgsc>=60set@scorelevel='及格'elseset@scorelevel='不及格'print@scorelevel7.3.3

多條件分支語句1.if多條件分支12例7-10

在數(shù)據(jù)庫studscore_ds1的sc表中,使用if多條件分支語句判斷學(xué)生的成績等級(jí),并顯示該學(xué)生的等級(jí)。代碼如下:usestudscore_ds1declare@avgscnumeric(5,1),@scorelevelvarchar(10)select@avgsc=(selectavg(score)fromscwheres#='2018010101')if@avgsc>=90set@scorelevel='優(yōu)秀'case語句和if…else語句一樣,用來實(shí)現(xiàn)選擇結(jié)構(gòu),case語句避免了多重嵌套,更加簡潔清晰。T-SQL中的case語句可分為簡單case語句和搜索case語句兩種。

1)簡單case語句2)搜索case語句命令方式修改數(shù)據(jù)庫7.3.3

多條件分支語句2.case多條件分支其語法格式如下:case<運(yùn)算式>when<運(yùn)算式>then<運(yùn)算式>...when<運(yùn)算式>then<運(yùn)算式>[else<運(yùn)算式>]end7.3.3

多條件分支語句2.case多條件分支1)簡單case語句參數(shù)說明:①case后的表達(dá)式用于和when后的表達(dá)式逐個(gè)進(jìn)行比較,兩者的數(shù)據(jù)類型必須是相同的,或者是可以進(jìn)行隱式轉(zhuǎn)換的。②then后面給出當(dāng)case后的表達(dá)式與when后的表達(dá)式相等時(shí),要返回的結(jié)果表達(dá)式。7.3.3

多條件分支語句2.case多條件分支1)簡單case語句簡單case語句的執(zhí)行過程是:首先計(jì)算case后面表達(dá)式的值,然后按指定順序?qū)γ總€(gè)when子句后的表達(dá)式進(jìn)行比較。當(dāng)遇到與case后表達(dá)式值相等的,則執(zhí)行對(duì)應(yīng)的then后的結(jié)果表達(dá)式,并退出case結(jié)構(gòu);若case后的表達(dá)式值與所有when后的表達(dá)式均不相等,則返回else后的結(jié)果表達(dá)式;若case后的表達(dá)式值與所有when后的表達(dá)式均不相等,且“else結(jié)果表達(dá)式”部分被省略,則返回“null”值。7.3.3

多條件分支語句2.case多條件分支1)簡單case語句when1then'A'when2then'B'when3then'C'when4then'D'when5then'E'else'others'endprint'theansweris'+@answer7.3.3

多條件分支語句12例7-11

產(chǎn)生一個(gè)0~1之間的隨機(jī)數(shù),然后使用簡單case語句給出變量的值,并顯示結(jié)果。代碼如下:declare@aint,@answerchar(10)set@a=cast(rand()*10asint)print@aset@answer=case@a2.case多條件分支1)簡單case語句其語法格式如下:casewhen<條件表達(dá)式>then<運(yùn)算式>...when<條件表達(dá)式>then<運(yùn)算式>[else<運(yùn)算式>]end參數(shù)說明:case后面沒有表達(dá)式。when后面的條件表達(dá)式是作為執(zhí)行和判斷條件的布爾表達(dá)式。7.3.3

多條件分支語句2.case多條件分支2)搜索case語句搜索case語句的執(zhí)行過程是:首先測(cè)試when條件表達(dá)式,若為真,則執(zhí)行then后面的結(jié)果表達(dá)式,否則進(jìn)行下一個(gè)條件表達(dá)式的測(cè)試;若所有when后面的條件表達(dá)式都為假,則執(zhí)行else后面的結(jié)果表達(dá)式;若所有when后面的條件表達(dá)式都為假,且“else結(jié)果表達(dá)式”部分被省略,則返回“null”。7.3.3

多條件分支語句2.case多條件分支2)搜索case語句例7-12

在表employees中,計(jì)算平均工資,然后分析判斷員工工資的總體情況。代碼如下:declare@avgsalaryfloat,@salarylevelnchar(50)select@avgsalary=(selectavg(salary)fromemployees)set@salarylevel=casewhen@avgsalary>=15000then'偏高收入!'when@avgsalary>=8500then'高收入!'when@avgsalary>=3500then'中等收入!'when@avgsalary>=1500then'大于最低標(biāo)準(zhǔn)!'else'無保障收入'endselect@salarylevel7.3.3

多條件分支語句2.case多條件分支2)搜索case語句while語句用于實(shí)現(xiàn)循環(huán)結(jié)構(gòu),其功能是在滿足循環(huán)條件的情況下,重復(fù)執(zhí)行T-SQL語句或語句塊。當(dāng)while后面的條件為真時(shí),就重復(fù)執(zhí)行begin…end之間的語句塊。while語句塊中的continue和break是可選項(xiàng)。若有continue語句,則其功能是跳過continue后的語句,執(zhí)行下一次循環(huán)條件測(cè)試。若遇到break語句,則其功能是立即終止循環(huán),結(jié)束整個(gè)while語句的執(zhí)行,并繼續(xù)執(zhí)行while語句后的其他語句。7.3.4

循環(huán)語句其語法格式如下:while條件表達(dá)式begin程序塊[break]程序塊[continue]程序塊end參數(shù)說明:條件表達(dá)式是作為執(zhí)行和判斷的布爾表達(dá)式,返回“true”或“false”。如果布爾表達(dá)式中含有select語句,則必須用圓括號(hào)將select語句括T-SQL語句或一個(gè)begin…end語句塊。7.3.4

循環(huán)語句printconvert(char(3),@i)--convert()轉(zhuǎn)換函數(shù),轉(zhuǎn)換為字符set@n=@n+1endset@i=@i+1endprint'1-100能被7整除的數(shù)共計(jì)'+convert(char(3),@n)+'個(gè)'12例7-13

進(jìn)行T-SQL編程,輸出1~100之間能被7整除的數(shù),并且最后輸出總個(gè)數(shù)。代碼如下:declare@iint,@nintselect@i=1,@n=0print'1-100能被7整除的數(shù):'while@i<=100beginif(@i%7)=0begin7.3.4

循環(huán)語句例7-14

使用while循環(huán)語句,計(jì)算s=1!+2!+3!+4!+5!。代碼如下:declare@iint,@jint,@sintset@i=1set@j=1set@s=0while@i<=5beginset@j=@j*@iset@s=@s+@jset@i=@i+1endprint's=1!+2!+3!+4!+5!='+convert(char(5),@s)7.3.4

循環(huán)語句例7-15

使用while循環(huán)語句,計(jì)算出1~10之間偶數(shù)的平方和,并輸出結(jié)果。代碼如下:declare@iint,@sumintselect@i=1,@sum=0while@i<=10beginif@i&1=0--使用&運(yùn)算符beginset@sum=@sum+@i*@iendset@i=@i+1endprint@sum7.3.4

循環(huán)語句goto語句是轉(zhuǎn)向語句,讓程序跳轉(zhuǎn)到一個(gè)指定的標(biāo)簽處并執(zhí)行其后的代碼。goto語句和標(biāo)簽可以在程序、批處理和語句塊中的任意位置使用,也可以嵌套使用。其語法格式如下:定義標(biāo)簽label:改變執(zhí)行g(shù)otolabel參數(shù)說明:若有g(shù)oto語句指向label標(biāo)簽,則其為處理的起點(diǎn)。標(biāo)簽必須符合標(biāo)識(shí)符規(guī)則。7.3.5

goto語句例7-16

結(jié)合使用T-SQL編程的goto語句求10!,并顯示計(jì)算結(jié)果。代碼如下:declare@sint,@timesintselect@s=1,@times=1label1:--定義語句標(biāo)號(hào)set@s=@s*@timesset@times=@times+1if@times<=10gotolabel1print'10!='+str(@s)7.3.5

goto語句return語句用于結(jié)束當(dāng)前程序的執(zhí)行,無條件地終止一個(gè)查詢、存儲(chǔ)過程或批處理,返回到上一個(gè)調(diào)用它的程序或其他程序;在括號(hào)內(nèi)可指定一個(gè)返回值。其語法格式如下:return[integer_expression]參數(shù)說明:integer_expression為返回的整型值。存儲(chǔ)過程可以給調(diào)用過程或應(yīng)用程序返回整型值。7.3.6

eturn語句例7-17

創(chuàng)建一個(gè)存儲(chǔ)過程,通過return語句返回一個(gè)值,用于判斷員工表employees是否存在該員工。代碼如下:createprocedurecheck_employee(@empidvarchar(50))asifexists(select*fromemployeeswhereempid=@empid)return1elsereturn-100該題目中,找到該員工則返回“1”,否則返回“-100”。7.3.6

eturn語句waitfor語句用于在達(dá)到指定時(shí)間或時(shí)間間隔之前阻止執(zhí)行批處理、存儲(chǔ)過程或事務(wù),直到所設(shè)定的時(shí)間已到或等待了指定的時(shí)間間隔之后才繼續(xù)往下運(yùn)行。其語法格式如下:waitfordelay等待時(shí)間|time完成時(shí)間7.3.7waitfor語句參數(shù)說明:(1)“delay等待時(shí)間”是指定可以繼續(xù)執(zhí)行批處理、存儲(chǔ)過程或事務(wù)之前必須經(jīng)過的指定時(shí)間段,最長可為24小時(shí)??墒褂胐atetime數(shù)據(jù)可接受的格式之一指定“等待時(shí)間”,也可以將其指定為局部時(shí)間,但不能指定日期,因此不允許指定datetime值的日期部分。7.3.7waitfor語句(2)“time完成時(shí)間”是指定運(yùn)行批處理、存儲(chǔ)過程或事務(wù)的具體時(shí)刻??梢允褂胐atetime數(shù)據(jù)可以接受的格式之一指定“完成時(shí)間”,也可以將其指定為局部變量,但不能指定日期,因此不允許指定datetime值的日期部分。例7-18

在10點(diǎn)盤點(diǎn),從sales表中查詢當(dāng)前的銷售情況。這里的時(shí)間是服務(wù)器時(shí)間,而不是客戶端時(shí)間。代碼如下:beginwaitfortime'10:00:00'select*fromsalesend7.3.7waitfor語句在T-SQL中可以使用兩類注釋符。ANSI標(biāo)準(zhǔn)的注釋符“--”用于單行注釋,/**/用于多行注釋。1)2)聚集索引非聚集索引7.3.8注釋語句其語法格式如下:--text_of_comment參數(shù)說明:兩個(gè)連字符(--)是SQL-92標(biāo)準(zhǔn)的注釋指示符。text_of_comment為包含注釋文本的字符串。7.3.8注釋語句1.單行注釋其語法格式如下:/*text_of_comment*/參數(shù)說明:text_of_comment為包含注釋文本的字符串。2.多行注釋腳本是存儲(chǔ)在文件中的一系列SQL語句,即一系列按順序提交

溫馨提示

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