学生可以学习多种课程
同班同学所学习的课程不完全相同
教师可以教授不同课程
课程可以不同教师教授
1.将字段分配给各个表(确定主建和外部键)
学生姓名  学生出生日期  家庭住址 学号  学生性别
教师姓名  教师证号  教师性别  课程编号  课程名称 
试验时间 教学时间  是否选修
班级编号  班级名称  成绩学生性别   
教师表:
课程表
班级表:
成绩表:
2.用SQL查询"计算机1班"选修"孔夫子"
老师"C语言"课程学生的学号,姓名,成绩.小弟参加公务员考试的题目,帮别人问的,请高手帮忙写一下,十分感谢
在线等

解决方案 »

  1.   

    create table 教师表(
    教师证号 int identity(1,1) primary key,
    教师姓名 varchar(20),   
    教师性别 char(1),
    教学时间  datetime
    )--, 试验时间,不知道这个字段是什么意思create table 课程表(
    课程编号 int identity(1,1)primary key, 
    课程名称 varchar(20) , 
    是否选修 int --1必修
    )create table 班级表(
    班级编号 int identity(1,1) primary key,
    班级名称 varchar(20)
    )-- 成绩 create table 学生表(
    学号 int identity(1,1) primary key, 
    学生姓名 varchar(20),
    学生出生日期 datetime,
    家庭住址 varchar(50),
    学生性别 char(1),
    班级编号 int FOREIGN KEY (班级编号) REFERENCES 班级表(班级编号)
    )create table 教师_课程表(
    id int identity(1,1) primary key,
    教师证号 int FOREIGN KEY (教师证号) REFERENCES 教师表(教师证号),
    课程编号 int FOREIGN KEY (课程编号) REFERENCES 课程表(课程编号)
    )create table 班级_课程表(
    --同班同学所学习的课程不完全相同,
    --我的理解是一个班级必然有相同的课程,
    --而所谓的不完全相同应该是从选修的角度来考虑的
    --也就是说这个表是放必修的.不知道我见解是否正确
    id int identity(1,1) primary key,
    班级编号 int FOREIGN KEY (班级编号) REFERENCES 班级表(班级编号),
    课程编号 int FOREIGN KEY (课程编号) REFERENCES 课程表(课程编号)
    )create table 学生_选修课程表(
    id int identity(1,1) primary key,
    学号 int FOREIGN KEY (学号) REFERENCES 学生表(学号),
    选修课程编号 int FOREIGN KEY (选修课程编号) REFERENCES 课程表(课程编号)
    )--插入测试数据
    insert into 班级表
    select '计算机1班'
    union all
    select '计算机2班'--
    insert into 学生表(学生姓名,班级编号)
    select '张三',1
    union all
    select '张三2',1
    union all
    select '张三3',2
    union all
    select '张三4',2
    union all
    select '张三5',1--
    insert into 课程表
    select '孔夫子',0
    union all
    select '孔夫子',1  --必修孔夫子
    union all
    select '计算机',1--
    insert into 学生_选修课程表
    select 1,1 --计算机1班,选修孔夫子
    union all
    select 3,1 --计算机2班,选修孔夫子-------------------------------------------------------------------------------------
    select a.* from (
    select * from 学生表   where 学生表.班级编号 in(
    select 班级编号 from 班级表 where 班级名称 like '%计算机1班'
    )
    ) as a,学生_选修课程表
    where 学生_选修课程表.学号=a.学号 and
     学生_选修课程表.选修课程编号 =(
    select 课程表.课程编号 from 课程表 where 课程名称 like'%孔夫子' and 是否选修=0
    )
    -----------------------------------------------------------------------------------------
    drop table 学生_选修课程表
    drop table 班级_课程表
    drop table 教师_课程表
    drop table 教师表
    drop table 课程表
    drop table 学生表
    drop table 班级表
    --不知道符合不~~~,学习一把 :)