一、一对多关系特征:表A的一条记录对应表B的多条记录,表B的一条记录仅对应表A的一条记录示例:
学生表(子表)| id | name | class_id | |-----|------|----------| |1001| 张三 | 111 | |1002| 张四 | 222 |
班级表(父表)| id | name | |-----|---------| |111 | class1 | |222 | class2 |
操作要点:
数据添加顺序:先父表(class)后子表(student)数据删除顺序:先子表(student)后父表(class)设计口诀:"一对多,两张表,多的表加外键"查询案例:查找姓"张"学生的班级信息
SELECT s.id, s.name, c.name AS classNameFROM student sJOIN class c ON s.class_id = c.idWHERE s.name LIKE '张%'二、一对一关系特征:表A与表B的记录严格一一对应设计方案:
唯一外键法(推荐)学生表:| id | name | |-----|------| |1001| 张三 |
学生卡表(添加唯一约束):| id | name | student_id | |-----|-------|------------| |111 | card1 | 1001 |
查询案例:查询张三的学生卡信息
SELECT *FROM card cJOIN student s ON c.student_id = s.idWHERE s.name = '张三'三、多对多关系特征:表A与表B的记录可相互对应多条示例:
学生表| id | name | |-----|------| |1001| 张三 |
课程表| id | name | |-----|-------| |111 | Java |
关系表(核心组件)| student_id | course_id | |------------|-----------| |1001 |111 |
操作要点:
数据添加顺序:先父表(student/course)后关系表数据删除顺序:先关系表后父表设计口诀:"多对多,三张表,关系表加外键"查询案例:查找姓"张"学生选修的课程
SELECT s.id, s.name, c.nameFROM student sJOIN student_course_relation scr ON scr.student_id = s.idJOIN course c ON scr.course_id = c.idWHERE s.name LIKE '张%'关键总结关系判断:明确表间关系是编写正确SQL的前提操作顺序:一对多:父表先增后删多对多:关系表最后操作设计口诀:一对多:两张表,多表加外键多对多:三张表,关系表存外键————————————————