首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >数据库表中多对多关系怎么设计?

数据库表中多对多关系怎么设计?

作者头像
马克java社区
修改2021-05-18 14:27:08
修改2021-05-18 14:27:08
2.8K0
举报
文章被收录于专栏:java大数据java大数据

(多对多关系) 

马克-to-win:Teacher表:两列id,name。

Studnet表: 三列:id,name,age

TeacherStudent表(关系表):三列:id,tid,sid

create table TeacherStudent(id int not null,tid int not null,sid int not null);

2) teacher and student:(一个老师可能有多个学生,一个学生可能有多个老师)

qixy有两个学生:liyaohua and fuwenlong, huanglaosh老师有一个学生--->fuwenlong

INSERT INTO TeacherStudent (id,tid,sid) VALUES(1,1,1);

INSERT INTO TeacherStudent (id,tid,sid) VALUES(2,1,2);

INSERT INTO TeacherStudent (id,tid,sid) VALUES(3,2,2);

qixy的学生显示出来。

select * from Teacher t,Student s,TeacherStudent ts where t.name='qixy' and t.id=ts.tid and s.id=ts.sid;

+----+------+----+-----------+------+----+-----+-----+

| id | name | id | name      | age  | id | tid | sid |

+----+------+----+-----------+------+----+-----+-----+

|  1 | qixy |  1 | liyaohua  |   25 |  1 |   1 |   1 |

|  1 | qixy |  2 | fuwenlong |   26 |  2 |   1 |   2 |

+----+------+----+-----------+------+----+-----+-----+

 

huanglaosh的学生显示出来。

select * from Teacher t,Student s,TeacherStudent ts where t.name='huanglaosh' and t.id=ts.tid and s.id=ts.sid;

+----+------------+----+-----------+------+----+-----+-----+

| id | name       | id | name      | age  | id | tid | sid |

+----+------------+----+-----------+------+----+-----+-----+

|  2 | huanglaosh |  2 | fuwenlong |   26 |  3 |   2 |   2 |

+----+------------+----+-----------+------+----+-----+-----+

fuwenlong的老师显示出来。

select * from Teacher t,Student s,TeacherStudent ts where s.name='fuwenlong' and t.id=ts.tid and s.id=ts.sid;

+----+------------+----+-----------+------+----+-----+-----+

| id | name       | id | name      | age  | id | tid | sid |

+----+------------+----+-----------+------+----+-----+-----+

|  1 | qixy       |  2 | fuwenlong |   26 |  2 |   1 |   2 |

|  2 | huanglaosh |  2 | fuwenlong |   26 |  3 |   2 |   2 |

+----+------------+----+-----------+------+----+-----+-----+

参考一下以下游动的同等写法:(未来springJdbc或mybatisxxxxx的某种技术中也许用的着,因为它严格限制单表游动)

select name from Student where id in (select sid from TeacherStudent  where tid in (select id from Teacher where name='qixy')) ;

结果:

+-----------+

| name      |

+-----------+

| liyaohua  |

| fuwenlong |

+-----------+

 

更多请看下节:https://blog.csdn.net/qq_44591615/article/details/109205764

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档