上学时候的数据库试题,留着备忘

 有一个数据库,数据库中包括以下表:数据库

(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

相关文章
相关标签/搜索