Fork me on GitHub

mysql的表间关系

一对多关联

  • 使用班级、学生为例:
    • 创建班级信息表
      • 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**

一对一关系

  • 一对一关系与一对多关系类似,只需在外键处添加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;