2020年數(shù)據(jù)庫原理實驗指導書參考答案_第1頁
2020年數(shù)據(jù)庫原理實驗指導書參考答案_第2頁
2020年數(shù)據(jù)庫原理實驗指導書參考答案_第3頁
2020年數(shù)據(jù)庫原理實驗指導書參考答案_第4頁
2020年數(shù)據(jù)庫原理實驗指導書參考答案_第5頁
已閱讀5頁,還剩71頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

數(shù)據(jù)庫原理實驗指導書參考答案

中割準工出院

《數(shù)據(jù)庫原理與應用》實驗指導

/年第一學期

姓名:______________

學號:______________

班級:______________

指導教師:______________

計算機科學與工程學院

文檔僅供參考

實驗一SQLServer使用初步

一、實驗目的

1、熟悉SQLServer的組成及基本功能。

2、掌握SQLServer的登錄及注冊。

3、掌握SQLServer企業(yè)管理器的使用方

法。

4、熟悉查詢分析器的基本使用。

二、實驗預習

1、什么是數(shù)據(jù)庫管理系統(tǒng)DBMS?你所知道

的DBMS有哪些?

2、SQLServer()的安裝步驟?

文檔僅供參考

三、實驗內(nèi)容和要求

1、注冊服務器

基本步驟:

(1)打開企業(yè)管理器

(2)右擊SQLServer組f新建SQLServer

注冊

(3)添加可用的服務器(實際數(shù)據(jù)庫服務

器的名稱或IP地址)

(4)選擇身份驗證模式(選“系統(tǒng)管理員

分配給我的登錄信息”)

(5)輸入正確的登錄名和密碼

(6)選擇SQLServer組(選“在現(xiàn)有的SQL

Server組中添加SQLServer

(7)完成注冊

若注冊成功,則顯示注冊成功的信息。

2、連接SQLServer服務器

(1)右鍵單擊上面注冊的數(shù)據(jù)庫服務器,

選擇連接,建立與數(shù)據(jù)庫服務器的連接。觀

察連接后服務器圖標的變化;

文檔僅供參考

(2)右鍵單擊選擇編輯SQLServer注冊屬

性,觀察已注冊數(shù)據(jù)庫服務器的屬性信息;

(3)右鍵單擊選擇刪除SQLServer注冊。

為保證數(shù)據(jù)庫的安全性,使用完畢自己的數(shù)

據(jù)庫后,可采取刪除的方式,斷開與數(shù)據(jù)庫

的連接;

(4)重復注冊服務器的步驟,再次建立與

數(shù)據(jù)庫的連接;

3、熟悉企業(yè)管理器

(1)單擊建立的服務器連接,觀察服務器

的7個項目,寫出它們的名稱。經(jīng)過查看聯(lián)

機幫助,總結(jié)7個項目的基本功能。

(2)單擊數(shù)據(jù)庫,觀察Northwind數(shù)據(jù)庫

文檔僅供參考

下的11個項目,寫出項目名稱,經(jīng)過聯(lián)機

幫助了解它們的基本功能。

(3)查看Northwind的表項目,單擊表,

觀察表的名稱、所有者、類型以及創(chuàng)立日期。

回答:

■這些表的所有者有哪幾種?

■這些表的類型有哪幾種?

■選擇表Employees,在右鍵菜單中選擇

打開表->返回所有行,觀察表中的數(shù)據(jù),

說出這些數(shù)據(jù)的實際含義。觀察其它用

文檔僅供參考

戶類型的表,你還能說出它們數(shù)據(jù)的實

際含義嗎?

(4)查看Northwind的視圖項目,單擊視

圖,觀察視圖的名稱、所有者、類型以及創(chuàng)

立日期。選擇視圖ProductSalesfor1997,

同上面觀察表中數(shù)據(jù)的方法一樣,觀察視圖

中的數(shù)據(jù),說出這些數(shù)據(jù)的意義。

文檔僅供參考

(5)查看Northwind的用戶項目,單擊用

戶?;卮穑?/p>

■有哪類用戶?查看它們的屬性對話框,

它們的角色和權(quán)限是否相同?

■經(jīng)過聯(lián)機幫助,寫出dbo、Guest用戶的

區(qū)別。

(6)查看Northwind的角色項目,單擊角

色?;卮穑?/p>

■有哪些角色類型?經(jīng)過查看聯(lián)機幫助,

文檔僅供參考

寫出它們各自的含義和作用。

(7)查看Northwind的安全性項目,單擊

項目中的登錄,觀察不同的登錄名稱、類型、

服務器訪問、默認數(shù)據(jù)庫,找到你自己的登

錄名稱,右鍵單擊打開屬性對話框,觀察對

話框中的設(shè)置,寫出登錄屬性對話框中的設(shè)

置作用。

文檔僅供參考

4、熟悉查詢分析器

(1)打開查詢分析器?;静襟E:

■單擊注冊的數(shù)據(jù)庫服務器,確定服務器

已經(jīng)連接;

-在主菜單“工具”中選擇“SQL查詢分

析器”;

■在打開的查詢分析器窗口中,左側(cè)的對

象瀏覽器為注冊的服務器,在工具欄的

數(shù)據(jù)庫選擇中選擇Northwind數(shù)據(jù)庫為

當前數(shù)據(jù)庫;右側(cè)窗口為查詢窗口。

(2)分別在查詢窗口中輸入如下查詢語句,

觀察查詢結(jié)果,寫出結(jié)果的數(shù)據(jù)記錄個數(shù):

查詢語句1:

SELECT*

FROMShippers

ORDERBYCompanyName

結(jié)果記錄數(shù):

查詢語句2:

文檔僅供參考

SELECTFirstName,HomePhone

FROMNorthwind.dbo.Employees

ORDERBYFirstNameASC

結(jié)果記錄數(shù):

查詢語句3:

SELECTROUND((UnitPrice*.9),2)

ASDiscountPrice

FROMProducts

WHEREProductID=58

結(jié)果記錄數(shù):

查詢語句4:

SELECTOrderlD,

DATEDIFF(dd,ShippedDate,

GETDATE())ASDaysSinceShipped

FROMNorthwind.dbo.Orders

WHEREShippedDateISNOTNULL

文檔僅供參考

結(jié)果記錄數(shù):

查詢語句5:

SELECTProductID,ProductName

FROMNorthwind.dbo.Products

WHERECategorylD=1ORCategorylD

=4ORCategorylD=5

結(jié)果記錄數(shù):

四、實驗小結(jié)

文檔僅供參考

五、評閱成績

實驗預實驗過實驗結(jié)實驗報總成績

習20%程20%果30%告30%

文檔僅供參考

實驗二數(shù)據(jù)定義

一、實驗目的

1、掌握SQL數(shù)據(jù)定義功能:數(shù)據(jù)庫定義、

表的定義、索引定義。

2、掌握利用企業(yè)管理器和SQL語句定義表、

索引的方法。

二、實驗預習

1、SQL中基本表定義語句格式:

2、SQL中修改基本表語句格式:

文檔僅供參考

三、實驗內(nèi)容和要求

1、在企業(yè)管理器中,利用菜單操作的方式

在各自的數(shù)據(jù)庫中建立如下四個基本表:

(1)供應商表S:

列名說數(shù)據(jù)類型約束

SNO供CHAR(6)PRIMARY

應KEY

SNAME供VARCHAR(20)NOT

應NULL

STATUS供VARCHAR(50)

態(tài)

文檔僅供參考

CITY所VARCHAR(50)

(2)零件表P:

列名說數(shù)據(jù)類型約束

PNO零CHAR(6)PRIMARYKEY

PNAME零VARCHAR(20)NOTNULL

COLOR顏CHAR(2)

WEIGHT重NUMERIC(9,2)CHECK(WEIGHT>0

量AND

WEIGHT<=100)

(3)工程項目表J:

列名說明數(shù)據(jù)類型約束

文檔僅供參考

JNO項目CHAR(6)PRIMARY

號KEY

JNAME項目VARCHAR(20)NOT

名NULL

CITYVARCHAR(50)

(4)供應情況表SPJ:

皿.1口MAmi

列名說明數(shù)據(jù)類型約束

SNO供應商CHAR(6)NOTNULL

PNO零件號CHAR(6)NOTNULL

JNO項目號CHAR(6)NOTNULL

QTY供應數(shù)SMALLINTDEFAULT

量100

2、用CREATE語句建立如下三個表,并寫出

相應的語句。

(1)學生表Student:

列名說明數(shù)據(jù)類型約束

SNO學號CHAR(7)主碼

文檔僅供參考

SNAME姓名CHAR(10)NOT

NULL

SSEX性別CHAR(2)取“男”

或“女”

SAGE年齡SMALLINT取值

15-45

SDEPT所在VARCHAR(20)默認

系“計算

機系”

語句:

CREATETABLEStudent(

Snochar(7)PRIMARYKEY,

Snamechar(10)notnull,

Ssexchar(2)CHECK(Ssex='男'orSsex=,

女'),

SagesmallintCHECK(Sage>=15and

Sage<=45),

Sdeptchar(20)DEFAULT'計算機系'

)

(2)課程表Course:

列名說數(shù)據(jù)類型約束

文檔僅供參考

CNO課CHAR(10)主碼

CNAME課VARCHAR(20)NOT

程NULL

CCREDIT學SMALLINT大于0

SEMSTER學SMALLINT大于0

PERIOD學SMALLINT大于0

語句:

CREATETABLECourse(

Cnochar(10)PRIMARYKEY,

Cnamevarchar(20)NOTNULL,

Ccreditsmallintcheck(ccredit>0),

semstersmallintcheck(semster>0),

periodsmallintcheck(period>0)

)

(3)選課表Sc:

文檔僅供參考

列名說明數(shù)據(jù)類型約束

SNO學號CHAR(7)主碼,引用

Student的外碼

CNO課程號CHAR(10)主碼,引用

Course的外碼

GRADE成績SMALLINT大于0

語句:

CREATETABLESC(

Snochar(7),

Cnochar(10),

Gradesmallintcheck(grade>=0),

PRIMARYKEY(Sno,Cno),

FOREIGNKEY(Cno)REFERENCESCourse(Cno),

FOREIGNKEY(Sno)REFERENCESStudent(Sno)

)

3、利用SQL語句對表結(jié)構(gòu)進行修改。

(1)為零件表P增加一個規(guī)格(GUIGE)列,

數(shù)據(jù)類型為字符,長度50;

AlterTablePAddGUIGEchar(50)

文檔僅供參考

(2)修改課程表Course的CNAME屬性列的

類型為VARCHAR(30);

AlterTableCourseAlterColumnCNAME

varchar(30)

(3)為供應情況表SPJ添加參照完整性約

束;

SPJ的SNO列參照S表SNO列

AlterTableSPJAddForeignKey(SNO)

ReferencesS(SNO)

SPJ的PNO列參照P表PNO列

AlterTableSPJAddForeignKey(PNO)

ReferencesP(PNO)

SPJ的JNO列參照J表JNO列

AlterTableSPJAddForeignKey(JNO)

ReferencesJ(JNO)

文檔僅供參考

(4)刪除零件表P的規(guī)格(GUIGE)列

AlterTablePDropColumnGUIGE

4、利用企業(yè)管理器向表中添加數(shù)據(jù)

(1)供應商表S:

SN0SNAMESTATUSCITY

S1精益20天津

S2盛錫10北京

繼續(xù)往表中增加一條記錄:四個字段的數(shù)據(jù)

分別是S1,東方紅,30,北京,會出現(xiàn)什么情

況?為什么?

(2)零件表P:

PN0PNAMECOLORWEIGHT

P1螺母紅12

P2螺栓綠17

文檔僅供參考

P3螺絲藍105.5

是否能夠正常輸入三條數(shù)據(jù)?如果否,問題

出在哪里,為什么?

(3)工程項目表J:

JNOJNAMECITY

J1一汽北京

J2半導體南京

r

J3常州

第三條記錄是否能夠正常輸入,若否,會出

現(xiàn)什么問題,為什么?

(4)供應情況表SPJ:

文檔僅供參考

SNOPNOJNOQTY

S1P1J1200

S1P1J3

S2P2J4

輸入過程中是否會遇到問題,若有,出在哪,

為什么?

四、實驗小結(jié)

文檔僅供參考

五、評閱成績

實驗預實驗過實驗結(jié)實驗報總成績

習20%程20%果30%告30%

文檔僅供參考

實驗三數(shù)據(jù)查詢

一、實驗目的

1、掌握查詢語句的基本組成和使用方法

2、掌握常見查詢技巧

二、實驗預習

1、SQL中查詢語句格式:

2、連接查詢有哪些不同的連接方式?有什

么特點。

文檔僅供參考

三、實驗內(nèi)容和要求

1、按照下表中的內(nèi)容,在企業(yè)管理器中為

數(shù)據(jù)庫表輸入相應的數(shù)據(jù)。

學生表:Student

SnoSnameSsexSageSdept

9512101李勇男19計算機

9512103王敏女20計算機

9521101張莉女22信息系

9521102吳賓男21信息系

9521103張海男20信息系

9531101錢小平女18數(shù)學系

9531102王大力男19數(shù)學系

課程表:Course

CnoCnameCcreditSemsterPeriod

C01計算機313

導論

C02VB434

C03計算機474

文檔僅供參考

網(wǎng)絡

C04數(shù)據(jù)庫664

基礎(chǔ)

C05高等數(shù)818

選課表:SC

SnoCnoGrade

9512101C0395

9512103C0351

9512101C0580

9512103C0560

9521101C0572

9521102C0580

9521103C0545

9531101C0581

9531102C0594

9512101C01NULL

9531102C01NULL

9512101C0287

文檔僅供參考

9512101C0476

2、完成下列查詢

(1)查詢?nèi)w學生的信息。

select*fromstudent

(2)查詢“信息系”學生的學號,姓名和

出生年份。

selectSno,Sname,-SageasBirthyear

fromstudentwhereSdept=,信息系'

(3)查詢考試不及格的學生的學號。

selectDistinctSnofromSCwhere

Grade<60

(4)查詢無考試成績的學生的學號和相應

的課程號。

文檔僅供參考

selectSno,CnofromSCwhereGradeis

null

(5)將學生按年齡升序排序。

select*fromstudentorderbySageasc

(6)查詢選修了課程的學生的學號和姓名。

SelectSno,SnamefromStudentWhereSno

in(SelectSnoFromSc)

或:

selectdistinctstudent.Sno,Snamefrom

student,SCwherestudent.Sno=SC.Sno

(7)查詢年齡在20-23歲之間的學生的姓

名,系,年齡。

文檔僅供參考

selectSname,Sage,Sdeptfromstudent

whereSagebetween20and23

(8)查詢同時選修了“計算機導論”,“高

等數(shù)學”課程的學生的學號,姓名。

selectstudent.Sno,Snamefromstudent

whereNOTEXISTS(

select*fromcoursewhere

Cnamein('高等數(shù)學','計算機導論

')ANDNOTEXISTS(select*fromSC

whereSno=student.Snoand

Cno=course.Cno))

或:

selectstudent.Sno,Snamefrom

student,sc,Coursewhere

student.sno=sc.snoand

o=oandcname=,高等數(shù)學’

andstudent,snoin(selectsnofromsc

wherecno=(selectcnofromcoursewhere

文檔僅供參考

cname=,計算機導論'))

或:

selectstudent.Sno,Snamefromstudent

wheresnoin(selectsnofromscwhere

cno=(selectenofromcoursewhere

cname='高等數(shù)學'))andsnoin(select

snofromscwherecno=(selectenofrom

coursewherecname=,計算機導論’))

(9)查詢姓“張”的學生的基本信息。

select*fromstudentwhereSnamelike

'張%'

(10)查詢“95211”班學生的選課情況,

要求輸出學號,姓名,課程名,成績,按照

學號升序排序。

selectstudent.Sno,Sname,Cname,Grade

fromstudent,SC,coursewhere

文檔僅供參考

student.Sno=SC.Snoand

course.Cno=SC.Cno

andstudent.Snolike'95211%'order

bystudent.Sno

或:

selectstudent.Sno,Sname,Cname,Grade

fromstudent,SC,coursewhere

student.Sno=SC.Snoand

course.Cno=SC.Cno

andleft(student,sno,5)='95211'

orderby1

(11)查詢選修了課程的學生的總?cè)藬?shù)。

selectcount(distinctsno)fromSC

(12)查詢選修了“C05”課程的的學生成

績單,要求輸出學號,姓名,成績,結(jié)果按

班級升序,成績降序排列。

文檔僅供參考

selectstudent.Sno,Sname,Gradefrom

student,SCwherestudent.Sno=SC.Snoand

Cno='C05'orderby

left(student.Sno,5)asc,Gradedesc

(13)統(tǒng)計各門課程的成績,要求輸出課程

代號,課程名,平均成績,選修人數(shù)。(成

績?yōu)镹ULL值的不統(tǒng)計)

select

course.Cno,Cname,avg(Grade),count(Sno)

fromcourse,Scwherecourse.Cno=SC.Cno

andGradeisnotnullgroupby

Course.Cno,Cname

(14)統(tǒng)計各門課程的不及格人數(shù),要求輸

出課程代號,課程名,不及格人數(shù)。

selectCourse.Cno,Cname,count(Sno)

fromSC,CoursewhereSC.Cno=course.Cno

文檔僅供參考

andGrade<60groupby

Course.Cno,Cname

(15)查詢選修平均成績在75分以上的學

生的學號,姓名,所在系。

selectsc.sno,sname,sdeptfrom

student,scwherestudent.sno=sc.sno

groupbysc.sno,sname,sdepthaving

avg(grade)>75

或:

selectsno,sname,sdeptfromstudent

whereSnoin(SelectSnoFromSCGroup

BySnoHavingAvg(Grade)>75)

(16)查詢與“王大力”同一個系的學生的

基本信息

select*fromstudentwheresdept

in(selectsdeptfromstudentwhere

文檔僅供參考

sname=,王大力’)

(17)查詢選修平均分高于所有學生平均分

的學生的學號,并按學號升序排列。

selectstudent.Snofromstudent,SC

wherestudent.Sno=SC.Snogroupby

student.Snohavingavg(Grade)>(select

Avg(Grade)fromSC)orderbystudent.Sno

asc

(18)查詢未選修“VB”或“數(shù)據(jù)庫基礎(chǔ)”

兩門課的學生的學號,姓名,系名。(要求

用嵌套查詢)

selectsno,sname,sdeptfromstudent

wheresnonotin(selectsnofromscwhere

enoin(selectenofromcoursewhere

cnamein('VB','數(shù)據(jù)庫基礎(chǔ)')))

或:

文檔僅供參考

selectsno,sname,sdeptfromStudent

whereexists(

select*fromCoursewherecname=,VB'

andnotexists(

select*fromSCwheresno=Student.sno

andcno=Course.enoandCourse,cname!=,

數(shù)據(jù)庫基礎(chǔ),))

(19)查詢選修了全部課程的學生的學號,

姓名,系名。

selectsno,sname,sdeptfromstudent

wherenotexists(select*fromcourse

wherenotexists

(select*fromscwhere

sno=student.snoandcno=course.eno))

或:

selectsno,sname,sdeptfromstudent

wheresnoin(selectsnofromscgroup

文檔僅供參考

bysnohavingcount(eno)=(select

coount(*)fromcourse))

(20)輸出“高等數(shù)學”課程成績前三名的

學生的學號,姓名,系名

selecttop3student,sno,sname,sdept

fromstudent,sc,coursewhere

student.sno=sc.snoand

o=course.enoandcname=,高等數(shù)學’

orderbygradedesc

四、實驗小結(jié)

五、評閱成績

實驗預實驗過實驗結(jié)實驗報總成績

文檔僅供參考

習20%程20%果30%告30%

文檔僅供參考

實驗四數(shù)據(jù)更新

一、實驗目的

1、掌握SQL語言的數(shù)據(jù)更新操作

2、掌握SQLServer企業(yè)管理器的數(shù)據(jù)導

入和導出功能

二、實驗預習

1、數(shù)據(jù)插入語句格式:

2、數(shù)據(jù)修改語句格式:

3、數(shù)據(jù)刪除語句格式:

4、SQLServer中可進行批量數(shù)據(jù)導入和導

出,可支持哪些格式的數(shù)據(jù)導入導出?(舉

常見格式類型)

文檔僅供參考

三、實驗內(nèi)容和要求

(執(zhí)行操作后,將語句填寫在下面的空白

處)

1、插入數(shù)據(jù)

(1)在學生表Student中插入數(shù)據(jù):

Sno:9512102Sname:劉晨Ssex:男

Sage:20Sdept:計算機系

insertintoStudent

values('9512102'J劉晨','男',20,'計算機系')

(2)在課程表Course中插入數(shù)據(jù):

Cno:C06Cname:數(shù)據(jù)結(jié)構(gòu)Ccredit:

5Semster:4

insertintoCourse(cno,cname,ccredit,semster)

values('C06','數(shù)據(jù)結(jié)構(gòu)',5,4)

或:

insertintoCoursevalues('C06','數(shù)據(jù)結(jié)構(gòu)',5,4,null)

文檔僅供參考

(3)在選課表SC中插入95211班學生選修

C04的選課信息。

提示:插入的數(shù)據(jù)的Sno從Student表中查

詢而來,插入的Cno為“C04”

insertintoSC(sno,Cno)

selectsno,'c04'fromStudentwheresnolike'95211%'

(4)查詢高等數(shù)學的成績,包括學號,成

績,并按學號升序排序。將查詢的結(jié)果輸出

到一個名為gs_cj的表中。

selectsno,gradeintogs__cj

fromsc,o=oandcname=,高等數(shù)學'

orderbysno

(5)將SC表中“C05”課程的選課記錄輸

出至一個新表中,表名為GsOl。

select*intoGsOl

fromscwherecno=,c05*

文檔僅供參考

2、修改數(shù)據(jù)

(1)將所有學生的年齡增加1歲。

updatestudentsetsage=sage+l

(2)修改“9512101”學生的“C01”課程

成績?yōu)?5o

updatescsetgrade=85

wheresno=,951210Tandcno=,cOT

(3)修改“9531102”學生的“C01”課程

成績?yōu)?0o

updatescsetgrade=70

wheresno=,9531102,andcno=,cOT

(4)將所有平均分為75分以上的學生的各

文檔僅供參考

門課成績在原來基礎(chǔ)上增加1%。

updatescsetgrade=grade*l.01

wheresnoin

(selectsnofromscgroupbysnohavingavg(grade)>=75)

3、刪除數(shù)據(jù)

(1)刪除“9531102”學生“C05”課程的

成績記錄

deletefromscwheresno=,9531102*andcno='c05'

(2)刪除所有課程為“C05”的選課記錄

deletefromscwherecno=,c05,

4、數(shù)據(jù)的導出

(1)將數(shù)據(jù)庫中的S,P,J,SPJ表導出為一

個ACCESS數(shù)據(jù)庫,名為DB_SPJ。

(2)Student表中數(shù)據(jù)導出到一個文本文

件,用,作為數(shù)據(jù)項的分隔符。

文檔僅供參考

(3)將Course表中數(shù)據(jù)導出到一個Excel

文件中。

5、批量增加數(shù)據(jù)

(1)利用查詢,將其它表中的數(shù)據(jù)增加到

需要的數(shù)據(jù)表中。

將GsOl表中的數(shù)據(jù)添加到SC表中。(用

Insert語句實現(xiàn))

insertintoscselect*fromGsOl

(2)從外部其它數(shù)據(jù)源導入數(shù)據(jù)(選做)

-從文本文件中導入

■從ACCESS中導入數(shù)據(jù)

■從EXECEL中導入數(shù)據(jù)

文檔僅供參考

四、實驗小結(jié)

五、評閱成績

實驗預實驗過實驗結(jié)實驗報總成績

習20%程20%果30%告30%

文檔僅供參考

實驗五數(shù)據(jù)控制

一、實驗目的

1、掌握數(shù)據(jù)庫完整性約束條件的設(shè)置

2、掌握觸發(fā)器的基本使用

3、掌握SQLServer的安全性控制方法

二、實驗預習

1、關(guān)系數(shù)據(jù)庫的完整性約束有哪些?

2、什么是觸發(fā)器?其作用是什么?SQL

Server中的觸發(fā)器主要有哪些?

文檔僅供參考

三、實驗內(nèi)容和要求

1、實體完整性約束

(1)為供應商表SPJ建立完整性約束,約

束列為SNO,PNO,JNOo

方法1:在表設(shè)計器中建立,請寫出建立的

步驟:

方法2:寫出創(chuàng)立表的同時定義完整性約束

的SQL語句。

createtablespj

(

snochar(6)foreignkeyreferences

s(sno),

pnochar(6)foreignkeyreferences

文檔僅供參考

P(pno),

jnochar(6)foreignkeyreferences

j(jno),

qtysmallintdefault100,

primarykey(sno,pno,jno)

)

(2)根據(jù)實驗2中的內(nèi)容,輸入數(shù)據(jù)下面

的數(shù)據(jù),能否成功?為什么?

S1P1J1200

(3)輸入下面的數(shù)據(jù)能否成功,為什么?

S1NULLJ1200

文檔僅供參考

(4)根據(jù)上面實驗的結(jié)果,請說明實體完

整性約束的含義。

2、參照完整性約束

(1)修改Student表中記錄,將學號

9512101改為9512103,更改是否成功?若

不成功請說出原因。

updatestudentsetsno=,9512103,where

sno=951210r

(2)修改SC表中記錄,將學號為9512101

的記錄均改為學號9512109,是否更改成

功?若不成功請說出原因。

文檔僅供參考

updatescsetsno=,9512109,where

sno=9512101'

(3)設(shè)置SC表的參照完整性為更新和刪除

時均為級聯(lián)。

方法1:在表設(shè)計器中設(shè)置,請寫出設(shè)置的

步驟:

方法2:在創(chuàng)立表時同時設(shè)置參照完整性約

束,并設(shè)置規(guī)則為級聯(lián)。請寫出SQL語句。

文檔僅供參考

CREATETABLESC(

Snochar(10),

Cnochar(10),

Gradenumeric(6,2),

PRIMARYKEY(Sno,Cno),

FOREIGNKEY(Cno)REFERENCES

Course(Cno)

ondeletecascadeonupdatecascade,

FOREIGNKEY(Sno)REFERENCES

Student(Sno)

ondeletecascadeonupdatecascade

)

(4)修改Student表學號9512101為

9512109,觀察SC表中相應記錄是否更新?

updatestudentsetsno=,9512109,where

sno=,951210V

文檔僅供參考

(5)在Course表中刪除課程代號為C01的

記錄,觀察SC表中選課C01的記錄是否刪

除?

deletefromcoursewherecno=,COT

3、用戶自定義完整性

(1)設(shè)置Student表的Sno輸入長度必須

為7個字符的約束。請將CHECK約束子句寫

在下面:

altertablestudentaddcheck(snolike

,3

(2)設(shè)置student表的Sdept只能為“計

算機系”,“數(shù)學系”,“信息系”,“物理系”。

請將CHECK約束子句寫在下面:

altertablestudentaddcheck(sdeptin('

計算機系’,'數(shù)學系信息系','物理系

文檔僅供參考

'))

4、觸發(fā)器

(1)定義一個觸發(fā)器,其基本功能是在SC

表中增加或修改一個選課記錄時,檢查該課

程的選課人數(shù)是否超過限定(可自行定義一

個限定值,根據(jù)表中數(shù)據(jù)的情況而定)。若

超過限定值,則拒絕操作。

觸發(fā)器代碼:

CREATETRIGGERtriglONSC

FORINSERT,UPDATE

AS

IF(SELECTCOUNT(*)FROMSCWHERE

CNO=(selectCNOfromINSERTED))>10

BEGIN

PRINT'選課人數(shù)超過上限'

文檔僅供參考

ROLLBACK

END

(2)定義一個觸發(fā)器,當刪除Student表

中數(shù)據(jù)時,先將刪除的數(shù)據(jù)插入到另一個專

門存放已刪除數(shù)據(jù)的表中(實驗時,首先定

義一個與Student表結(jié)構(gòu)相同的表用來存放

刪除的數(shù)據(jù)),然后執(zhí)行刪除操作。

觸發(fā)器代碼:

selecttop0*intosifromstudent

createtriggertrig2onstudent

fordelete

as

insertintosiselect*fromdeleted

5、用戶權(quán)限控制

(1)在自己數(shù)據(jù)庫中添加其它用戶。

(2)為添加的用戶進行授權(quán)和權(quán)限收回。

相互檢查是否獲得了相應的權(quán)限。

文檔僅供參考

sp_adduser'rjl07','rjl07'

grantselectonstudenttorjl07

grantselect,update(cname)oncourseto

rjl07

revokeselectoncoursefromrjl07

sp_dropuserJrjl07,

四、實驗小結(jié)

五、評閱成績

實驗預實驗過實驗結(jié)實驗報總成績

習20%程20%果30%告30%

文檔僅供參考

實驗六視圖與存儲過程

一、實驗目的

1、掌握視圖的定義及使用

2、掌握存儲過程的建立和調(diào)用

二、實驗預習

1、基本表與視圖有什么不同?哪種視圖能

夠更新?

2、視圖定義語句格式:

3、什么是存儲過程,其作用主要是什么?

文檔僅供參考

三、實驗內(nèi)容和要求

1、視圖(將執(zhí)行的SQL語句寫在下面)

(1)建立視圖IS_STUDENT,視圖中包含信息

系全體學生的基本信息。

createviewIS_STUDENT

as

select*fromstudentwheresdept=,信

息系'

select*fromIS_STUDENT

(2)建立視圖CJ_STUDENT,視圖中包含所有

成績不及格的學生的學號,姓名,課程名,

成績。

createviewCJ_STUDENT

as

selectsc.sno,sname,cname,gradefrom

sc,student,course

wheresc.sno=student.snoand

文檔僅供參考

o=course.enoandgrade<60

select*fromCJ_STUDENT

(3)建立視圖AVG_CJ,視圖包括學生的學

號以及她們的平均成績,按成績降序排列。

createviewavg_cj(sno,ag)

as

selectsno,avg(grade)fromscgroupby

sno

select*fromavg_cj

(4)修改視圖IS_STUDENT,將年齡均加lo

觀察基本表Student中相應的數(shù)據(jù)是否發(fā)生

變化。

updateis_studentsetsage=sage+l

select*fromisstudent

文檔僅供參考

(5)在視圖IS_STUDENT中插入新的記錄,

學號為9531103,姓名為張玉,女,21歲。

insertintois_student

valuesC9531103',‘張玉‘,'女',21,'信息

系')

select*fromis_student

(6)根據(jù)視圖AVG_CJ,查詢平均成績大于

60的學生的學號。

select*fromavg_cjwhereag>60

2、存儲過程

(1)建立存儲過程student_Gradel,功能

是查詢計算機系學生的成績,包括學號,姓

名,課程名,成績,按學號升序排序。

存儲過程代碼:

createproceduresutdent_gradel

as

文檔僅供參考

selectsc.sno,sname,cname,gradefrom

sc,student,course

wheresc.sno=student.snoand

o=course.enoandsdept=,計算機系’

orderbysc.sno

執(zhí)行存儲過程代碼:

execsutdent_gradel

(2)建立存儲過程student_Grade2,功能

是根據(jù)參數(shù)提供的系名,查詢該系學生的成

績,包括學號,姓名,課程名,成績,按學

號升序排序。

存儲過程代碼:

createproceduresutdent_grade2?sdept

char(20)

as

selectsc.sno,sname,cname,gradefrom

文檔僅供參考

sc,student,course

wheresc.sno=student.snoand

o=course.enoandsdept=@sdept

orderbysc.sno

執(zhí)行存儲過程代碼:

execsutdent_grade2'信息、系'

(3)建立存儲過程student_Grade3,功能是

根據(jù)參數(shù)提供的學生的姓名和課程名,查詢

該學生相應的課程成績,若存在不為空的成

績,則返回參數(shù)值為成績值,否則返回-1。

存儲過程代碼:

createprocedurestudent_grade3?sname

char(10),?cnamevarchar(20),?grade

smallintoutput

as

select@grade=gradefrom

student,sc,coursewhere

文檔僅供參考

student.sno=sc.snoand

o=course.enoandsname=@snameand

cname=@cname

if?gradeisnull

set@grade=-l

執(zhí)行存儲過程代碼:

declare@gsmallint

execstudent_Grade3'李勇','計算機導論

’,@goutput

print@g

(4)建立存儲過程check_Xk,功能是根據(jù)

提供的參數(shù)學號和課程號,完成選課記錄的

插入功能。要求如下:

■首先檢查該課程選課人數(shù)是否已滿(可

自己根據(jù)表中數(shù)據(jù)的情況定義一個限定

值),若滿,則返回一個0;若不滿,繼

續(xù)檢查該學生是否已經(jīng)選滿3門課程,

若滿,則返回-1,否則將選課記錄插入

文檔僅供參考

到SC表中,并返回lo

存儲過程代碼:

createprocedurecheck_xk@sno

char(7),@cnochar(10)

if(selectcount(*)fromscwhere

cno=@cno)>=80

return0

else

if(selectcount(*)fromscwhere

sno=@sno)>=3

return-1

else

begin

溫馨提示

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

評論

0/150

提交評論