sql多对多探讨

--用sql语句探讨一对多 多对多关系
/****
你有3个表 
学生表(学生id 学生姓名)
课程表(课程id 课程名)
成绩表 (学生id 课程id 分数)
班级表(班级id 学生id)
这里的班级表跟学生表就是一对多 一个班级包含了很多学生 反过来就是多对一
这里的课程表就是多对多 一门课对应多个学生选择 一个学生也可以有多个课程可以选 
****/
create database tk
go
use tk
create table class(id int identity(1,1) primary key ,name varchar(255))
create table student(s_id int identity(1,1) primary key,s_name varchar(255) ,id int )
create table course(c_id int identity(1,1) primary key,c_name varchar(255),c_hourse datetime)
create table score(s_id int identity(1,1) primary key,c_id int, s_score int,student_id int)
go
--给学生添加学校信息
alter table student add constraint FK_student_class foreign key(id) references class(id)
go
---给成绩添加学生信息
alter table score add constraint FK_score_student foreign key(student_id) references student(s_id)
go--多对多【学生和课程表是多对多,多对多需要中间表】
---给成绩添加课程信息
alter table score add constraint FK_score_course foreign key(c_id) references course(c_id)
go
insert into class values('耶鲁大学')
go
insert into student values('Tom',1)
go
insert into course values('计算机',NULL)
go
insert into score values(1,90,1)
go
---查询成绩
select student.id 班级, student.s_name as 姓名 ,course.c_name as 课程 ,score.s_score as 成绩 from student student
left join class class on student.id= class.id
left join score score on student.s_id=score.student_id
left join course course on course.c_id = score.c_id
--中间表的处理
--结束测试
use master
drop database tk
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值