數(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ù)免費閱讀

下載本文檔

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

文檔簡介

數(shù)據(jù)庫系統(tǒng)原理及應(yīng)用實驗指導(dǎo)書(本科)福建工程學(xué)院計算機與信息科學(xué)系目錄實驗一數(shù)據(jù)定義語言 1實驗二SQLSever中的單表查詢 2實驗三SQLServe中的連接查詢 3實驗四SQLServe的數(shù)據(jù)更新、視圖 4實驗五數(shù)據(jù)控制(完整性與安全性) 5實驗六語法元素與流程控制 7實驗七存儲過程與用戶自定義函數(shù) 9實驗八觸發(fā)器 10實驗一數(shù)據(jù)定義語言一、實驗?zāi)康氖煜QLServer2000/2005查詢分析器。掌握SQL語言的DDL語言,在SQLServer2000/2005環(huán)境下采用Transact-SQL實現(xiàn)表的定義、刪除與修改,掌握索引的建立與刪除方法。掌握SQLServer2000/2005實現(xiàn)完整性的六種約束。二、實驗內(nèi)容啟動SQLServer2000/2005查詢分析器,并連接服務(wù)器。創(chuàng)建數(shù)據(jù)庫:(請先在D盤下創(chuàng)建DB文件夾)1)在SQLServer2000中建立一個StuDB數(shù)據(jù)庫:有一個數(shù)據(jù)文件:邏輯名為StuData,文件名為“d:\db\StuDat.mdf”,文件初始大小為5MB,文件的最大大小不受限制,文件的增長率為2MB;有一個日志文件,邏輯名為StuLog,文件名為“d:\db\StuLog.ldf”,文件初始大小為5MB,文件的最大大小為10MB,文件的增長率為10%2)刷新管理器查看是否創(chuàng)建成功,右擊StuDB查看它的屬性。設(shè)置StuDB為當(dāng)前數(shù)據(jù)庫。在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語句。創(chuàng)建表S;刷新管理器查看表是否創(chuàng)建成功;右擊表S插入3個記錄:95031班25號李明,男性,21歲;95101班10號王麗,女性,20歲;95031班座號為30,名為鄭和的學(xué)生記錄;將年齡的數(shù)據(jù)類型改為smallint;向S表添加“入學(xué)時間(comedate)”列,其數(shù)據(jù)類型為日期型(datetime);對表S,按年齡降序建索引(索引名為inxage);刪除S表的inxage索引;刪除S表;在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)建DB文件夾下找到StuDB數(shù)據(jù)庫的兩個文件,進(jìn)行備份,后面的實驗要用到這個數(shù)據(jù)庫。實驗總結(jié)通過本次實驗大致熟悉了SQLServer2000/2005/2008查詢分析器.對SQLServer2000/2005實現(xiàn)完整性的六種約束有所了解,但是對表的關(guān)聯(lián)還不是很明白,我會去看書加深理解。實驗二SQLSever中的單表查詢一、實驗?zāi)康模赫莆誗QL語言的DML子語言,在SQLServer2000/2005環(huán)境下采用Transact-SQL的SELECT語句熟練掌握各種單表查詢方法。二、實驗內(nèi)容:(一)附加上次實驗備份的StuDB數(shù)據(jù)庫和SPJ數(shù)據(jù)庫。(二)按照《數(shù)據(jù)庫系統(tǒng)概論》P82頁中的學(xué)生課程數(shù)據(jù)庫及數(shù)據(jù)實現(xiàn)以下查詢:1.查詢所有課程的課號,課程名。查詢計算機系年齡不到21歲的所有男生的姓名和出生年份。查詢已被學(xué)生所選課程的課程號。查詢所有有成績的學(xué)生學(xué)號和課程號,并為各列分別取相應(yīng)的中文別名。(三)按照《數(shù)據(jù)庫系統(tǒng)概論》P75頁中的SPJ數(shù)據(jù)庫及數(shù)據(jù)實現(xiàn)以下查詢:1.查詢地點在‘北京’、‘上?!墓?yīng)商代碼和供應(yīng)商名字。查詢供應(yīng)商名中包含‘方’這個漢字的供應(yīng)商信息。查詢零件名以‘刀’字結(jié)尾,包含三個漢字的零件信息。查詢使用了供應(yīng)商S1所供應(yīng)零件的工程項目數(shù)。查詢各個供應(yīng)商所供應(yīng)的零件的總數(shù),要求對查詢結(jié)果降序顯示。查詢供應(yīng)了3個以上項目的供應(yīng)商代碼和供應(yīng)的項目總數(shù)。加上groupby直接用COUNT(JNO)>3結(jié)果一致三、實驗要求:根據(jù)實驗內(nèi)容認(rèn)真寫好實驗報告,記錄每個步驟正確的Transact-SQL命令。無須記錄正確的查詢結(jié)果。但要求記錄實驗過程中發(fā)生的有學(xué)習(xí)意義的錯誤及錯誤信息。實驗小結(jié)通過本次實驗,基本上掌握了SQLSever中的單表查詢,但對groupby語句不是很了解。還有where子句與having短語的區(qū)別,作用對象不同,where作用于基本表或視圖,having作用于組,這里的組怎么理解?實驗三SQLServe中的連接查詢實驗?zāi)康模赫莆詹捎肨ransact-SQL實現(xiàn)連接查詢。掌握等值連接(自然連接)、自身連接、外連接和復(fù)合條件連接的查詢方法。實驗內(nèi)容:按照《數(shù)據(jù)庫系統(tǒng)概論》P82頁中的學(xué)生課程數(shù)據(jù)庫和P75頁中的SPJ數(shù)據(jù)庫完成以下查詢查詢使用紅色零件的工程名稱。--(1) 查詢使用紅色零件的工程名稱。SELECTDISTINCTJNAMEFROMP,J,SPJWHERECOLOR='紅'ANDP.PNO=SPJ.PNOANDJ.JNO=SPJ.JNO;查詢每個工程的信息及相應(yīng)的供應(yīng)信息(包括列出尚未被供應(yīng)零件的那些工程)。--(2) 查詢每個工程的信息及相應(yīng)的供應(yīng)信息(包括列出尚未被供應(yīng)零件的那些工程)。SELECTDISTINCT*FROMJLEFTOUTERJOINSPJON(J.JNO=SPJ.JNO);查詢供應(yīng)工程J1紅色零件的供應(yīng)商號SNO,請用兩種方法實現(xiàn)。--(3) 查詢供應(yīng)工程J1紅色零件的供應(yīng)商號SNO,請用兩種方法實現(xiàn)。第一種:SELECTDISTINCTSNOFROMP,SPJWHERECOLOR='紅'ANDP.PNO=SPJ.PNOANDJNO='J1';第二種:SELECTSNOFROMSPJWHEREPNOIN(SELECTPNOFROMPWHERECOLOR='紅')ANDJNO='J1'求供應(yīng)工程J1零件的供應(yīng)商的完整信息。--(4)求供應(yīng)工程J1零件的供應(yīng)商的完整信息。SELECT*FROMSWHERESNOIN(SELECTSNOFROMSPJWHEREJNO='J1');查詢使用北京供應(yīng)商供應(yīng)零件的工程信息。查詢選修3號課程且成績在85分以上的所有學(xué)生。查詢先行課的學(xué)分為4的課程信息。查詢課程與其間接先行課的名稱。查詢其他系中比計算機科學(xué)系所有學(xué)生年齡都小的學(xué)生完整信息,用兩種方法實現(xiàn)。查詢其他系中比計算機科學(xué)系某一學(xué)生年齡大的學(xué)生姓名與年齡,用兩種方法實現(xiàn)。(可選)查詢至少用了供應(yīng)商S1所供應(yīng)的所有零件的工程號JNO,用帶EXISTS謂詞的子查詢實現(xiàn)。SELECTJNOFROMJWHEREEXISTS(SELECT*FROMSPJWHEREJNO=J.JNOANDSNO='S1')(可選)查詢使用了全部零件的工程號JNO,用帶EXISTS謂詞的子查詢實現(xiàn)。--不會(可選)查詢所有使用了P3零件的工程號JNO,用帶EXISTS謂詞的子查詢實現(xiàn)。SELECTJNOFROMJWHEREEXISTS(SELECT*FROMSPJWHEREJNO=J.JNOANDPNO='P3')三、實驗要求:寫出正確的Transact-SQL命令。無須記錄正確的查詢結(jié)果。要求記錄實驗過程中發(fā)生的有學(xué)習(xí)意義的錯誤及錯誤信息。四、實驗小結(jié)通過實驗大致掌握了等值連接(自然連接)、自身連接、外連接和復(fù)合條件連接的查詢方法。實驗過程中最糾結(jié)的就是12題,使用了全部零件就是說pno從p1到p6在同一個工程中都有,那么這該怎么表示呢?實驗四SQLServe的數(shù)據(jù)更新、視圖實驗時間:2012-3-27實驗地點:c2-101一、實驗?zāi)康模赫莆詹捎肨ransact-SQL實現(xiàn)嵌套查詢。掌握采用Transact-SQL實現(xiàn)數(shù)據(jù)更新。掌握采用Transact-SQL實現(xiàn)視圖的定義、刪除、查詢與更新。二、實驗內(nèi)容按照《數(shù)據(jù)庫系統(tǒng)概論》P82頁中的學(xué)生課程數(shù)據(jù)庫和P75頁中的SPJ數(shù)據(jù)庫完成以下操作:(一)數(shù)據(jù)更新1)一個學(xué)生:張紅,女,200215135,信息系,20歲一個選課記錄:200215135,1,成績未定算機系所有學(xué)生的年齡加1歲刪除所有200215130學(xué)生的選課記錄5)刪除所有姓張的同學(xué)的信息行設(shè)計案例對學(xué)生-課程數(shù)據(jù)庫的數(shù)據(jù)更新,并觀察是否有違反數(shù)據(jù)的完整性約束。(二)視圖1)創(chuàng)建一個學(xué)生成績統(tǒng)計視圖,包括學(xué)號,姓名,選課門數(shù),平均分,最高分,最低分2)利用上題所建視圖實現(xiàn):①查詢成績高于自己平均成績的選課記錄②查詢每個同學(xué)獲得最高分的選課記錄3)請為三建工程項目建立一個供應(yīng)情況的視圖,包括供應(yīng)商代碼(SNO)、零件代碼(PNO)、供應(yīng)數(shù)量(QTY)。建立該視圖:針對該視圖完成下列查詢:①找出三建工程項目使用的各種零件代碼及其數(shù)量;②找出供應(yīng)商S1的供應(yīng)情況;實驗小結(jié)刪除姓張的全部信息時忽視了關(guān)系的完整性,沒意識到表級完整性約束條件,導(dǎo)致不能直接在Student表中刪除記錄。先把SC表中的有關(guān)姓張的學(xué)生先給刪除掉,解除關(guān)聯(lián),再從student表中刪除相關(guān)信息。對于groupby的使用仍然不是很清楚。如以上創(chuàng)建視圖的時候為什么要groupbystudent.Sno,sname~~等等實驗五數(shù)據(jù)控制(完整性與安全性)一、實驗?zāi)康模和ㄟ^實驗加深對數(shù)據(jù)庫完整性與數(shù)據(jù)庫安全性的理解;掌握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)建這三個表的SQL語句,要保證:工資的值大于0,身份證號碼唯一,開始工作時間非空,默認(rèn)值為當(dāng)前時間。--創(chuàng)建表EmployeesCREATETABLEEmployees(EnoINTIDENTITY(1000001,1)PRIMARYKEY,EIDCHAR(18)CHECK(Len(Ltrim(RTRIM(EID)))=18)UNIQUE,EnameChar(20)notnull,EgzintCHECK(Egz>0))--創(chuàng)建表DepartmentsCREATETABLEDepartments(DnoCHAR(2)PRIMARYKEY,DnameCHAR(30)UNIQUE)--創(chuàng)建表WorkCREATETABLEWork(EnoINT,DnameCHAR(30),WorkTimedatetimedefaultgetdate()notnull,Memochar(100),PRIMARYKEY(Eno,Dname),FOREIGNKEY(Eno)REFERENCESEmployees(Eno),FOREIGNKEY(Dname)REFERENCESDepartments(Dname))以sa登錄查詢分析器,輸入下列代碼并執(zhí)行第1行execsp_addlogin's1','123'第2行useStuDB第3行execsp_grantdbaccess's1','u1'第4行g(shù)rantselect,insert,updateonstudenttopublic第5行g(shù)rantallonstudenttou1第6行revokeselectonstudenttou1問:第1行創(chuàng)建了一個名為s1登錄帳戶,請問'123'的含義是什么?賬戶s1的密碼第3行將登錄帳戶s1映射到數(shù)據(jù)庫用戶u1上,它將作為哪個數(shù)據(jù)庫的用戶?StuDB數(shù)據(jù)庫請解釋4到6行的含義第4行g(shù)rantselect,insert,updateonstudenttopublic--把在student表上查詢,插入修改的權(quán)限給所有用戶第5行g(shù)rantallonstudenttou1--在student上的全部權(quán)限給u1第6行revokeselectonstudenttou1--回收u1對student表的查詢權(quán)限4)在查詢分析器中以s1帳戶連接服務(wù)器,能否對學(xué)生-課程數(shù)據(jù)庫的student表進(jìn)行select操作,為什么?(提示:廢除權(quán)限是刪除已授予的權(quán)限,并不妨礙用戶、組或角色從更高級別繼承已授予的權(quán)限。因此,如果廢除用戶查看表的權(quán)限,不一定能防止用戶查看該表,因為已將查看該表的權(quán)限授予了用戶所屬的角色。)可以select因為s1從超級用戶那里也被被授予select的權(quán)限5)切換回sa用戶的查詢窗口,輸入下面代碼并執(zhí)行denyselectonstudenttou1請問該代碼含義?取消u1的查詢權(quán)限再切換至s1的查詢窗口,能不能對student表進(jìn)行查詢操作?為什么?不能,因為角色u1select已經(jīng)被回收了,這條命令是把s1從超級用戶那里獲得的select權(quán)限也回收了,所以不能進(jìn)行查詢操作了。(三)請完成以下操作,并記錄完整語句。在實驗過程注意驗證語句的執(zhí)行效果。(1)需要為學(xué)生-課程數(shù)據(jù)庫,創(chuàng)建一用戶,該用戶以“SQLServer身份驗證”方式登錄SQLServer服務(wù)器的賬號為學(xué)生自己的姓名,密碼為“123”。execsp_addlogin'xiezhenjia','123'usestudb(2)給該登錄用戶映射到數(shù)據(jù)庫用戶user2上,并賦予該用戶對student表的sno、sname兩列的查詢權(quán)限,對sc表的所有操作權(quán)限及對course的查詢權(quán)限。(請先執(zhí)行revokeselectonstudentfrompublicRevokeallonscfrompublic注:新建用戶自動被加入到public角色中)revokeselectonstudentfrompublicRevokeallonscfrompublicexecsp_grantdbaccess'xiezhenjia','user2'grantselect(sno,sname)onstudenttouser2grantselect,update,delete,insertonsctouser2grantselectoncoursetouser2請分析、驗證數(shù)據(jù)庫用戶user2的權(quán)限。1)、對student的sno以及sname有查詢權(quán)限2)、對sc表有所有權(quán)限3)、對course有查詢權(quán)限用戶user2授予對course表的插入操作權(quán)限,并允許將此權(quán)限授予其它用戶grantinsertoncoursetouser2withgrantoption收回授予user2對sc表的所有權(quán)限r(nóng)evokeselect,insert,delete,updateonscfromuser2創(chuàng)建一個角色R1createroler1然后使用GRANT語句,使角色R1擁有SC表的SELECT、UPDATE、INSERTgrantselect,update,insertonsctor1將這個角色授予user2。使它具有角色R1所包含的全部權(quán)限。grantr1touser2三、實驗要求:寫出正確的Transact-SQL命令。無須記錄正確的查詢結(jié)果。要求記錄實驗過程中發(fā)生的有學(xué)習(xí)意義的錯誤及錯誤信息。四、實驗小結(jié)剛開始在機房里面做的時候附加進(jìn)來的數(shù)據(jù)庫屬性是只讀的,不知道是什么情況。就是沒有把錯誤記錄下來。通過實驗對數(shù)據(jù)的安全性更為熟悉。實驗六語法元素與流程控制一、實驗?zāi)康模赫莆誘ransact-SQL局部變量的聲明、賦值和使用方法以及全局變量的運用方法,掌握Transact-SQL的局部變量的作用域概念。掌握Transact-SQL的控制流語言的使用方法。掌握與控制流語言語句一起使用的其它Transact-SQL語句:

CASE、/*...*/(注釋)、--(注釋)、PRINT。二、實驗內(nèi)容和要求1、使用局部變量、全局變量(1)定義一個int的整型變量,為其賦值45,并顯示變量的值。declare@varintset@var=45select@var變量go(2)定義一個長度為20的可變長度型字符變量,為其賦值“WelcometoFJUT”,并顯示變量的值。declare@var1varchar(20)set@var1='WelcometoFJUT'select@var1字符變量go(3)在批處理中聲明兩個局部變量@ssex和@sdept并對它們賦值,對Student表進(jìn)行查詢,要求兩局部變量在SELECT語句的WHERE子句中被使用,查詢的要求是性別為‘女’或所在系為‘IS’系的那些學(xué)生。declare@ssexchar(2),@sdeptchar(20)set@ssex='女'set@sdept='IS'select*fromstudentwheressex=@ssexorsdept=@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來檢測是否有發(fā)生更改的行。updatestudentSETsage=sage+1;select@@ROWCOUNT2. 函數(shù)的使用(1)數(shù)學(xué)函數(shù)的使用分別用函數(shù)求出-3的絕對值,16的平方根,5的三次方。declare@var1int,@var2real,@var3intset@var1=Abs(-3)set@var2=Sqrt(16)set@var3=Power(5,3)select@var1'-3的絕對值',@var2'16的平方根',@var3'5的三次方'go(2)字符串函數(shù)的使用1)分別將字符串'china'、'MACHINE'轉(zhuǎn)換成大寫、小寫字母;selectupper('china')selectlower('MACHINE')2)去掉字符串'machine'左邊的空格,右邊與'press'連接起來;selectltrim('machine')+'press'(3)日期、時間函數(shù)的使用1)返回系統(tǒng)當(dāng)前日期并以整數(shù)形式返回當(dāng)前日期的年份、月份、日;selectyear(getdate())年,month(getdate())月,day(getdate())日2)返回給定日期“2006-2-21”與當(dāng)前日期相差的天數(shù)。selectdatediff(day,'2006-2-21',getdate())(4)系統(tǒng)函數(shù)與元數(shù)據(jù)函數(shù)的使用顯示正在使用的用戶名selectUSER_name()3.編寫較復(fù)雜的Transact-SQL程序在SELECT語句中,CASE搜索函數(shù)允許根據(jù)比較值在結(jié)果集內(nèi)對值進(jìn)行替換。要求仿照《數(shù)據(jù)庫概論》的sc表,根據(jù)學(xué)生的成績范圍將成績(grade列)顯示為文本注釋。(要求:<60分,文本注釋為“不及格”,60-70,“及格”,70-80,“中”,80-90,“良”,90-100,“優(yōu)”)。selectcasewhengrade<60then'不及格'whenGrade>=60andGrade<70then'及格'whenGrade>=70andGrade<80then'中'whenGrade>=80andGrade<90then'良'whenGrade>=90then'優(yōu)'endfromsc用Transact-SQL語言編寫程序計算1~100之間所有能被7整除的數(shù)的總和。declare@sumint,@iintset@sum=0set@i=1while@i<=100beginif@i%7=0beginset@sum=@sum+@i;endset@i=@i+1;endprint@sum自選實例,實踐并掌握Transact-SQL以下控制流語言的使用方法:

BEGIN...END、WHILE、BREAK、CONTINUE、IF...ELSE、WAITFOR自選實例,實踐并掌握以下Transact-SQL語句:/*...*/(注釋)、--(注釋)、PRINT--我的實例(求水仙花數(shù))declare@aint,@bint,@kint,@nintset@n=99while@n<999beginset@n=@n+1set@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三、實驗要求:寫出正確的Transact-SQL命令。無須記錄正確的查詢結(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ù)雜一點,不過像WHILE、BREAK、CONTINUE、IF...ELSE的用法跟c語言是一樣的,很容易理解,所以通過c語言編程思想,我自己做的實例求水仙花數(shù)充分應(yīng)用了上述控制語句。

實驗七存儲過程與用戶自定義函數(shù)一、實驗?zāi)康模赫莆誗QLServer中存儲過程的使用方法。掌握SQLServer中用戶自定義函數(shù)的使用方法。二、實驗內(nèi)容和要求(一)存儲過程1、對學(xué)生課程數(shù)據(jù)庫,編寫2個存儲過程,分別完成下面功能:

1)統(tǒng)計某一門課的成績分布情況,即按照各分?jǐn)?shù)段統(tǒng)計人數(shù),要求使用游標(biāo)。createprocSTA_SG@CNOINTASDECLARE@GRADEINTDECLARE@stu1INT,@stu2INT,@stu3INT,@stu4INT,@stu5INTSET@stu1=0SET@stu2=0SET@stu3=0SET@stu4=0SET@stu5=0DECLAREFLAGCURSORFORSELECTGRADEFROMSCWHERECNO=@CNOOPENFLAGFETCHNEXTFROMFLAGINTO@GRADEWHILE@@FETCH_STATUS=0BEGINIF@GRADE<60SET@stu1=@stu1+1IF@GRADE>=60AND@GRADE<70SET@stu2=@stu2+1IF@GRADE>=70AND@GRADE<80SET@stu3=@stu3+1IF@GRADE>=80AND@GRADE<90SET@stu4=@stu4+1ELSESET@stu5=@stu5+1FETCHNEXTFROMFLAGINTO@GRADEENDPRINT'<60'+convert(varchar(3),@stu1)+'people'PRINT'>=60AND<70'+convert(varchar(3),@stu2)+'people'PRINT'>=70AND<80'+convert(varchar(3),@stu3)+'people'PRINT'>=80AND<90'+convert(varchar(3),@stu4)+'people'PRINT'>=90AND<=100'+convert(varchar(3),@stu5)+'people'closeFLAGDEALLOCATEFLAGEXECSTA_SG1EXECSTA_SG2EXECSTA_SG3

2)將學(xué)生選課成績從百分制改為等級制(即A、B、C、D、E五級)。selectcasewhengrade<60then'E'whenGrade>=60andGrade<70then'D'whenGrade>=70andGrade<80then'C'whenGrade>=80andGrade<90then'B'whenGrade>=90then'A'endfromsc2、對SPJ數(shù)據(jù)庫,1)創(chuàng)建一個存儲過程ins_s_count,功能為根據(jù)提供的供應(yīng)商號,供應(yīng)商名,供應(yīng)商所在地等信息,往S表中插入數(shù)據(jù),并返回插入該記錄之后,S表中的記錄數(shù)。CREATEPROCins_s_count@sumintoutput,@SNOCHAR(4),@SNAMECHAR(20),@STATUSCHAR(5),@CITYCHAR(20)ASINSERTINTOSVALUES(@SNO,@SNAME,@STATUS,@CITY)select@sum=COUNT(sno)fromS調(diào)用該存儲過程實現(xiàn)往S表中插入一條記錄(‘S6’,’天盛’,‘40’‘福州’),并顯示插入該記錄之后,S表中的記錄數(shù)。declare@aintEXECins_s_count@aoutput,S6,天盛,40,福州print'S表中有'+convert(varchar(3),@a)+'個記錄'(二)用戶自定義函數(shù)創(chuàng)建一個返回標(biāo)量值的用戶定義函數(shù)RectangleArea:輸入矩形的長和寬就能計算矩形的面積。調(diào)用該函數(shù)。CREATEFUNCTIONRectangleArea(@WEIINT,@LENINT)RETURNSINTBEGINRETURN@WEI*@LENENDSELECTdbo.RectangleArea(20,30)面積創(chuàng)建一個用戶自定義函數(shù),功能為產(chǎn)生一張有關(guān)學(xué)生成績統(tǒng)計的報表。該報表顯示每一門課程的課程號、課程名、選修人數(shù)、本門最高分、最低分和平均分。調(diào)用這個函數(shù),生成相應(yīng)的報表并給用戶瀏覽。usestuDBCREATEFUNCTIONf_1(@achar(200))RETURNS@tTABLE(CNOvarchar(4),CNAMEchar(20),人數(shù)int,maxSGint,minSGint,vagSGint)ASbegininsert@tselectSC.CNO,CNAME,count(SNO),max(GRADE),min(GRADE),avg(GRADE)fromSC,COURSEwhereSC.CNO=@aandsc.CNO=COURSE.CNO插入數(shù)據(jù)到@tgroupbySC.CNO,CNAMERETURNEndselect*fromdbo.f_1('2')select*fromdbo.f_1('1')select*fromdbo.f_1('3')三、實驗報告書寫要求實驗內(nèi)容的腳本。實驗小結(jié)通過實驗更熟悉SQLServer中存儲過程的使用方法和用戶自定義函數(shù)的使用方法。實驗過程中遇到問題:經(jīng)檢查得知此原因大多是由于字段范圍不夠引起的,加大字段保存的范圍即可,如果保存過程中SQLServer報錯:阻止保存要求重新創(chuàng)建表給的字段范圍太小,修改后即可。實驗八觸發(fā)器一、實驗?zāi)康恼莆誗QLServer中觸發(fā)器的使用方法。實驗內(nèi)容按照《數(shù)據(jù)庫系統(tǒng)概論》的SPJ關(guān)系模式實現(xiàn)以下操作:--1、創(chuàng)建一個作用在P表上的的觸發(fā)器P_Ins,確保用戶在插入或更新數(shù)據(jù)時所提供的WEIGHT值是大于的,--否則給出錯誤提示并回滾此操作。請測試該觸發(fā)器。測試方法自定。usespjcreatetriggerP_Insonpforupdate,insertasbegindeclare@weightintselect@weigh

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論