多对多查询

课程表

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 |
±----------±-------+
| 韩信 | 打野 |
| 李白 | 打野 |
| 兰陵王 | 打野 |
| 曹操 | 打野 |
±----------±-------+
*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值