數(shù)據(jù)庫系統(tǒng)原理及應(yīng)用實驗全套_第1頁
數(shù)據(jù)庫系統(tǒng)原理及應(yīng)用實驗全套_第2頁
數(shù)據(jù)庫系統(tǒng)原理及應(yīng)用實驗全套_第3頁
數(shù)據(jù)庫系統(tǒng)原理及應(yīng)用實驗全套_第4頁
數(shù)據(jù)庫系統(tǒng)原理及應(yīng)用實驗全套_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、數(shù)據(jù)庫系統(tǒng)原理及應(yīng)用實 驗 指 導(dǎo) 書(本科)福建工程學(xué)院 計算機(jī)與信息科學(xué)系計算機(jī)軟件與理論教研室 淺諾制作 QQ:405790115 2012年5月目 錄實驗一 數(shù)據(jù)定義語言1實驗二 SQL Sever中的單表查詢2實驗三 SQL Serve中的連接查詢3實驗四 SQL Serve的數(shù)據(jù)更新、視圖4實驗五 數(shù)據(jù)控制(完整性與安全性)5實驗六 語法元素與流程控制7實驗七 存儲過程與用戶自定義函數(shù)9實驗八 觸發(fā)器10實驗一 數(shù)據(jù)定義語言一、實驗?zāi)康?. 熟悉SQL Server2000/2005查詢分析器。2. 掌握SQL語言的DDL語言,在SQL Server2000/2005環(huán)境下采用Tr

2、ansact-SQL實現(xiàn)表的定義、刪除與修改,掌握索引的建立與刪除方法。3. 掌握SQL Server2000/2005實現(xiàn)完整性的六種約束。二、實驗內(nèi)容1. 啟動SQL Server2000/2005查詢分析器,并連接服務(wù)器。2. 創(chuàng)建數(shù)據(jù)庫: (請先在D盤下創(chuàng)建DB文件夾)1)在SQL Server2000中建立一個StuDB數(shù)據(jù)庫: 有一個數(shù)據(jù)文件:邏輯名為StuData,文件名為“d:dbStuDat.mdf”,文件初始大小為5MB,文件的最大大小不受限制,文件的增長率為2MB;有一個日志文件,邏輯名為StuLog,文件名為“d:dbStuLog.ldf”,文件初始大小為5MB,文件的

3、最大大小為10MB,文件的增長率為10% 2)刷新管理器查看是否創(chuàng)建成功,右擊StuDB查看它的屬性。3. 設(shè)置StuDB為當(dāng)前數(shù)據(jù)庫。4. 在StuDB數(shù)據(jù)庫中作如下操作:設(shè)有如下關(guān)系表S: S(CLASS,SNO, NAME, SEX, AGE),其中:CLASS為班號,char(5) ;SNO為座號,char(2);NAME為姓名,char(10),設(shè)姓名的取值唯一;SEX為性別,char(2) ;AGE為年齡,int,表中主碼為班號+座號。寫出實現(xiàn)下列功能的SQL語句。(1) 創(chuàng)建表S;(2) 刷新管理器查看表是否創(chuàng)建成功;(3) 右擊表S插入3個記錄:95031班25號李明,男性,2

4、1歲; 95101班10號王麗,女性,20歲; 95031班座號為30,名為鄭和的學(xué)生記錄;(4) 將年齡的數(shù)據(jù)類型改為smallint; (5) 向S表添加“入學(xué)時間(comedate)”列,其數(shù)據(jù)類型為日期型(datetime);(6) 對表S,按年齡降序建索引(索引名為inxage);(7) 刪除S表的inxage索引;(8) 刪除S表;5. 在StuDB數(shù)據(jù)庫中,(1)按照數(shù)據(jù)庫系統(tǒng)概論(第四版)P82頁的學(xué)生課程數(shù)據(jù)庫創(chuàng)建STUDENT、COURSE和SC三張表,每一張表都必須有主碼約束,合理使用列級完整性約束和表級完整性。并輸入相關(guān)數(shù)據(jù)。(2)將StuDB數(shù)據(jù)庫分離,在D盤下創(chuàng)建D

5、B文件夾下找到StuDB數(shù)據(jù)庫的兩個文件,進(jìn)行備份,后面的實驗要用到這個數(shù)據(jù)庫。3、 實驗總結(jié)通過本次實驗大致熟悉了SQL Server2000/2005/2008查詢分析器.對SQL Server2000/2005實現(xiàn)完整性的六種約束有所了解,但是對表的關(guān)聯(lián)還不是很明白,我會去看書加深理解。實驗二 SQL Sever中的單表查詢一、實驗?zāi)康模?. 掌握SQL語言的DML子語言,在SQL Server2000/2005環(huán)境下采用Transact-SQL的SELECT語句熟練掌握各種單表查詢方法。二、實驗內(nèi)容:(一) 附加上次實驗備份的StuDB數(shù)據(jù)庫和SPJ數(shù)據(jù)庫。(二) 按照數(shù)據(jù)庫系統(tǒng)概論P(yáng)

6、82頁中的學(xué)生課程數(shù)據(jù)庫及數(shù)據(jù)實現(xiàn)以下查詢:1.查詢所有課程的課號,課程名。2. 查詢計算機(jī)系年齡不到21歲的所有男生的姓名和出生年份。3. 查詢已被學(xué)生所選課程的課程號。4. 查詢所有有成績的學(xué)生學(xué)號和課程號,并為各列分別取相應(yīng)的中文別名。(三) 按照數(shù)據(jù)庫系統(tǒng)概論P(yáng)75頁中的SPJ數(shù)據(jù)庫及數(shù)據(jù)實現(xiàn)以下查詢:1.查詢地點在北京、上海的供應(yīng)商代碼和供應(yīng)商名字。2. 查詢供應(yīng)商名中包含方這個漢字的供應(yīng)商信息。3. 查詢零件名以刀字結(jié)尾,包含三個漢字的零件信息。4. 查詢使用了供應(yīng)商S1所供應(yīng)零件的工程項目數(shù)。5. 查詢各個供應(yīng)商所供應(yīng)的零件的總數(shù),要求對查詢結(jié)果降序顯示。6. 查詢供應(yīng)了3個以上

7、項目的供應(yīng)商代碼和供應(yīng)的項目總數(shù)。加上group by直接用COUNT(JNO)>3結(jié)果一致三、實驗要求:1. 根據(jù)實驗內(nèi)容認(rèn)真寫好實驗報告,記錄每個步驟正確的Transact-SQL命令。2. 無須記錄正確的查詢結(jié)果。但要求記錄實驗過程中發(fā)生的有學(xué)習(xí)意義的錯誤及錯誤信息。4、 實驗小結(jié)通過本次實驗,基本上掌握了SQL Sever中的單表查詢,但對group by 語句不是很了解。還有where子句與having短語的區(qū)別,作用對象不同,where作用于基本表或視圖,having作用于組,這里的組怎么理解?實驗三 SQL Serve中的連接查詢一、 實驗?zāi)康模?. 掌握采用Transac

8、t-SQL實現(xiàn)連接查詢。2. 掌握等值連接(自然連接)、自身連接、外連接和復(fù)合條件連接的查詢方法。二、 實驗內(nèi)容:按照數(shù)據(jù)庫系統(tǒng)概論P(yáng)82頁中的學(xué)生課程數(shù)據(jù)庫和P75頁中的SPJ數(shù)據(jù)庫完成以下查詢(1) 查詢使用紅色零件的工程名稱。-(1)查詢使用紅色零件的工程名稱。SELECT DISTINCT JNAMEFROM P,J,SPJWHERE COLOR='紅'AND P.PNO=SPJ.PNO AND J.JNO=SPJ.JNO;(2) 查詢每個工程的信息及相應(yīng)的供應(yīng)信息(包括列出尚未被供應(yīng)零件的那些工程)。-(2)查詢每個工程的信息及相應(yīng)的供應(yīng)信息(包括列出尚未被供應(yīng)零件的

9、那些工程)。SELECT DISTINCT *FROM J LEFT OUTER JOIN SPJ ON(J.JNO=SPJ.JNO);(3) 查詢供應(yīng)工程J1紅色零件的供應(yīng)商號SNO,請用兩種方法實現(xiàn)。-(3)查詢供應(yīng)工程J1紅色零件的供應(yīng)商號SNO,請用兩種方法實現(xiàn)。第一種:SELECT DISTINCT SNOFROM P,SPJWHERE COLOR='紅' AND P.PNO=SPJ.PNO AND JNO='J1'第二種:SELECT SNOFROM SPJWHERE PNO IN (SELECT PNO FROM P WHERE COLOR = &

10、#39;紅' )AND JNO='J1'(4) 求供應(yīng)工程J1零件的供應(yīng)商的完整信息。-(4)求供應(yīng)工程J1零件的供應(yīng)商的完整信息。SELECT *FROM SWHERE SNO IN (SELECT SNO FROM SPJ WHERE JNO='J1' );(5) 查詢使用北京供應(yīng)商供應(yīng)零件的工程信息。(6) 查詢選修3號課程且成績在85分以上的所有學(xué)生。(7) 查詢先行課的學(xué)分為4的課程信息。(8) 查詢課程與其間接先行課的名稱。(9) 查詢其他系中比計算機(jī)科學(xué)系所有學(xué)生年齡都小的學(xué)生完整信息,用兩種方法實現(xiàn)。(10) 查詢其他系中比計算機(jī)科學(xué)系某

11、一學(xué)生年齡大的學(xué)生姓名與年齡,用兩種方法實現(xiàn)。(11) (可選)查詢至少用了供應(yīng)商S1所供應(yīng)的所有零件的工程號JNO,用帶EXISTS謂詞的子查詢實現(xiàn)。SELECT JNOFROM JWHERE EXISTS (SELECT * FROM SPJ WHERE JNO=J.JNO AND SNO='S1')(12) (可選)查詢使用了全部零件的工程號JNO,用帶EXISTS謂詞的子查詢實現(xiàn)。-不會(13) (可選)查詢所有使用了P3零件的工程號JNO,用帶EXISTS謂詞的子查詢實現(xiàn)。SELECT JNOFROM JWHERE EXISTS (SELECT * FROM SPJ

12、WHERE JNO=J.JNO AND PNO='P3')三、實驗要求:1. 寫出正確的Transact-SQL命令。2. 無須記錄正確的查詢結(jié)果。要求記錄實驗過程中發(fā)生的有學(xué)習(xí)意義的錯誤及錯誤信息。四、實驗小結(jié)通過實驗大致掌握了等值連接(自然連接)、自身連接、外連接和復(fù)合條件連接的查詢方法。實驗過程中最糾結(jié)的就是12題,使用了全部零件就是說pno從p1到p6在同一個工程中都有,那么這該怎么表示呢?實驗四 SQL Serve的數(shù)據(jù)更新、視圖 實驗時間:2012-3-27 實驗地點:c2-101一、實驗?zāi)康模?. 掌握采用Transact-SQL實現(xiàn)嵌套查詢。2. 掌握采用Tra

13、nsact-SQL實現(xiàn)數(shù)據(jù)更新。3. 掌握采用Transact-SQL實現(xiàn)視圖的定義、刪除、查詢與更新。二、實驗內(nèi)容按照數(shù)據(jù)庫系統(tǒng)概論P(yáng)82頁中的學(xué)生課程數(shù)據(jù)庫和P75頁中的SPJ數(shù)據(jù)庫完成以下操作:(一)數(shù)據(jù)更新1)一個學(xué)生:張紅,女,200215135,信息系,20歲2) 一個選課記錄:200215135,1,成績未定3) 算機(jī)系所有學(xué)生的年齡加1歲4) 刪除所有200215130學(xué)生的選課記錄5)刪除所有姓張的同學(xué)的信息6) 行設(shè)計案例對學(xué)生課程數(shù)據(jù)庫的數(shù)據(jù)更新,并觀察是否有違反數(shù)據(jù)的完整性約束。(二)視圖1)創(chuàng)建一個學(xué)生成績統(tǒng)計視圖,包括學(xué)號,姓名,選課門數(shù),平均分,最高分,最低分2)

14、利用上題所建視圖實現(xiàn):查詢成績高于自己平均成績的選課記錄查詢每個同學(xué)獲得最高分的選課記錄3)請為三建工程項目建立一個供應(yīng)情況的視圖,包括供應(yīng)商代碼(SNO)、零件代碼(PNO)、供應(yīng)數(shù)量(QTY)。 建立該視圖: 針對該視圖完成下列查詢:找出三建工程項目使用的各種零件代碼及其數(shù)量; 找出供應(yīng)商S1的供應(yīng)情況; 4、 實驗小結(jié)刪除姓張的全部信息時忽視了關(guān)系的完整性,沒意識到表級完整性約束條件,導(dǎo)致不能直接在Student表中刪除記錄。先把SC表中的有關(guān)姓張的學(xué)生先給刪除掉,解除關(guān)聯(lián),再從student表中刪除相關(guān)信息。對于group by的使用仍然不是很清楚。如以上創(chuàng)建視圖的時候為什么要grou

15、p by student.Sno,sname等等實驗五 數(shù)據(jù)控制(完整性與安全性)一、實驗?zāi)康模?. 通過實驗加深對數(shù)據(jù)庫完整性與數(shù)據(jù)庫安全性的理解;2. 掌握SQLServer對數(shù)據(jù)進(jìn)行安全性控制的方法二、實驗內(nèi)容和要求(一)數(shù)據(jù)庫完整性某公司使用數(shù)據(jù)庫進(jìn)行內(nèi)部管理:表Employees存儲雇員的代號(整型,標(biāo)識位,種子1000001,增量為1,主鍵)、身份證號碼(18個字符)、名字(最長20個字符)和工資等信息;表Departments存儲部門的部門號(2個字符,唯一,主鍵)、部門名稱(30個字符)等信息;表Work每一行表示某雇員在某部門工作過及其開始工作時間和備注。請寫出創(chuàng)建這三個表的

16、SQL語句,要保證:工資的值大于0,身份證號碼唯一,開始工作時間非空,默認(rèn)值為當(dāng)前時間。-創(chuàng)建表EmployeesCREATE TABLE Employees(Eno INT IDENTITY(1000001,1)PRIMARY KEY, EID CHAR(18)CHECK(Len(Ltrim(RTRIM(EID)=18)UNIQUE, Ename Char(20)not null, Egz int CHECK(Egz>0)-創(chuàng)建表DepartmentsCREATE TABLE Departments(Dno CHAR(2)PRIMARY KEY, Dname CHAR(30)UNIQU

17、E)-創(chuàng)建表WorkCREATE TABLE Work(Eno INT, Dname CHAR(30), WorkTime datetime default getdate() not null, Memo char(100),PRIMARY KEY(Eno,Dname),FOREIGN KEY(Eno)REFERENCES Employees(Eno),FOREIGN KEY(Dname)REFERENCES Departments(Dname)(2) 以sa登錄查詢分析器,輸入下列代碼并執(zhí)行第1行 exec sp_addlogin 's1','123'第2行

18、 use StuDB 第3行 exec sp_grantdbaccess 's1','u1'第4行 grant select,insert,update on student to public第5行 grant all on student to u1第6行 revoke select on student to u1問:1) 第1行創(chuàng)建了一個名為s1登錄帳戶,請問'123'的含義是什么? 賬戶s1的密碼2) 第3行將登錄帳戶s1映射到數(shù)據(jù)庫用戶u1上,它將作為哪個數(shù)據(jù)庫的用戶? StuDB數(shù)據(jù)庫3) 請解釋4到6行的含義第4行 grant s

19、elect,insert,update on student to public -把在student表上查詢,插入修改的權(quán)限給所有用戶第5行 grant all on student to u1 -在student上的全部權(quán)限給u1第6行 revoke select on student to u1 -回收u1對student表的查詢權(quán)限4)在查詢分析器中以s1帳戶連接服務(wù)器,能否對學(xué)生課程數(shù)據(jù)庫的student表進(jìn)行select操作,為什么?(提示:廢除權(quán)限是刪除已授予的權(quán)限,并不妨礙用戶、組或角色從更高級別繼承已授予的權(quán)限。因此,如果廢除用戶查看表的權(quán)限,不一定能防止用戶查看該表,因為已

20、將查看該表的權(quán)限授予了用戶所屬的角色。)可以select 因為s1從超級用戶那里也被被授予select的權(quán)限5) 切換回sa用戶的查詢窗口,輸入下面代碼并執(zhí)行deny select on student to u1請問該代碼含義?取消u1的查詢權(quán)限再切換至s1的查詢窗口,能不能對student 表進(jìn)行查詢操作?為什么?不能,因為角色u1select已經(jīng)被回收了,這條命令是把s1從超級用戶那里獲得的select權(quán)限也回收了,所以不能進(jìn)行查詢操作了。(三)請完成以下操作,并記錄完整語句。在實驗過程注意驗證語句的執(zhí)行效果。(1)需要為學(xué)生課程數(shù)據(jù)庫,創(chuàng)建一用戶,該用戶以“SQL Server身份驗證

21、”方式登錄SQL Server 服務(wù)器的賬號為學(xué)生自己的姓名,密碼為“123”。exec sp_addlogin 'xiezhenjia' , '123'use studb(2)給該登錄用戶映射到數(shù)據(jù)庫用戶user2上,并賦予該用戶對student表的sno、sname兩列的查詢權(quán)限,對sc表的所有操作權(quán)限及對course的查詢權(quán)限。(請先執(zhí)行revoke select on student from public Revoke all on sc from public注:新建用戶自動被加入到public角色中)revoke select on student

22、 from publicRevoke all on sc from publicexec sp_grantdbaccess 'xiezhenjia','user2'grant select(sno,sname)on studentto user2grant select,update,delete,inserton scto user2grant selecton courseto user2(3) 請分析、驗證數(shù)據(jù)庫用戶user2的權(quán)限。1)、對student的sno以及sname有查詢權(quán)限2)、對sc表有所有權(quán)限3)、對course有查詢權(quán)限(4) 用戶us

23、er2授予對course表的插入操作權(quán)限,并允許將此權(quán)限授予其它用戶grant inserton courseto user2with grant option(5) 收回授予user2對sc表的所有權(quán)限r(nóng)evoke select,insert,delete,updateon scfrom user2(6) 創(chuàng)建一個角色 R1create role r1(7) 然后使用GRANT語句,使角色R1擁有SC表的SELECT、UPDATE、INSERTgrant select,update,inserton scto r1(8) 將這個角色授予user2。使它具有角色R1所包含的全部權(quán)限。grant

24、 r1to user2三、實驗要求:1) 寫出正確的Transact-SQL命令。2) 無須記錄正確的查詢結(jié)果。要求記錄實驗過程中發(fā)生的有學(xué)習(xí)意義的錯誤及錯誤信息。四、實驗小結(jié)剛開始在機(jī)房里面做的時候附加進(jìn)來的數(shù)據(jù)庫屬性是只讀的,不知道是什么情況。就是沒有把錯誤記錄下來。通過實驗對數(shù)據(jù)的安全性更為熟悉。實驗六 語法元素與流程控制一、實驗?zāi)康模?) 掌握Transact-SQL局部變量的聲明、賦值和使用方法以及全局變量的運(yùn)用方法,掌握Transact-SQL的局部變量的作用域概念。2) 掌握Transact-SQL的控制流語言的使用方法。3) 掌握與控制流語言語句一起使用的其它 Transact

25、-SQL 語句:CASE、/*.*/(注釋)、-(注釋)、PRINT。二、實驗內(nèi)容和要求1、使用局部變量、全局變量(1)定義一個int的整型變量,為其賦值45,并顯示變量的值。declare var int set var=45select var 變量go(2)定義一個長度為20的可變長度型字符變量,為其賦值“Welcome to FJUT”, 并顯示變量的值。declare var1 varchar(20)set var1='Welcome to FJUT'select var1 字符變量go(3)在批處理中聲明兩個局部變量ssex和sdept并對它們賦值,對Student

26、表進(jìn)行查詢,要求兩局部變量在SELECT 語句的 WHERE 子句中被使用,查詢的要求是性別為女或所在系為IS系的那些學(xué)生。declare ssex char(2),sdept char(20)set ssex='女'set sdept='IS'select * from studentwhere ssex=ssex or sdept=sdeptgo(4)查詢當(dāng)前數(shù)據(jù)庫服務(wù)器名。select SERVERNAME結(jié)果:(5)查詢當(dāng)前數(shù)據(jù)庫管理系統(tǒng)版本。select VERSION(6)在student表中執(zhí)行所有學(xué)生年齡加1歲語句,并用 ROWCOUNT 來檢測

27、是否有發(fā)生更改的行。update studentSET sage=sage+1;select ROWCOUNT2函數(shù)的使用(1) 數(shù)學(xué)函數(shù)的使用分別用函數(shù)求出-3的絕對值,16的平方根,5的三次方。declare var1 int,var2 real,var3 intset var1=Abs(-3)set var2=Sqrt(16)set var3=Power(5,3)select var1 '-3的絕對值',var2 '16的平方根',var3 '5的三次方'go(2) 字符串函數(shù)的使用1)分別將字符串'china'、'

28、MACHINE'轉(zhuǎn)換成大寫、小寫字母;select upper('china')select lower('MACHINE')2)去掉字符串' machine '左邊的空格,右邊與'press'連接起來;select ltrim(' machine ')+'press'(3) 日期、時間函數(shù)的使用1)返回系統(tǒng)當(dāng)前日期并以整數(shù)形式返回當(dāng)前日期的年份、月份、日;select year(getdate() 年,month(getdate() 月,day(getdate() 日2)返回給定日期“20

29、06-2-21”與當(dāng)前日期相差的天數(shù)。select datediff(day,'2006-2-21',getdate() (4) 系統(tǒng)函數(shù)與元數(shù)據(jù)函數(shù)的使用顯示正在使用的用戶名select USER_name()3編寫較復(fù)雜的Transact-SQL程序1) 在 SELECT 語句中,CASE 搜索函數(shù)允許根據(jù)比較值在結(jié)果集內(nèi)對值進(jìn)行替換。要求仿照數(shù)據(jù)庫概論的sc表,根據(jù)學(xué)生的成績范圍將成績(grade 列)顯示為文本注釋。(要求:60分,文本注釋為“不及格”,6070,“及格”,7080,“中”,8090,“良”,90100,“優(yōu)”)。selectcase when grad

30、e<60 then '不及格' when Grade>=60 and Grade<70 then '及格' when Grade>=70 and Grade<80 then '中' when Grade>=80 and Grade<90 then '良' when Grade>=90 then '優(yōu)'endfrom sc2) 用TransactSQL語言編寫程序計算1100之間所有能被7整除的數(shù)的總和。declare sum int,i intset sum=0set

31、 i=1while i<=100begin if i % 7=0 begin set sum=sum+i; end set i=i+1;endprint sum3) 自選實例,實踐并掌握Transact-SQL以下控制流語言的使用方法:BEGIN.END、WHILE、BREAK、CONTINUE、IF.ELSE、WAITFOR4) 自選實例,實踐并掌握以下Transact-SQL語句:/*.*/(注釋)、-(注釋)、PRINT-我的實例(求水仙花數(shù))declare a int,b int,k int,n intset n=99while n<999begin set n=n+1 s

32、et a=n/100/*求百位*/ set b=n/10-a*10-求十位 set k=n%10/*求個位*/ if(n<>a*a*a+b*b*b+k*k*k) continue/*不是水仙花數(shù),退出當(dāng)前循環(huán)*/ print nEnd三、實驗要求:1) 寫出正確的Transact-SQL命令。2) 無須記錄正確的查詢結(jié)果。要求記錄實驗過程中發(fā)生的有學(xué)習(xí)意義的錯誤及錯誤信息。報告書寫內(nèi)容:內(nèi)容1的腳本及1(4)的結(jié)果;內(nèi)容2的腳本及結(jié)果;內(nèi)容3(1)(2)的腳本。四、實驗小結(jié) 通過本次實驗,使我對數(shù)據(jù)庫編程更感興趣,感覺編程跟c語言編程沒太大的差別就是聲明變量相對c語言比較復(fù)雜一點,

33、不過像WHILE、BREAK、CONTINUE、IF.ELSE的用法跟c語言是一樣的,很容易理解,所以通過c語言編程思想,我自己做的實例求水仙花數(shù)充分應(yīng)用了上述控制語句。 實驗七 存儲過程與用戶自定義函數(shù)一、實驗?zāi)康模?) 掌握SQLServer中存儲過程的使用方法。2) 掌握SQLServer中用戶自定義函數(shù)的使用方法。二、實驗內(nèi)容和要求(一)存儲過程1、對學(xué)生課程數(shù)據(jù)庫,編寫2個存儲過程,分別完成下面功能:  1)統(tǒng)計某一門課的成績分布情況,即按照各分?jǐn)?shù)段統(tǒng)計人數(shù),要求使用游標(biāo)。create proc STA_SGCNO INTASDECLARE GRADE INTDE

34、CLARE stu1 INT,stu2 INT,stu3 INT,stu4 INT,stu5 INTSET stu1=0SET stu2=0SET stu3=0SET stu4=0SET stu5=0DECLARE FLAG CURSOR FOR SELECT GRADE FROM SC WHERE CNO=CNOOPEN FLAGFETCH NEXT FROM FLAG INTO GRADEWHILE FETCH_STATUS=0BEGINIF GRADE<60SET stu1=stu1+1IF GRADE>=60 AND GRADE<70SET stu2=stu2+1IF

35、 GRADE>=70 AND GRADE<80SET stu3=stu3+1IF GRADE>=80 AND GRADE<90SET stu4=stu4+1ELSESET stu5=stu5+1FETCH NEXT FROM FLAG INTO GRADEENDPRINT '<60 '+convert(varchar(3),stu1)+' people'PRINT '>=60 AND <70 '+convert(varchar(3),stu2)+' people'PRINT '&g

36、t;=70 AND <80 '+convert(varchar(3),stu3)+' people'PRINT '>=80 AND <90 '+convert(varchar(3),stu4)+' people'PRINT '>=90 AND <=100 '+convert(varchar(3),stu5)+' people'close FLAGDEALLOCATE FLAGEXEC STA_SG 1EXEC STA_SG 2EXEC STA_SG 3  2

37、)將學(xué)生選課成績從百分制改為等級制(即A、B、C、D、E五級)。selectcase when grade<60 then 'E' when Grade>=60 and Grade<70 then 'D' when Grade>=70 and Grade<80 then 'C' when Grade>=80 and Grade<90 then 'B' when Grade>=90 then 'A'endfrom sc2、對SPJ數(shù)據(jù)庫,1)創(chuàng)建一個存儲過程ins_s_

38、count,功能為根據(jù)提供的供應(yīng)商號,供應(yīng)商名,供應(yīng)商所在地等信息,往S表中插入數(shù)據(jù),并返回插入該記錄之后,S表中的記錄數(shù)。CREATE PROC ins_s_countsum int output,SNO CHAR(4),SNAME CHAR(20),STATUS CHAR(5),CITY CHAR(20)ASINSERTINTO SVALUES(SNO,SNAME,STATUS,CITY)select sum=COUNT(sno) from S2) 調(diào)用該存儲過程實現(xiàn)往S表中插入一條記錄(S6,天盛,40福州),并顯示插入該記錄之后,S表中的記錄數(shù)。declare a intEXEC in

39、s_s_count a output,S6,天盛,40,福州print 'S表中有'+convert(varchar(3),a)+'個記錄'(二)用戶自定義函數(shù) 1. 創(chuàng)建一個返回標(biāo)量值的用戶定義函數(shù) RectangleArea:輸入矩形的長和寬就能計算矩形的面積。調(diào)用該函數(shù)。CREATE FUNCTION RectangleArea(WEI INT,LEN INT)RETURNS INTBEGIN RETURN WEI*LENENDSELECTdbo.RectangleArea(20,30) 面積2. 創(chuàng)建一個用戶自定義函數(shù),功能為產(chǎn)生一張有關(guān)學(xué)生成績統(tǒng)計的報

40、表。該報表顯示每一門課程的課程號、課程名、選修人數(shù)、本門最高分、最低分和平均分。調(diào)用這個函數(shù),生成相應(yīng)的報表并給用戶瀏覽。use stuDBCREATE FUNCTION f_1 (a char(200)RETURNS t TABLE(CNO varchar(4),CNAME char(20),人數(shù) int,maxSG int,minSG int,vagSG int)ASbegininsert t select SC.CNO,CNAME,count(SNO),max(GRADE),min(GRADE),avg(GRADE) from SC,COURSE where SC.CNO=a and s

41、c.CNO=COURSE.CNO-插入數(shù)據(jù)到tgroup by SC.CNO,CNAMERETURNEndselect * from dbo.f_1('2')select * from dbo.f_1('1')select * from dbo.f_1('3')三、實驗報告書寫要求實驗內(nèi)容的腳本。4、 實驗小結(jié)通過實驗更熟悉SQLServer中存儲過程的使用方法和用戶自定義函數(shù)的使用方法。實驗過程中遇到問題:經(jīng)檢查得知此原因大多是由于字段范圍不夠引起的,加大字段保存的范圍即可,如果保存過程中SQLServer報錯:阻止保存要求重新創(chuàng)建表給的字段范

42、圍太小,修改后即可。實驗八 觸發(fā)器一、實驗?zāi)康恼莆誗QLServer中觸發(fā)器的使用方法。1) 實驗內(nèi)容按照數(shù)據(jù)庫系統(tǒng)概論的SPJ關(guān)系模式實現(xiàn)以下操作:-1、創(chuàng)建一個作用在P表上的的觸發(fā)器P_Ins,確保用戶在插入或更新數(shù)據(jù)時所提供的WEIGHT值是大于的,-否則給出錯誤提示并回滾此操作。請測試該觸發(fā)器。測試方法自定。use spjcreate trigger P_Inson pfor update,insertasbegindeclare weight intselect weight=weight from insertedif(weight<=0) print'更新數(shù)據(jù)失敗.' RAISERROR ('錯誤:所提供的weight值小于等于',16,1) ROLLBACK TRANSACTION END執(zhí)行以下插入語句激活上述定義的觸發(fā)器insert into pvalues('p7','車輪','黑',-1)update pset weight=-1where pno='p1'-2、創(chuàng)建一個作用在J表上的觸發(fā)器J_Update,禁止同時修改項目的名稱和所在城市,并進(jìn)行相應(yīng)的錯誤提示。-請測試該觸發(fā)器。測試方法自定。create trigger J_Uod

溫馨提示

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

評論

0/150

提交評論