一对多关联
- 使用班级、学生为例:
- 创建班级信息表
- create table classes(class_id int auto_increment primary key,class_name varchar(20));
- 创建学生信息表
- create table student01(stu_id int primary key auto_increment,stu_name varchar(20) not null,class_id int,foreign key(class_id) references classes(class_id));
- 插入班级数据
- insert into classes values(0,”java01”),(0,”java02”),(0,”java03”),(0,”java04”),(0,”java05”);
- 插入学生数据
- insert into student01 values(0,”张三”,4),(0,”李斯”,2),(0,”王五”,1),(0,”赵六”,5),(0,”田七”,2);
- insert into student01 values(0,”周毅”,4),(0,”吴三”,2),(0,”郑思”,1),(0,”王琦”,5),(0,”赵四”,2);
注意:如果关联的外键,而外键的值在关联的表中不存在,则无法成功插入
error: insert into student2 values(0,”钱琪”,11);
- 创建班级信息表
- 多表查询数据
- 查看所有的学生姓名及其所在的班级 ?
- select student01.stu_name,classes.class_name from student01,classes where student01.class_id=classes.class_id;
- 表名.字段名 可以指定到对应表中的某个字段,在多表联合查询的时候使用
- 在多表联合查询的时候,from后面可以跟多个表
- 展示java01班所有的学生?
- select student01.stu_name,classes.class_name from student01,classes where student01.class_id=classes.class_id and classes.class_id=1;
- 需求3: 展示所有学生的所有信息
- select student01.stu_name,classes.class_name from student01,classes where student01.class_id=classes.class_id;
- 查看所有的学生姓名及其所在的班级 ?
- 连接关系查询
- 内连接 inner join
- 查询所有学生及姓名
- select student01.stu_name,classes.class_name from student01 inner join classes on student01.class_id = classes.class_id;
- 左联(左外连接) left join 或者 left out join
- select student01.stu_name,classes.class_name from classes left join student01 on student01.class_id = classes.class_id;
- 右联(右外连接) right join 或者 right out join
- select…from 表1 inner/left/right join 表2 on 条件;
- 参考资料:https://blog.csdn.net/plg17/article/details/78758593?utm_source=blogxgwz0**
- 查询所有学生及姓名
- 内连接 inner join
一对一关系
- 一对一关系与一对多关系类似,只需在外键处添加unique条件即可
多对多
- 设计表
- 使用某个班级学生、选修课列表、学生选择的课表为例:
- 学生表
- create table student02(stu_id int primary key auto_increment,stu_name varchar(20) not null);
- 选修课列表
- create table course_list(course_id int primary key auto_increment,course_name varchar(20));
- 学生选择的课表
- create table stu_course(stu_id int,course_id int,primary key(stu_id,course_id),foreign key(stu_id) references student02(stu_id),foreign key(course_id) references course_list(crourse_id));
- 外键格式: foreign key(外键字段名) references 表名(关联字段名)
- student02学生id是外键,需要关联student02学生表的stu_id主健,
- 学生表
- 插入数据
- 插入学生:
- insert into student02 values(0,”张三”);
- insert into student02 values(0,”李四”);
- insert into student02 values(0,”王五”);
- insert into student02 values(0,”赵六”);
- insert into student02 values(0,”田七”);
- 插入课程:
- insert into course_list values(0,”python”);
- insert into course_list values(0,”java”);
- insert into course_list values(0,”h5”);
- insert into course_list values(0,”ui”);
- 插入选修课数据:
- insert into stu_course values(1,1);
- insert into stu_course values(1,2);
- insert into stu_course values(1,4);
- insert into stu_course values(3,1);
- insert into stu_course values(3,4);
insert into stu_course values(1,1);
insert into stu_course values(1,8);
注意:如果关联了外键,而外键的值在关联的表中存在或不存在,都无法成功插入
- 查询数据
- 查询学生的选修课
- select student02.,course_list. from student02,course_list,stu_course where student02.stu_id = stu_course.stu_id and course_list.course_id = stu_course.course_id;
