數據庫實驗二

實驗內容和要求

1.針對給定的應用場景或自選應用場景設計數據庫,給出概念模式(E-R圖)、邏輯模式(基本表、主外鍵約束)、物理模式(索引);(場景1:倉庫管理,每個倉庫有若干保管員,每個保管員可以管理多個倉庫,每個倉庫可以存放多種商品,每種商品只能放一個倉庫;場景2:教學管理,每個老師可以教多個學生;每個學生可以跟多個老師學習,每個老師可以教多門課,每門課可以多個老師教,每個學生可以選多門課,每門課可以多個學生選。

2.能夠將SQL語句嵌入高級編程語言或通過存儲過程對數據庫表進行操作(包括增加、修改、刪除、查詢等操作,C、C++、JAVA、ASP、JSP或其它高級語言,數據庫系統不限);

(1)E-R圖:

(2)數據表

①表Student

主鍵:sno

②表Course

  

主鍵:cno

③表Teacher

  

主鍵:tno

④表Teach-class

  

主鍵:tno,cno

外鍵:tno,cno

⑤表Teach-stu

  

主鍵:sno,tno

外鍵:sno,tno

⑥表SC

  

主鍵:sno,cno

外鍵:sno,cno

(3)數據庫關係圖

(4)界面示例

  ③

  

  ④

  

   執行該命令後的Student表:

   學號爲20175198的學生成功被刪除。

  

  

  修改前:

  

  修改後:
 

  修改成功。

  

  

  插入新學生後的部分Student表:

  

  表明插入成功。

  

  

  

  

(5)源程序

/*查詢學生表中的所有學生,並實現調用。*/

create procedure ALLstudent

as

begin

select * from Student;

end

go

execute ALLstudent;

 

/*根據學生的學號,查詢該生的詳細信息,並實現調用。*/

create procedure ChaSno @Sno char(10)

as

begin

select * from Student

where Sno = @Sno;

end

go

execute ChaSno '20175193';

 

/*根據學生的學號,查詢學生的姓名(姓名爲輸出參數),並實現調用。*/

create procedure Chasname

@sno char(10),

@stuname char(20) output

as

begin

select @stuname=Sname from student where sno=@sno;

end

declare @name char;

execute Chasname'20175197',@name output

select @name as 學生姓名;

 

/*刪除學號爲@sno的學生,並實現調用。*/

create procedure delsno

@sno char(10)

as

begin

delete from Student where sno = @sno;

end

go

execute delsno '20175198';

 

/*修改學號爲@sno學生的姓名,性別,年齡,系別,並實現調用。*/

ALTER procedure upstu

(@sno char(10),

@sname char(10),

@ssex char(10),

@sage char(10),

@sdept char(10)

)

as

update Student

set sname = @sname,  ssex = @ssex,

    sage  = @sage,  sdept= @sdept

where sno = @sno

go

execute upstu '20175198','馬龍','男','21','BS'

select * from Student;

/*向學生表中插入學生,並實現調用。*/

create procedure insstu

(@sno char(10),

 @sname char(10),

 @ssex char(10),

 @sage char(10),

 @sdept char(10)

)

as

begin

insert

into Student

values(@sno,@sname,@ssex,@sage,@sdept)

end

go

execute insstu '20175199','孫策','男','19','CS'

 

/* 查詢姓名爲@sname選修的數據庫課程的成績,並實現調用。*/

create procedure findname

@sname char(10)

as

select grade

from SC,Student,Course

where sname = @sname and

      Student.sno = SC.sno and

    SC.cno = Course.cno and

    Cname = '數據庫'

go

execute findname '張靜'

 

/* 查詢選修了課程名爲@cname並且成績高於

該門課程平均分的學生學號和成績,並實現調用。*/

create procedure hgrade

@cname char(10)

as

begin

select sno,grade

from SC

where SC.cno =

              (select cno

            from Course

            where cname = @cname

           )

      and

    grade >=

            (select AVG(grade)

            from SC

            group by cno

            having SC.cno =

                          (select cno

                         from Course

                         where cname = @cname

                        )

           )

end

go

execute hgrade '數據結構'

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章