课程表
create table class( – 课程表
id int primary key auto_increment, – 主键 自增
cname varchar(32) not null – 课程名称
);
学生表
create table student( – 学生表
id int primary key auto_increment, – 学生id 主键 自增
sname varchar(32) not null, – 学生姓名
age int not null – 学生年龄
);
中间表
create table cls_stu_tab( – 中间表
id int primary key auto_increment, – id 主键
cid int not null, – 课程表id
sid int not null – 学生表id
);
添加数据
课程
insert into class (cname) values(‘打野’),(‘上单’),(‘辅助’),(‘射手’),(‘法师’);
学生
insert into student(sname,age) values(‘韩信’,22),(‘李白’,23),(‘孙悟空’,54),(‘兰陵王’,19),(‘小乔’,22),(‘大桥’,23),(‘曹操’,33),(‘太乙真人’,28),(‘鲁班七号’,33),(‘狄仁杰’,88),(‘阿珂’,18),(‘关羽’,25),(‘刘备’,29),(‘张飞’,23),(‘哪吒’,3),(‘黄忠’,56);
中间表
insert into cls_stu_tab (sid,cid) values(1,1),(2,1),(2,3),(3,3),(4,1),(4,2),(5,3),(5,5),(6,3),(6,5),(7,1),(7,2),(7,3),(7,5);
多对多的查询,需要2张和1张中间表
曹操选择哪些课程
select
s.sname, – 学生姓名
c.cname – 课程姓名
from
student s – 学生表
join
cls_stu_tab cst – 中间表
on
s.id=cst.sid – 建立连接学生表和中间表
join
class c – 课程表
on
c.id=cst.cid – 建立连接课程表和中间表
where
s.sname=‘曹操’; – 约束条件
/* 显示结果
±-------±-------+
| sname | cname |
±-------±-------+
| 曹操 | 打野 |
| 曹操 | 上单 |
| 曹操 | 辅助 |
| 曹操 | 法师 |
±-------±-------+
*/
打野都被哪些学生选择了
select
s.sname, – 查询姓名
c.cname – 查询课程
from
student s – 学生表
join
cls_stu_tab cst – 中间表
on
cst.sid=s.id – 建立连接中间表和学生表
join
class c – 课程表
on
cst.cid = c.id – 建立连接中间表和课程表
where
c.cname = ‘打野’; – 约束查询条件
/* 显示结果
±----------±-------+
| sname | cname |
±----------±-------+
| 韩信 | 打野 |
| 李白 | 打野 |
| 兰陵王 | 打野 |
| 曹操 | 打野 |
±----------±-------+
*/