上學時候的數據庫試題,留着備忘

 有一個數據庫,數據庫中包括以下表:數據庫

(a) 「學生Student由學號(Sno)、姓名(Sname)、性別(Ssex)、年齡(Sbirth)、所在系(Sdept)五個屬性組成,記爲:Student(Sno,Sname,Ssex,Sage,Sdept) Sno 爲關鍵字。
 (b) 「
課程Course由課程號(Cno)、課程名(Cname)、先修課號(Cpno)、
學分(Ccredit)四個屬性組成,可記爲: Course(Cno,Cname,Cpno,Ccredit)
Cno
爲關鍵字。
(c) 「
學生選課SC由學號(Sno)、課程號(Cno)、工號(Tno)、學期(semester)、成績(Grade)三個屬性組成, (Sno,Cno,Tnosemester) 爲關鍵字。
d)教師表工號(Tno)、姓名(Tname)、性別(Tsex)、年齡(Tbirth)、所在系(Tdept
e)教師授課表:工號(Tno)、課程號(Cno),開課時間(time
完成下列操做:
1
建立教師表、課程表和教師授課表 數據結構

use gaoyue ide

------建立教師表------ 函數

create table Teacher spa

( 設計

[Tno][varchar](12)NOT NULL, orm

[Tname][char](20)NOT NULL, 索引

[Tsex][char](2)  NULL, ci

[Tbirth][smalldatetime] NULL, get

[Tdept][varchar](12) NULL,

constraint pk_Tno primary key (Tno)

)

------建立課程表------

create table Course

(

[Cno][varchar](6)NOT NULL,

[Cname][varchar](20)NOT NULL,

[Cpno][varchar](6)NOT NULL,

[Ccredit][int]  NULL,

constraint pk_Cno primary key (Cno)

)

------建立教師授課表------

create table GS

(

[Tno][varchar](12)NOT NULL,

[Cno][varchar](6)NOT NULL,

[time][smalldatetime] NULL,

)

2 建立學生選課表,包括主外鍵

------建立學生選課表------

CREATE TABLE SC

  (

[Sno][varchar](12)NOT NULL,

[Tno][varchar](12)NOT NULL,

[Cno][varchar](6)NOT NULL,

[semeter][varchar](6)NOT NULL,

[Grade][int] NULL,

       FOREIGN KEY(Sno)

                          REFERENCES student(Sno),

       FOREIGN KEY(Cno)

                         REFERENCES Course(Cno))

3 創建約束:學生表中學生年齡介於1530之間

-------建立創建約束:學生表中學生年齡介於1530之間-----

alter table student

add constraint CK_age check (datediff("year",Sbirth,getdate()) between 15and 30 )
4
向學生表插入一條記錄20050204,'張三','', '國貿系'

------向學生表插入一條記錄,'張三','', '國貿系'------

INSERT INTO [gaoyue].[dbo].[student]

           ([Sno] ,[Sname],[Ssex] ,[Sbirth],[Sdept])

     VALUES

           ( 20120204 ,'張三' ,'' , null ,'國貿系')
5 建立存儲過程統計指定課程的平均成績,並將統計的結果用輸出參數返回。

-------建立存儲過程統計指定課程的平均成績,並將統計的結果用輸出參數返回-----

create procedure AvgGrade @cn char(20), @avg_grade int output as select @avg_grade = AVG(Grade) from SC join Course C ON C.Cno = SC.Cno where Cname =@cn
6
創建一個UPDATE觸發器,該觸發器防止修改選課表中SC的成績。

-------創建一個UPDATE觸發器,該觸發器防止修改選課表中SC的成績-----

create trigger trigger_SC

    on SC

        instead of update

    AS  

      BEGIN 

      rollback transaction

      END 
7
課程表課程號列上建立惟一彙集索引。

------ 課程表課程號列上建立惟一彙集索引------

Create  UNIQUE CLUSTERED  INDEX  IX_Cno on Course(Cno)
8
建立視圖「view_1」,該視圖包括計算機系學生的信息。

----------建立試圖view 該視圖包括計算機學生的信息-----------

create view view_1

as select * from Student where Sdept = '計算機';
9 查詢比信息系的學生年齡都小的其餘系的學生年齡和姓名。

------查詢比信息系的學生年齡都小的其餘系的學生年齡和姓名-------

select sname,

   cast ((year (getdate())-year (Sbirth)) as int) as 年齡

 from student

where Sbirth >(select max (Sbirth) from student

where sdept='信息系')
10
將學生表中學號爲「20050202」的學生所在院系改成計算機系

---------- 將學生表中學號爲「」的學生所在院系改成計算機系-----------

update Student set Sno = '20050202' where Sdept = '計算機系'
11
刪除學生表中的全部記錄。

---------- 11) 刪除刪除學生表中的全部記錄-----------

delete from student
12 查詢全部任課教師講授的課程,沒有教授課程的教師對應的課程爲空。

----------  查詢全部任課教師講授的課程,沒有教授課程的教師對應的課程爲空。-----------

select t.Tno,t.Tname,s.Cname from Teacher t Left join (select tc.Tno as Tno,c.Cname as Cname from GS tc Left join Course c on tc.Cno = c.Cno) s on t.Tno = s.Tno

select Teacher.Tno, Teacher.Tname, Teacher.Cname from Teacher t Left join (select GS.Tno as Tno, Course.Cname as Cname from GS  Left join Course  on GS.Cno = Course.Cno) SC on Teacher.Tno = SC.Tno

 


13 按授課教師分組查詢高等數學課程的最低分、最高分和平均分。

---------- 按授課教師分組查詢高等數學課程的最低分、最高分和平均分-----------

select Teacher.Tname ,min(SC.grade)as 最低分, max(SC.grade)as 最高分,avg(SC.grade) as 平均分from Teacher ,SC ,GS,Course

where Teacher.Tno=GS.Tno  and Teacher.Tno=GS.Tno  and Course.Cno= SC.Cno and Course.cname ='高等數學' group by Teacher.Tname
14
設計觸發器實現以下約束:沒有選修數據結構課的學生不能選修程序設計
15
建立以下函數:輸入教師工號Tno,課程號Cno,輸出選修了教師Tno所授課程Cno的學生信息,包括姓名,性別,學號,所在院系。

CREATE FUNCTION TC(@Tno varchar(12),@Cno varchar(6))

RETURNS @S TABLE

     ( Sno  varchar (12)  ,

 Sname nchar(20),

       Ssex  nchar(2),

        Sdept varchar (12)

      )

AS

BEGIN

 INSERT @S

  SELECT student.Sno,  student.Sname, student.Ssex, student.Sdept

   FROM student

    INNER JOIN SC ON (student.Sno =SC. Sno)

 WHERE SC.Tno=@Tno

       and SC.Cno=@Cno

  RETURN

END

相關文章
相關標籤/搜索