第4章T-SQL與可編程對象_第1頁
第4章T-SQL與可編程對象_第2頁
第4章T-SQL與可編程對象_第3頁
第4章T-SQL與可編程對象_第4頁
第4章T-SQL與可編程對象_第5頁
已閱讀5頁,還剩113頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第4章T-SQL與可編程對象SQL語言是結構化查詢語言(StructureQueryLanguage)的簡稱,它是一個通用的、功能強大的關系數(shù)據(jù)庫操作語言,最初由IBM公司在20世紀70年代中期開發(fā)成功。并被國際標準化組織采納為關系數(shù)據(jù)庫語言的國際標準。Transact-SQL(

簡稱T-SQL)是SQLServer中支持的擴展SQL語言,它提供了數(shù)據(jù)定義、數(shù)據(jù)操縱、數(shù)據(jù)控制等語句,支持對數(shù)據(jù)庫的操縱和管理,是開發(fā)數(shù)據(jù)庫應用程序的基本語言。SQL

Server支持采用T-SQL語言定義服務器端應用程序,這些應用程序被統(tǒng)稱為可編程對象。

4.1.1T-SQL概述1.

T-SQL語言的特點1)非過程化:使用T-SQL時,不必描述解決問題的全過程,只需提出“做什么”,至于“如何做”的細節(jié)則由語言系統(tǒng)本身去完成并給出操作的結果。2)兩種不同的使用方式:兩種方式下,T-SQL語言的語法結構基本相同。

聯(lián)機交互方式:SQL語言可獨立使用嵌入程序設計語言中:例如嵌入C#、VB.net中。3)高度一體化:集數(shù)據(jù)定義語言(DDL)、數(shù)據(jù)操縱語言(DML)、數(shù)據(jù)控制語言(DCL)和T-SQL增加的語言元素于一體,可獨立完成數(shù)據(jù)庫生命周期的所有活動。

4)語言簡潔、易學易用。面向過程的程序設計語言,必須一步一步地將解題的全過程描述出來,不僅要告訴計算機“做什么”,而且還要告訴計算機“怎么做”。2.T-SQL語言的組成元素DDL(DataDefinitionLanguage)數(shù)據(jù)庫定義語言,用于定義或修改數(shù)據(jù)庫。包括Create、Alter、Drop等語句。例如:CreateDATABASEStudentDML(DataManipulationLanguage)數(shù)據(jù)庫操縱語言,實現(xiàn)對數(shù)據(jù)庫基本操作,包括Selete、Insert、Update、Delete等語句。DCL(DataControlLanguage)數(shù)據(jù)庫控制語言,實現(xiàn)對數(shù)據(jù)對象的授權、數(shù)據(jù)完整性規(guī)則描述及控制事務等,包括Grant、Revoke、Deny等語句。T-SQL增加的語言元素

變量、運算符、函數(shù)、流程控制語句和注解等。

3.T-SQL語言書寫規(guī)則①在T-SQL語句中,不區(qū)分字母大小寫,即大小寫字母的意義完全相同。②一條語句可以寫在一行,也可以寫在若干行上。在本講義中:為了閱讀方便,用大寫字母書寫SQL語句的關鍵詞,用小寫字母書寫標識符、表達式及各種參數(shù);為了體現(xiàn)語法結構,一條語句寫在多行上。例如:SELECT*FROM

Student

4.注釋為了增強程序代碼的可讀性,可在適當?shù)牡胤郊由献⑨?。T-SQL有兩種注釋方法:①單行注釋(--)。語法格式如下:--注釋文本內(nèi)容②多行注釋(/*…*/)。語法格式如下:/*注釋文本內(nèi)容*/

例如:USESchool/*打開School數(shù)據(jù)庫。當?shù)谝淮卧L問某數(shù)據(jù)庫時,需要使用USE語句打開數(shù)據(jù)庫,否則其他訪問該數(shù)據(jù)庫的SQL語句不能執(zhí)行*/SELECT*FROMStudent--查詢顯示學生表中所有學生的信息操作對象操作方式創(chuàng)建刪除修改使用數(shù)據(jù)庫CREATEDATABASEDROPDATABASEALTERDATABASEUSE基本表CREATETABLEDROPTABLEALTERTABLE視圖CREATEVIEWDROPVIEWALTERVIEW索引CREATEINDEXDROPINDEX存儲過程CREATEPROCEDUREDROPPROCEDUREALTERPROCEDURE觸發(fā)器CREATETRIGGERDROPTRIGGERALTERTRIGGER數(shù)據(jù)定義語言主要是定義數(shù)據(jù)庫中的對象,包括數(shù)據(jù)庫、數(shù)據(jù)表、視圖、索引、存儲過程、觸發(fā)器等的建立或修改。常用語句如下:4.1.2數(shù)據(jù)定義語言DDL

1.DDL概述如果想查看或保存已存在的數(shù)據(jù)庫對象的DDL語句,可在SQLServerManagementStudio中自動生成各種數(shù)據(jù)庫對象的SQL腳本,也可將其保存到一個擴展名為.sql的文件中,在查詢編輯器中可打開.sql文件,執(zhí)行SQL腳本,重建相應的數(shù)據(jù)庫。提示:使用SQL定義腳本重建的數(shù)據(jù)庫不包括表中數(shù)據(jù)。2.自動生成數(shù)據(jù)庫定義的SQL腳本前面已經(jīng)學習過使用SQLServerManagementStudio創(chuàng)建各種數(shù)據(jù)庫對象,實質(zhì)上手工創(chuàng)建的過程就是在構建DDL語句。SQL腳本的生成方法如下:①右擊要生成SQL腳本的數(shù)據(jù)庫或數(shù)據(jù)表,選“編寫數(shù)據(jù)庫(或表)腳本為/Create到/新查詢編輯窗口”。②在“查詢編輯”窗口可查看和復制SQL腳本。選擇“文件/保存”或“文件/另存為”菜單可將這些SQL腳本保存到一個擴展名為“.sql”的文本文件。③使用“文件/打開”菜單可打開腳本文件。執(zhí)行可創(chuàng)建新的表。選數(shù)據(jù)庫,右擊用“任務/生成腳本”菜單可選擇該庫中的多個對象,生成腳本文件。(1)創(chuàng)建數(shù)據(jù)庫【例4.1】創(chuàng)建一個名為SchoolTest的數(shù)據(jù)庫。3.幾個常用DDL語句CREATEDATABASE數(shù)據(jù)庫名[ONNAME=邏輯文件名,F(xiàn)ILENAME=物理文件名]答案1

:CREATEDATABASE

SchoolTest

--數(shù)據(jù)庫名提示:[]表示可選項以系統(tǒng)數(shù)據(jù)庫model作為模板在SQLServer安裝文件夾的Data文件夾下(一般為C:\ProgramFile\MicrosoftSQLServer\MSSQL\Data)建立數(shù)據(jù)庫文件SchoolTest.mdf(大小為3MB)和日志文件SchoolTest_log.LDF(大小為1MB)。答案2

:CREATEDATABASE

SchoolTest

--數(shù)據(jù)庫名ON(NAME=‘SchoolTest’,

--主數(shù)據(jù)文件邏輯名FILENAME=‘D:\SchoolTest.MDF’)

--主數(shù)據(jù)文件物理名創(chuàng)建了一個數(shù)據(jù)庫SchoolTest,其主數(shù)據(jù)文件為大小為3MB的D:\SchoolTest.mdf“;并且自動創(chuàng)建一個大小為1MB的“D:\SchoolTest_log.LDF”作為日志文件。(2)打開和刪除數(shù)據(jù)庫語句打開數(shù)據(jù)庫:USE數(shù)據(jù)庫名--其中數(shù)據(jù)庫名是要打開作為當前數(shù)據(jù)庫的數(shù)據(jù)庫例如:USESchool--打開數(shù)據(jù)庫School當用戶登錄到SQLServer后,系統(tǒng)指定系統(tǒng)數(shù)據(jù)庫master作為默認當前數(shù)據(jù)庫。所謂當前數(shù)據(jù)庫是指當前可以操作的數(shù)據(jù)庫。刪除數(shù)據(jù)庫:DROPDATABASE數(shù)據(jù)庫名例如:DROPDATABASESchoolTest--刪除SchoolTest注意:刪除數(shù)據(jù)庫時不允許該數(shù)據(jù)庫有對象處于打開狀態(tài)。(3)建立數(shù)據(jù)表語句CREATETABLE數(shù)據(jù)表名(列名列數(shù)據(jù)類型列約束

……

Constraint約束說明)【例4.2】在數(shù)據(jù)庫“SchoolTest”中建立學生表StudentTest。CREATETABLEStudentTest(StudentCodeCHAR(8)NOTNULLUNIQUE,/*不允許空,取值唯一*/StudentNameVARCHAR(16)NOTNULL,SexCHAR(2)NOTNULL,LiveInDormBIT

DEFAULT1,/*默認值為1*/ConstraintStudentPKPrimaryKey(StudentCode),/*StudentCode主鍵*/ConstraintSexCheckCheck(Sex='男'

orSex='女')/*Sex檢查約束*/)【例4.3】刪除StudentTest表。(4)刪除表語句當數(shù)據(jù)表不再需要時,可以使用DROPTABLE語句將其刪除。DROPTABLE數(shù)據(jù)表名DROPTABLEStudentTest(5)建立索引語句【例4.4】在StudentTest表的姓名(StudentName)和生日(Birthday)字段上建立唯一索引NameIndex,姓名按升序排列,姓名相同時,按生日降序排列。(6)刪除索引語句CREATEINDEX索引名ON數(shù)據(jù)表名(字段ASC|DESC)--默認為索引順序為ASC。DROPINDEX數(shù)據(jù)表名.索引名【例4.5】刪除StudentTest表中名稱為NameIndex的索引。CREATEUNIQUE

INDEX

NameIndex

onStudentTest(StudentName,

BirthdayDESC)DROPINDEXStudentTest.NameIndex4.1.3數(shù)據(jù)操縱語言DMLSELECT語句:從一個表或多個表查詢數(shù)據(jù)INSERT語句:向一個表中添加一條記錄UPDATE語句:修改表中某一個或幾個字段的值DELETE語句:從一個表中刪除記錄DML語句實現(xiàn)對數(shù)據(jù)的查詢和更新,主要語句及功能如下:1.查詢語句SELECT又稱為選擇查詢語句,用于從數(shù)據(jù)庫的一個或多個表中檢索滿足一定條件的記錄集,并按一定順序顯示指定的字段內(nèi)容。SELECT字段表FROM表名[WHERE查詢條件][GROUPBY分組字段[HAVING分組條件]][ORDERBY字段名[ASC/DESC]][]表示可選項。第2行至最后一行稱作SQL子句,不同的子句完成不同的功能。在書寫SELECT語句時,字母大小寫意義完全相同。語句可以寫在若干行上(如上述語法格式中的描述),也可以不換行。字段表位于關鍵字SELECT后面,這些字段將作為查詢的結果被顯示。①可選任意多個字段,字段與字段之間用逗號分隔?!纠?.6】查詢Student表中的所有學生的姓名和性別。(1)字段表SELECTStudentName,Sex

FROMStudent②可以使用通配符“*”表示表中的所有字段。【例4.7】查詢Student表中所有學生的全部字段信息。SELECT*

FROMStudent③若字段名或表名中含有空格,則該字段名或表名必須用方括號括起來。④在字段表中,可以使用如下方式將原字段名以新的字段名顯示:字段名AS新字段名【例4.8】查詢Class表中班號和班名班號別名為ClassNumber。提示:“ClassNumber”含空格,要寫為[ClassNumber]SELECTClassCodeAS[ClassNumber],ClassNameFROMClass⑤在字段名前可以加上一些關鍵字,以便進一步優(yōu)化查詢結果。常用的關鍵字有:DISTINCT:若多條記錄的字段值具有相同數(shù)據(jù),只顯示一條記錄?!纠?.11】顯示Course表中開課的學院名稱Academy(與所開課程無關)。SELECTDISTINCTAcademyFROMCourse由于每個學院都開設了多門課程,因此多條記錄在字段Academy具有部分相同的值。增加Distinct限制后,查詢結果中相同的值只顯示一次。TOPn|mPERCENT:查詢前n條記錄或前m%的記錄。【例4.9】查詢Course表中的前3條記錄?!纠?.10】查詢Course表中前20%的記錄,顯示課程號和課程名稱。SELECTTOP3*FROMCourseSELECTTOP20PERCENTCourseCode,CourseNameFROMCourse⑥新增字段查詢。查詢的字段可以是表中字段名,也可以是常量和表達式,表達式中可以使用內(nèi)部聚合函數(shù)進行統(tǒng)計計算。常用函數(shù)表函數(shù)名函數(shù)功能AVG計算某一字段的平均值(字段值必須是數(shù)值型)COUNT統(tǒng)計某一字段的個數(shù)MAX查找某一字段的最大值MIN查找某一字段的最小值SUM計算某一字段的總和(字段的值必須是數(shù)值型)【例4.12】查詢Grade表,顯示學號、所選課程號及加2分調(diào)整后的成績(Grade),并顯示一列說明“情況屬實”?!纠?.13】查詢Grade表,統(tǒng)計所有學生的分數(shù)總和、平均分、最高分、最低分及總選課人次。SELECTStudentCode,CourseCode,Grade+2AS成績,'情況屬實'AS說明FROMGradeSELECTSum(Grade)AS總分,Avg(Grade)AS平均分,Max(Grade)AS最高分,Min(Grade)AS最低分,Count(StudentCode)AS總人次FROMGrade【例4.14】將Student表中所有記錄的學生姓名、出生日期復制到一張新表NewTable。⑦使用查詢創(chuàng)建新表。在字段名后加上“INTO表名”可將查詢結果復制到一張新表中。SELECTStudentName,BirthDayINTONewTableFROMStudent提示:語句運行后,數(shù)據(jù)庫School中產(chǎn)生一張表名為NewTable的新表。刷新數(shù)據(jù)庫,即可查看到。(2)FROM子句FROM子句是SELECT語句必不可少的一個子句,指定要查詢的數(shù)據(jù)來自哪個或哪些表或視圖。FROM表名1[,表名2,……,表名n]【例4.15】查詢Student表和Grade表,顯示學生的選課和成績情況。SELECTStudent.StudentCode,StudentName,CourseCode,GradeFROMStudent,GradeWHERE

Grade.StudentCode=Student.StudentCodeSELECTStudentCode,StudentName,CourseCode,GradeFROMStudent,Grade

()注意:表的排列順序不影響執(zhí)行結果;如果FROM子句中包含多個表名,且不同的表中具有相同的字段,那么SELECT子句的字段名必須表示成“表名.字段名”。(3)WHERE子句WHERE子句說明查詢條件,它是一個可選的子句。它必須緊跟在FROM子句的后面。

WHERE查詢條件查詢條件謂詞比較>、>=、<、<=、=、<>(不等于)、!>(不大于)、!<(不小于)、!=(不等于)確定范圍BETWEEN…AND、NOTBETWEEN…AND確定集合IN、NOTIN、EXISTS字符匹配LIKE、NOTLIKE空值ISNULL、ISNOTNULL否定NOT邏輯運算AND、ORT-SQL中常用的關系和邏輯運算其中,查詢條件是一個關系或邏輯表達式。①

比較和邏輯運算【例4.16】查詢Student表中所有女學生的姓名。

【例4.17】查詢未住校的女學生的情況。

SELECTStudentCode,StudentName,

LiveInDormFROMStudentWHERELiveInDorm=0ANDSex=‘女’SELECTStudentNameFROMStudentWHERESex=‘女’②

BETWEEN…AND…運算BETWEEN值1AND值2NOTBETWEEN值1AND值2【例4.18】在Grade表中查詢選修課程號為“101”、成績在70分到90分之間的所有學生,顯示其學號及成績。查詢某字段的值在指定范圍內(nèi)的數(shù)據(jù)記錄(結果包括值1和值2)。查詢不在指定范圍中的數(shù)據(jù)記錄。SELECTStudentCode,CourseCode,GradeFROMGradeWHERECourseCode='101‘ANDGradeBETWEEN70AND90此例的WHERE子句也可以改為:WHERECourseCode=‘101'ANDGrade>=70ANDGrade<=90【例4.19】查詢Student表中不在1990年到1994年中出生的學生的學號和姓名。SELECTStudentCode,StudentName,BirthdayFROMStudentWHEREBirthdayNOTBETWEEN'1990-01-01'AND'1994-12-30'在WHERE子句中可使用Year()函數(shù):SELECTStudentCode,StudentName,BirthdayFROMStudentWHEREYear(Birthday)NOTBETWEEN1990AND1994注意:日期型常量的寫法?、鄞_定在集合中的IN運算:查詢某字段值在或不在某集合的數(shù)據(jù)記錄【例4.20】查詢Student表中班號為“11”、“21”、“31”的學生。SELECTStudentCode,StudentName,Sex,ClassCodeFROMStudentWHEREClasscodeIN('11','21','31')

此例的WHERE子句也可以改為:WHEREClassCode='11'ORClassCode='21'ORClassCode='31'④字符串模式匹配的LIKE運算:確定某字符字段的子串值是否符合指定的模式,可查詢滿足字符串匹配的數(shù)據(jù)記錄。例如:姓“王”的名字:‘王%’;第2個字是“小”的姓名:‘_小%’姓“張”的單名:‘張_’【例4.21】查詢Course表中課程名稱中包含“化學”兩個字的課程號及課程名稱。【例4.22】查詢Student表中不姓“王”的學生。SELECTCourseCode,CourseNameFROMCourseWHERECourseNameLIKE'%化學%'SELECTStudentCode,StudentNameFROMStudentWHEREStudentNameLIKE'[^王]%'【例4.30】統(tǒng)計每門課程的選課人數(shù)和平均分。(4)GROUPBY子句:用于對數(shù)據(jù)記錄進行分類匯總,即按指定字段把具有相同值的記錄通過匯總計算合并成一條記錄。GROUPBY分組[HAVING分組條件]HAVING子句:與WHERE子句作用類似,在使用GROUPBY完成分組后,顯示滿足HAVING子句中分組條件的所有記錄。

SELECTCourseCode,Count(StudentCode)AS選課人數(shù),AVG(Grade)AS平均分FROMGradeGROUPBYCourseCode如只查詢平均分大于等于80的記錄,則在語句后增加:[HAVINGavg(Grade)>=80]如果GROUPBY后的分組字段有多個,則表示多次分組。

【例4.31】統(tǒng)計各學院男、女教師的人數(shù)。SELECTAcademy,Sex,Count(TeacherCode)AS教師人數(shù)FROMTeacherGROUPBYSex,Academy注意:使用GROUPBY子句時,分組字段必須出現(xiàn)在SELECT后的字段列表中(可以是字段,也可在聚合函數(shù)中),否則不允許分組。【例4.32】按成績升序顯示Grade表中的所有數(shù)據(jù)。(5)ORDERBY子句:按指定字段為查詢結果排序。通常是SQL語句最后一項。ORDERBY字段名[ASC/DESC]其中:ASC為升序排序,DESC為降序排序。缺省排列次序為升序。ASC:Ascending,DESC:DescendingSELECT*FROMGradeORDERBYGrade可以指定多個排序的字段。規(guī)則:首先用指定的第一個字段對記錄排序,然后對此字段中具有相同值的記錄用第二個字段進行排序,依此類推。若在SELECT語句中無此子句,則按原數(shù)據(jù)表的次序顯示數(shù)據(jù)?!纠?.33】按姓名升序(若姓名相同,則按出生日期降序)顯示班級代碼、學生姓名及出生日期。SELECTClassName,StudentCode,StudentNameFROMClass,StudentWHEREClass.ClassCode=Student.ClassCodeORDERBYClassName,StudentNameDESCClassName默認為ASC(6).聯(lián)接查詢:涉及多表的查詢稱為聯(lián)接查詢,可以用兩種方法實現(xiàn)。①在FROM子句中指出需查詢的表,在WHERE子句中說明兩個表相關聯(lián)字段的聯(lián)接條件

。注意:Student表和Grade表都有StudentCode字段,所以要在Select后的該字段名前指明其中一個表名Student.StudentCode?!纠?.23】查詢未住校學生的選課及成績的情況。SELECTStudent.StudentCode,StudentName,CourseCode,Grade,LiveinDormFROMGrade,StudentWHEREGrade.StudentCode=Student.StudentCodeANDLiveInDorm=0【例4.24】查詢優(yōu)異生的情況。要求顯示學生姓名、所在班級、認定時間、學分積點。

SELECTStudentName,ClassName,GrantTime,GPAFROMExcellentStudent,Student,ClassWHEREExcellentStudent.StudentCode=Student.StudentCode

ANDStudent.ClassCode=Class.ClassCode注意:指明Student表和Grade表中StudentCode字段值相同的記錄相聯(lián)接。若在查詢時無此條件,查詢結果錯誤。②使用聯(lián)接關鍵字JOIN…ON說明兩個表及相關聯(lián)字段的聯(lián)接條件。

FROM表1聯(lián)接關鍵字表2ON表1.字段名1<比較運算符>

表2.字段名2其中:表1、表2是被聯(lián)接的表名;字段名是被聯(lián)接的字段。必須有相同的數(shù)據(jù)類型并包含同類數(shù)據(jù),但不需要有相同的名稱。比較運算符:=、<、>、<=、>=、<>常用聯(lián)接關鍵字:INNERJOIN(內(nèi)聯(lián)接)、LEFTOUTERJOIN(左外聯(lián)接)、RIGHTOUTERJOIN(右外聯(lián)接)

INNERJOIN(內(nèi)聯(lián)接):查詢結果僅包含兩個表中每對聯(lián)接匹配的行。內(nèi)聯(lián)接是系統(tǒng)默認的,可以將關鍵詞INNER省略?!纠?.25】使用內(nèi)聯(lián)接查詢未住校學生的選課及成績情況。SELECTStudent.StudentCode,StudentName,CourseCode,Grade,LiveinDormFROMStudentINNER

JOINGradeONStudent.StudentCode=Grade.StudentCodeWHERELiveInDorm=0本句的查詢結果與例4.23完全相同,但語句中表的聯(lián)接關系表達更為清晰,WHERE子句只有一個條件“LiveInDorm=0”。Inner可省略

LEFTOUTERJOIN(左外聯(lián)接):結果除了包含兩張表中符合聯(lián)接條件的記錄,還包含左表(寫在關鍵字LEFTOUTERJOIN左邊的表)中不符合聯(lián)接條件、但符合WHERE條件的全部記錄??梢詫㈥P鍵字OUTER省略?!纠?.26】使用左外聯(lián)接查詢未住校學生的選課及成績情況。

SELECTStudent.StudentCode,StudentName,CourseCode,Grade,LiveInDormFROMStudentLEFTJOINGradeONStudent.StudentCode=Grade.StudentCodeWHERELiveInDorm=0有2條記錄的CourseCode和Grade字段值為NULL。這2條記錄是左表(Student)中未住校學生的信息,但在Grade表中沒有其相關選課記錄。

RIGHTOUTERJOIN(右外聯(lián)接):結果除了包含兩張表中符合聯(lián)接條件的記錄,還包含右表(寫在關鍵字RIGHTTOUTERJOIN右邊的表)中不符合聯(lián)接條件、但符合WHERE條件的全部記錄??梢詫㈥P鍵字OUTER省略?!纠?.27】使用右外聯(lián)接查詢未住校學生的選課及成績情況。

SELECTStudent.StudentCode,StudentName,CourseCode,Grade,LiveInDormFROMStudentRIGHTJOINGradeONStudent.StudentCode=Grade.StudentCodeWHERELiveInDorm=0結果與例4.25內(nèi)聯(lián)接完全相同。由于在表設計時,在表Student和Grade之間通過外鍵建立了參照完整性約束,表Grade中的所有StudentCode必須是Student中出現(xiàn)的值。③多表聯(lián)接嵌套:如果查詢所涉及的數(shù)據(jù)表在3個以上,形成聯(lián)接嵌套。1)使用WHERE子句設置查詢條件例如,查詢學生所選課程成績,顯示學生姓名、課程名稱,成績。涉及Student、Grade、Course三張表。SELECTStudentName,CourseName,GradeFROMStudent,Grade,CourseWHEREStudent.StudentCode=Grade.StudentCodeANDGrade.CourseCode=Course.CourseCode2)使用聯(lián)接關鍵字的語句FROM表1JOIN表2ON表1.字段i<比較運算符>表2.字段jJOIN表3ON表x.字段k<比較運算符>表3.字段l…[JOIN表nON表y.字段m<比較運算符>

表n.字段n]x<=2,y<=n-1SELECTStudentName,CourseName,GradeFROMStudent

JOIN

GradeON

Student.StudentCode=Grade.StudentCode

JOINCourseONGrade.CourseCode=Course.CourseCode或者寫為如下格式:FROM表1JOIN表2JOIN表3…[JOIN表nON表n.字段i<比較運算符>表n-1字段jON表x.字段k<比較運算符>表n-2.字段l

…ON表y.字段m<比較運算符>表1.字段n]x>=n-1,y>=2SELECTStudentName,CourseName,GradeFROMStudent

JOIN

GradeJOINCourseONGrade.CourseCode=Course.CourseCodeONStudent.StudentCode=Grade.StudentCode【例4.28】用嵌套聯(lián)接實現(xiàn)例4.24查詢優(yōu)異生的情況。SELECTStudentName,ClassName,GrantTime,GPAFROMExcellentStudentJOINStudentONExcellentStudent.StudentCode=Student.StudentCodeJOINClassONStudent.ClassCode=Class.ClassCode結果與例4.24使用Where子句說明聯(lián)接條件的結果完全相同。【例4.29】查詢班號是“61”的學生姓名、班號、所選課程名稱和成績。該查詢需要用到3張表Student、Course和Grade。SELECTStudentName,ClassCode,CourseName,Grade

FROMStudentJOINGradeJOINCourseONGrade.CourseCode=Course.CourseCodeONStudent.StudentCode=Grade.StudentCodeWHEREClassCode='61'【例4.34】查詢“林豆豆”同班同學的學號、姓名。(7).子查詢:當一個查詢的結果是另一個查詢的條件時,稱該查詢?yōu)樽硬樵儭R脖环Q為嵌套查詢。SELECTStudentCode,StudentName,ClassCodeFROMStudentWHEREClassCode=(SELECTClassCodeFROMStudentWHEREStudentName='林豆豆')IN子查詢:用來判斷一個給定值是否在子查詢的結果集中?!纠?.35】查詢選修了課程代碼為“101”的學生的學號、姓名和班號。如果子查詢結果返回多值則子查詢要與下面介紹的IN、EXIST等結合使用。SELECTStudentCode,StudentName,ClassCodeFROMStudentWHEREStudentCodeIN(SELECTStudentCodeFROMGradeWHERECourseCode='101')提示:在執(zhí)行過程中,子查詢得到選修課程“101”的所有學生學號返回給主查詢,主查詢再查詢這些學生的學號、姓名和班號。該查詢也可以利用聯(lián)接查詢完成:SELECTStudent.StudentCode,StudentName,ClassCodeFROMStudentINNERJOINGradeONStudent.StudentCode=Grade.StudentCodeWHERECourseCode='101'提示:多數(shù)情況下,包含子查詢的語句可以用聯(lián)接表示。但子查詢與聯(lián)接相比,有一個顯著的優(yōu)點,就是子查詢可以計算一個變化的聚集函數(shù)值,并返回到主查詢進行比較,而聯(lián)接做不到?!纠?.36】查詢年齡最大的學生的學號和姓名。SELECTStudentCode,StudentName,BirthdayFROMStudentWHEREBirthdayIN

(SELECTMIN(Birthday)FROMStudent)提示:子查詢獲取Student表中最小的出生日期即年齡最大學生的出生日期,主查詢再查詢這一日期出生的學生的學號、姓名和出生日期。EXISTS子查詢:用于判斷一個子查詢的結果集是否為非空,如果非空則返回TRUE,否則返回FALSE。NOTEXISTS的返回值與EXISTS相反

?!纠?.35】用EXISTS子查詢實現(xiàn):查詢選修了課程代碼為“101”的學生的學號、姓名和班級代號。SELECTStudentCode,StudentName,ClassCodeFROMStudentWHEREEXISTS

(SELECT*FROMGradeWHEREStudent.StudentCode=Grade.StudentCodeANDGrade.CourseCode='101')提示:本查詢的執(zhí)行過程是:首先查找主查詢中Student表的第一行,將該行的學號提供給子查詢,然后子查詢執(zhí)行,若結果集不為空,則把該行的StudentCode,StudentName,ClassCode作為結果集的第一行輸出;然后再找Student表中的第2、3……行,重復上述處理過程,直到Student中的數(shù)據(jù)行全部處理完畢?!纠?.37】查詢所有未選修任何課程的學生。SELECTStudentCode,StudentNameFROMStudentWHERENOTEXISTS(SELECT*FROMGradeWHEREStudent.StudentCode=Grade.StudentCode)2.數(shù)據(jù)插入語句INSERTINTO①向表中插入一條數(shù)據(jù)記錄。INSERTINTO表名[(字段名1,字段名2,……)]VALUES(表達式1,表達式2,……)其中:(1)字段可以是某幾個字段。表達式1、表達式2分別對應字段名1、字段名2,它們是所要添加的記錄的值。(2)如果表中的字段沒有在添加記錄語句中出現(xiàn),則對應的值為NULL。(3)如果在定義表結構時已經(jīng)說明了某個字段為必填字段(不能是空值)則在語句中必須為該字段添加對應的數(shù)值。(4)當插入一條完整的記錄時,可省略字段名,但字段值次序要與表中字段的次序一一對應?!纠?.38】向Grade表插入一條記錄?!纠?.39】向Student表插入一條記錄。INSERTINTOGradeVALUES('2102','113',90,'2012-12-20‘)INSERTINTOStudent(StudentCode,Sex,

StudentName,ClassCode)VALUES('3105','女','張琳','31‘)本例插入完整記錄,可省略字段名,但注意值要與表中字段次序一致。本例插入記錄的部分字段值,注意非空字段必須有值;字段次序可與表不同,但與值的對應順序一致。②從其他表提取一組記錄插入到目標表中。INSERTINTO表名[(字段1,字段2,……)]SELECT源字段名表FROM源表名[WHERE添加條件]【例4.40】向StudentTest表插入記錄,數(shù)據(jù)為Student中所有女同學。INSERTINTOStudentTestSELECTStudentCode,StudentName,Sex,LiveInDormFromStudentWHERESex='女’提示:此處數(shù)據(jù)表必須已經(jīng)存在,且其結構定義與SELECT語句返回的字段值類型一致。3.修改記錄語句UPDATEUPDATE表名SET字段名1=表達式1[,字段名2=表達式2……]WHERE

條件表達式實現(xiàn)對一條或多條符合條件記錄中某個或某些字段值的修改。提示:一個UPDATE語句可以更新多個字段值;如沒有WHERE子句,將更新數(shù)據(jù)表中所有記錄?!纠?.41】更新Student表中學號為“8101”的聯(lián)系電話為“67792280”【例4.42】更新Course表中信息,將所有開課學院為“計算機學院”的課程的實驗學時增加10%,上課學時增加10。UPDATEStudentSETTelephone='67792280'WHEREStudentCode='8101'UPDATECourseSETLabHour=LabHour*(1+0.1),ClassHour=ClassHour+10WHEREAcademy='計算機學院'4.刪除語句DELETEDELETEFROM表名[WHERE刪除條件]【例4.43】刪除Student表中學號為“3105”的記錄?!纠?.44】刪除Student表中平均成績低于70的學生。刪除指定表中滿足條件的一條或多條記錄。如果沒有WHERE子句,即沒有指定刪除條件,則該語句執(zhí)行后將刪除指定表中的所有記錄。DELETEFROMStudentWHEREStudentCode='3105'DELETEFROMStudentWHEREStudentCodeIN(SELECTStudentCodeFROMGrade

GROUPBYStudentCode

HAVINGAVG(Grade)<70)4.1.4T-SQL的運算功能和控制流程T-SQL雖然和高級語言不同,但它也有運算、控制等功能,以支持復雜的數(shù)據(jù)檢索和集合操縱。

1.標識符、常量和變量(1)標識符:由用戶定義的名稱,用來標識各種對象如服務器、數(shù)據(jù)庫、數(shù)據(jù)庫對象、變量等。第一個字符必須是字母

、下劃線(_)、@或#。注意:在SQLServer中,如果標識符中包含空格,要用雙引號(“”)或方括號([])擴起來。如:mytable不合法,必須將其表示為[mytable]或"mytable"。(2)常量:在程序運行過程中值不變的量。

注意:在T-SQL語句中不同類型常量的寫法數(shù)值型:直接寫。如:23,45.6字符串:用西文單引號擴起來。如:‘男’。如字符串包含單引號,則可以使用兩個單引號表示嵌入的單引號。

‘’’211’’

工程’---‘211’工程日期時間型:用西文單引號擴起來。如:'2008-08-08','2008-08-0820:08:08'Bit型:直接寫。如:0,1@@ERROR:返回最后執(zhí)行的Transact-SQL語句的錯誤代碼。(3)變量:在程序運行過程中其值可以被改變的量。1)變量的分類局部變量:由用戶定義和使用,其名稱前有一個@符號。全局變量:全局變量由系統(tǒng)定義和維護,其名稱前有兩個@符號。例如:@@ERROR:返回最后執(zhí)行的T-SQL語句的錯誤代碼。2)局部變量的定義和賦值DECLARE@局部變量名數(shù)據(jù)類型說明:如在一條語句中聲明多個變量,各變量之間用“,”分隔。局部變量被定義后其初始值為NULL。例如:DECLARE@xfloat,@varchar(8)該語句定義了變量@x是浮點實型,變量@var是長度為8的字符數(shù)據(jù)類型?!纠?.45】使用課程號變量和成績變量查詢Grade表中課程代碼為“105”且成績低于80分的記錄。

局部變量賦值的基本語法格式如下:SET@局部變量名=表達式SELECT@局部變量名=表達式DECLARE@codechar(3),@scoreNumeric(3,1)--變量@code表示課程號,@score表示成績SET@code='105'

--給@code賦值圖4.23變量查詢示例SELECT@score=80

--給@score賦值SELECT*--使用變量@code和@score查詢FROMGradeWHERECourseCode=@codeANDGrade<@score提示:變量類型要與Grade表中字段的類型一致,使用前要先賦值?!纠?.46】將學號為“1102”的學生姓名存放到變量@sname中。DECLARE@snamevarchar(16)SELECT@sname=(SELECTStudentName

FROMT_StudentWHEREStudentCode=‘1102')SELECT@snameas'姓名'

提示:SELECT語句可用于將單個值賦于一個變量。如果子查詢返回值有多個,則將最后一個返回值賦給變量;如果子查詢沒有返回值,變量就保留當前值。SET

@sname2.運算符和表達式(1)運算符1)算術運算符:+、-、*、/、模運算(%)2)比較運算符和邏輯運算符>=、<、<=、=、<>、!>、!<、!=BETWEENAND、NOTBETWEENANDIN、NOTINLIKE、NOTLIKEISNULL、ISNOTNULLNOT、AND、OR3)字符串連接運算符:+例如:‘ABCD’+‘1234’結果為:‘ABCD1234’例如:查詢Grade表中還未輸入成績的學生代號和課程代號。SELECT*FROMGradeWHEREGradeIS

NULL(2)表達式

表達式是由運算對象、運算符及圓括號組成。在SQL查詢分析器中可使用Select語句查看表達式的結果。例如:SELECT'ABCD'+'1234'

當一個表達式中有多個運算符時,運算符的優(yōu)先級決定運算的先后次序。(1)數(shù)學函數(shù):常用的數(shù)學函數(shù)及功能如表所示。3.常用函數(shù)RAND(n):返回0到1之間的隨機float值。n是種子值,如果沒有提供種子值,系統(tǒng)將生成它自己的不定種子值。如果用種子值調(diào)用RAND,則必須使用不定的種子值來生成隨機數(shù)。如果用同一種子值多次調(diào)用RAND,它將返回相同的生成值。ROUND(x,n):當n為正數(shù)時,x四舍五入為n所指定的小數(shù)位數(shù)。當n為負數(shù)時,x則按n所指定的在小數(shù)點的左邊四舍五入。例如:ROUND(878.586,

2)=878.590ROUND(878.586895,3)=878.587000

ROUND(878.586,0)=879.000

ROUND(878.586,-1)=880.000

ROUND(878.586,-3)=1000.000ROUND(878.586,-4)=.000函數(shù)名函數(shù)功能函數(shù)名函數(shù)功能ABS(x)計算x的絕對值SQRT(x)計算x的平方根ATN(x)計算x的反正切值SIGN(x)返回x的特征符號COS(x)計算x的余弦值TAN(x)計算x的正切值EXP(x)計算ex([n])產(chǎn)生[0,1)之間的隨機float值,n為正數(shù)LOG(x)計算自然對數(shù)lnxROUND(x,n)將x四舍五入為指定精度,n為小數(shù)位數(shù)SIN(x)計算x的正弦值表4.7常用數(shù)學函數(shù)(2)日期時間函數(shù):常用日期函數(shù)如表所示。SELECTYEAR(‘03/12/1998’)AS年份提示:在數(shù)據(jù)庫設計時,如將日期型字段的默認值設置為GetDate(),則在添加新記錄時,如果不賦值,自動用當前時間填入。SELECTDATEDIFF(year,'2000-01-01',getdate())SELECTGETDATE()AS今天的日期函數(shù)名函數(shù)功能DAY(x)返回指定日期中所表示的日,x是日期,例如:Day(‘2014-5-1’)=1MONTH(x)返回指定日期中所表示的月,例如:Month(‘2014-5-1’)=5YEAR(x)返回指定日期中所表示的年份,例如:YEAR(‘2014-5-1’)=2014GETDATE()返回當前系統(tǒng)日期和時間(3)字符串函數(shù):常用字符串函數(shù)如表所示。SELECTLEN(‘Sun’),LEN(‘中國北京’)

--結果分別為數(shù)值3和4SELECTSUBSTRING(‘VB語言程序設計’,3,2)

--結果為字符串“語言”SELECTREPLACE('數(shù)據(jù)庫系統(tǒng)','系統(tǒng)','應用')--結果為字符串“數(shù)據(jù)庫應用”函數(shù)名函數(shù)功能函數(shù)名函數(shù)功能ASCII(s)返回字符串s最左端字符的ASCII碼STR(n)將數(shù)字數(shù)據(jù)n轉換為字符串CHAR(n)將ASCII轉換為字符SPACE(n)返回n個空格LEFT(s,n)返回字符串s左邊的n個字符SUBSTRING(s,m,n)返回字符串s起始m長度為n的子串RIGHT(s,n)返回字符串s右邊的n個字符LOWER(s)將字符串中的字母轉換為小寫字母LEN(s)返回字符串s的長度(字符的個數(shù))UPPER(s)將字符串中的字母轉換為大寫字母LTRIM(s)刪除字符串s開始處的空格REPLACE(s1,s2,s3)用s3替換s1中包含的s2RTRIM(s)刪除字符串s結尾處的空格SELECTstr(123.4,5)SELECTstr(123.4,5,1)SELECTstr(123.4,2)str(float_expression[,length[,decimal]])(4)聚合函數(shù)函數(shù)名函數(shù)功能AVG([ALL|DISTINCT]expression)計算某一字段的平均值(此字段的值必須是數(shù)值型)COUNT([ALL|DISTINCT]expression)統(tǒng)計某一字段的個數(shù)MAX([ALL|DISTINCT]expression)查找某一字段的最大值MIN([ALL|DISTINCT]expression)查找某一字段的最小值SUM([ALL|DISTINCT]expression)計算某一字段的總和(此字段的值必須是數(shù)值型)聚合函數(shù)對一組值進行計算并返回一個結果,常用于對記錄的分類匯總,聚合函數(shù)經(jīng)常與SELECT語句的GROUPBY子句一同使用。常用聚合函數(shù)如下:T-SQL語言也提供了一些流程控制語句,使得對數(shù)據(jù)庫中數(shù)據(jù)的檢索、更新、插入等操作更加方便。

BEGIN…END語句多條T-SQL語句使用BEGIN…END組合起來形成一個語句塊。BEGIN…END可以嵌套使用。4.流程控制語句BEGINSQL語句1SQL語句2…ENDIF條件表達式

SQL語句1[ELSE

SQL語句1](2)IF…ELSE語句通過判定給定的條件來決定執(zhí)行哪條語句或語句塊。說明:1)首先計算條件表達式的值,如果為TRUE,則執(zhí)行IF后面的語句塊,否則執(zhí)行ELSE后面的語句塊。2)如果是單分支流程,可不含ELSE。3)如果條件表達式中包含SELECT語句,則必須用圓括號將SELECT語句括起來。

【例4.47】統(tǒng)計學號為“1102”的學生的選課總數(shù),如果不少于三門課就報告選課門數(shù),否則顯示其選修的課程信息,并提示選課太少。

USESchoolDECLARE@cnsmallint,@textvarchar(100)SET@cn=(SELECTcount(StudentCode)FROMGradeWHEREStudentCode=‘1102’)

--查選課門數(shù)IF@cn>=3

SET@text=‘你選了’+LTRIM(STR(@cn))+’門課,很好!’ELSE

BEGIN

SELECT*FROMGradeWHEREStudentCode=‘1102’

--查詢報告選課信息

SET@text=‘你選了’+LTRIM(STR(@cn))+’門課,選課太少,加油!’

ENDSELECT@textAS選課提示--查詢報告選課提示信息WHILE條件表達式

SQL語句1[BREAK]

SQL語句2[CONTINUE](3)WHILE語句實現(xiàn)一條SQL語句或SQL語句塊重復執(zhí)行。說明:計算條件表達式的值,如果為TRUE,則執(zhí)行WHILE后的語句塊。重復上述過程,當條件表達式的值為False時,結束WHILE語句。2)BREAK為從本層WHILE循環(huán)中退出,當存在多層循環(huán)嵌套時,使用BREAK語句只能退出其所在的內(nèi)層循環(huán),然后重新開始外層的循環(huán)。3)CONTINUE為結束本次循環(huán),開始下一次循環(huán)的判斷?!纠?.48】調(diào)整課程號為“105”的課程成績。當該課平均成績小于80時,為每個同學的成績加5分,循環(huán)操作直到最高分大于等于95分。WHILE(SELECTAVG(Grade)FROMGradeWhereCourseCode='105')<80IF(SELECTMAX(Grade)FROMGrade

WHERECourseCode='105')<95BEGIN

UPDATEGradeSETGrade=Grade+5WHERECourseCode='105'

CONTINUEENDELSEBREAKRETURN表達式

(4)RETURN語句使程序從一個查詢或存儲過程中無條件返回,并返回表達式的值,其后的語句不再執(zhí)行。(5)CASE語句

CASE語句是多分支的選擇語句。簡單CASE函數(shù)形式:將某個表達式與一組簡單表達式進行比較以確定結果。CASE搜索函數(shù)形式:計算一組條件表達式以確定結果。

1)簡單CASE函數(shù)CASE輸入表達式WHEN情況表達式THEN結果表達式...[ELSE結果表達式]END1)當輸入表達式的值與某一個WHEN子句的情況表達式的值相等時,就返回該WHEN子句中結果表達式的值。2)如果所有都不相等,則返回ELSE子句后的結果表達式的值。若沒有ELSE子句,則返回NULL值。【例4.49】查詢1994年出生的男同學的住校情況。SELECTStudentNameAS'姓名',

CASELiveInDorm

WHEN0THEN'未住校'

WHEN1THEN'住校'

ENDAS'是否住校'FROMStudentWHERESex='男'ANDYEAR(Birthday)=19942)CASE搜索函數(shù)CASE

WHEN條件表達式THEN結果表達式

...

[ELSE結果表達式]END【例4.50】統(tǒng)計每個學生平均成績并劃分等級。

SELECTStudentCodeAS'學號',STR(AVG(Grade),5,2)AS'平均成績',CASE

WHENAVG(Grade)>=90THEN'A'

WHENAVG(Grade)>=80THEN'B'

WHENAVG(Grade)>=70THEN'C'

WHENAVG(Grade)>=60THEN'D'

WHENAVG(Grade)<60THEN'E'ENDAS'等級'FROMGradeGROUPBYStudentCode

說明:按順序計算WHEN子句的條件表達式,當布爾表達式的值為TRUE,則返回THEN后面的結果表達式的值,然后跳出CASE語句。4.2視圖視圖是數(shù)據(jù)庫的外模式,通常用來為用戶集中數(shù)據(jù)、簡化用戶的數(shù)據(jù)查詢。視圖是一個虛擬表,其內(nèi)容來自對數(shù)據(jù)表的查詢結果。和數(shù)據(jù)表一樣,視圖也是二維表結構。視圖也可作為一種安全機制,允許用戶通過視圖訪問數(shù)據(jù),而不授予用戶直接訪問某些基礎表的權限。:4.2.1創(chuàng)建視圖在SQLServer中創(chuàng)建視圖主要有兩種方式:(1)在ManagementStudio中使用向導創(chuàng)建視圖;(2)通過執(zhí)行視圖定義SQL語句CREATEVIEW創(chuàng)建視圖。創(chuàng)建視圖時必須遵循以下原則:只能在當前數(shù)據(jù)庫中創(chuàng)建視圖。視圖在數(shù)據(jù)庫中作為一個對象存儲,視圖名稱不得與數(shù)據(jù)庫中的表重名。1.在ManagementStudio中使用向導創(chuàng)建視圖【例4.51】在數(shù)據(jù)庫School中建立視圖V_StudentGrade,查詢學生姓名、課程名和成績。①

展開“School/視圖”,可看到數(shù)據(jù)庫中已有一些系統(tǒng)視圖。用鼠標右擊“視圖”,選擇“新建視圖”菜單可打開“添加表”對話框。②選擇與視圖有關的表、視圖或函數(shù)(同時按Ctrl或Shift鍵可選擇多項),單擊“添加”按鈕;或直接雙擊要添加的表,即可將其添加到視圖設計窗口中。本例添加數(shù)據(jù)表Student、Course和Grade。單擊“關閉”按鈕,進入視圖設計窗口。③在上格單擊每個表字段前的復選框,可將該字段添加到視圖中,也可在第二個窗格中選擇視圖字段,并可指定列的別名、排序方式和規(guī)則等,在選擇過程中,第三個窗格中的SELECT語句也會隨之自動改變。上格是表及其關系窗格中格是為視圖選擇表中列的網(wǎng)格下格是結果窗格SQL語句窗格提示:可省略第②~④步驟,直接在第三個窗格中輸入實現(xiàn)查詢的SELECT語句。④單擊工具欄上的“”按鈕執(zhí)行,視圖的查詢結果顯示在結果窗格中。⑤單擊工具欄上的“”按鈕,在彈出的“另存為”對話框中為視圖命名,本例輸入“V_StudentGrade”,單擊【確定】按鈕保存視圖,從而完成視圖創(chuàng)建。①在創(chuàng)建視圖的“添加表”對話框中選擇“視圖”選項卡,添加視圖V_StudentGrade到視圖設計器中。

【例4.52】在數(shù)據(jù)庫School中,建立視圖V_StudentAvgGradeExcellent,選拔優(yōu)培生(平均成績大于等于90的學生),并要求按平均成績從高到低排列。該例可參照上例方法在基本表Student和Grade上創(chuàng)建。由于視圖的內(nèi)容也可以來自另一個視圖,這里基于視圖V_StudentGrade創(chuàng)建。②在“視圖設計”窗口的上格,首先為視圖選擇“姓名”和“成績”字段。右擊第二個窗格的字段“姓名”,選擇快捷菜單的“添加分組依據(jù)”;在“成績”行的“分組依據(jù)”列選“Avg”,篩選器列輸入“>=90”,排序類型列選“降序”。③單擊工具欄上的“”按鈕可查看結果,保存視圖為“V_StudentAvgGradeExcellent”。2.使用SQL語句創(chuàng)建視圖在查詢編輯窗口中執(zhí)行SQL語句來完成視圖創(chuàng)建CREATEVIEW視圖名稱ASSELECT查詢語句【例4.53】創(chuàng)建一個性別為“男”的學生視圖V_StudentSexMale,包括學生的學號、姓名、班號和性別。CREATEVIEWV_StudentSexMaleASSELECTStudentCodeAs姓名,StudentNameAs姓名,ClassCodeAs班號,SexAs性別FROMStudentWHERESEX='男'SELECT課程名稱,AVG(成績)AS平均分FROMV_StudentGradeGROUPBY課程名稱HAVING課程名稱='大學英語'4.2.2使用視圖創(chuàng)建后的視圖與表的用法相同,可以通過視圖查詢和更新數(shù)據(jù)庫。1.查詢視圖操作【例4.54】在數(shù)據(jù)庫School中,查詢視圖V_StudentGrade統(tǒng)計“大學英語”課程的平均分。2.更新視圖操作通過視圖來插入、刪除和修改數(shù)據(jù)。由于視圖是不實際存儲數(shù)據(jù)的虛表,因此對視圖的更新最終要轉換為對基本表的更新。

注意并不是所有的視圖都可以執(zhí)行各種更新操作。

如果視圖所依賴的基本表有多個時,對于更新操作有以下限制:①不能向視圖添加數(shù)據(jù),因為這將影響多個基本表;②一次只能修改一個基本表中的數(shù)據(jù);③不能通過視圖刪除數(shù)據(jù)。視圖更新方法:在ManagementStudio選中要更新的視圖,打開即可更新;也可通過執(zhí)行SQL語句更新視圖。但要更新的視圖必須符合更新規(guī)則,否則系統(tǒng)提示出錯?!纠?.55】更新V_StudentSexMale。1)向視圖V_StudentSexMale中插入一個新的學生記錄:('1104','趙謙','11','男')

INSERTINTOV_StudentSexMaleVALUES('1104','趙謙','11','男')說明:向視圖V_StudentSexMale添加記錄的命令實際上是對數(shù)據(jù)表Student添加記錄。2)修改該記錄:將“趙謙”名字改為“趙廉”。UPDATEV_StudentSexMaleSETStudentName=‘趙廉’WHEREStudentName=‘趙謙’說明:對視圖V_StudentSexMale修改,實際是修改Student表中相關的記錄。4.2.3修改和刪除視圖1.修改視圖:修改視圖的定義,即修改視圖中指定字段的字段名、別名、表名、是否輸出等屬性。在ManagementStudio中右擊要修改的視圖,選擇“修改”命令,在視圖設計窗口進行修改;直接修改視圖定義語句。2.刪除視圖在ManagementStudio中右擊要刪除的視圖,選擇“刪除”命令,在“刪除對象”對話框中,按“確定”按鈕即可刪除相應視圖。提示:刪除視圖對基本表沒有任何影響,因為視圖只是個虛擬表。存儲過程是T-SQL語句的集合,它作為數(shù)據(jù)庫對象之一被存儲在數(shù)據(jù)庫中,用戶的應用程序調(diào)用存儲過程可實現(xiàn)對數(shù)據(jù)庫的訪問。

4.3存儲過程存儲過程的作用和使用方式類似于一些編程語言中的過程。由應用程序調(diào)用執(zhí)行,可以接受輸入?yún)?shù),并以輸出參數(shù)的形式將多個值返回給調(diào)用它的程序。使用存儲過程有以下優(yōu)點:可以在一個存儲過程中執(zhí)行多條SQL語句??梢酝ㄟ^輸入?yún)?shù)的變化調(diào)用存儲過程進行動態(tài)執(zhí)行存儲過程在創(chuàng)建時就在服務器端進行了編譯,節(jié)省SQL語句的運行時間。提供了安全機制,它限制了用戶訪問SQL語句的權利,只為特定用戶開放存儲過程。1.使用SQL語句創(chuàng)建存儲過程

4.3.1創(chuàng)建存儲過程CREATEPROC[EDURE]存儲過程名{@形式參數(shù)數(shù)據(jù)類型}[=默認值][OUTPUT]ASSQL語句1…SQL語句n說明:

1)“形式參數(shù)”名稱必須符合標識符規(guī)則;2)OUTPUT表示該參數(shù)是可以返回的,可將信息返回調(diào)用者;3)“默認值”表示輸入?yún)?shù)的默認值,該值是常量或NULL,如果定義了默認值,不必提供實參,存儲過程就可執(zhí)行;4)如有多個參數(shù),可依次列出,用逗號“,”隔開。執(zhí)行存儲過程:EXEC[UTE]存儲過程名[[@形參=]實參值|@變量[OUTPUT]|[DEFAULT]]說明:

1)“@形參”是創(chuàng)建存儲過程時定義的形參名;2)“實參值”是輸入?yún)?shù)的值;3)“@變量”表示用來保存參數(shù)或者返回參數(shù)的變量;OUTPUT表示指定參數(shù)為返回參數(shù);4)DEFAULT表示使用該參數(shù)的默認值作為實參

溫馨提示

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

評論

0/150

提交評論