1、一对多关系
举例:一个班级对应多个学生
1.1、创建一个班级表:
create table classes(classid int primary key auto_increment, classname varchar(20));
创建一个班级表,包含班级id及班级名字
1.2、创建一个学生表:
create table student(studentid int primary key auto_increment,studentname varchar(20) not null,classid int,foreign key(classid) references classes(classid));
创建一个学生表,包括学生id,姓名及classid,classid为外键,与班级表中的id关联
注:外键使用格式:foreign key(外键字段名) references 表名(关联字段名)
1.3、插入数据
班级表插入数据:
insert into classes values(0,"101班"),(0,"202班"),(0,"303班");
学生表插入数据:
insert into student values(0,"张三",1);
insert into student values(0,"李四",1);
insert into student values(0,"王五",2);
insert into student values(0,"赵六",3);
如图所示:同一个班级可以有多个学生
当插入的classid在classes中不存在时:
insert into student values(0,"田七",4);
无法添加数据
2、一对一关系
与一对多关系类似,在外键的限制条件上加上唯一性约束即 unique 即可
3、多对多关系
举例:学生选课,不同的学生可以选一门课,一个学生也可以选择不同的课
3.1、创建一个学生表
create table student2(studentid int primary key auto_increment,studentname varchar(20) not null);
创建一个学生表,包含学生id及学生姓名
3.2、创建一个课程表
create table courses(coursesid int primary key auto_increment,coursesname varchar(20));
创建一个课程表,包含课程的id及课程的名字
3.3、学生选则课表
create table elective(studentid int,coursesid int,primary key(studentid,coursesid),foreign key(studentid) references
student2(studentid),foreign key(coursesid) references courses(coursesid));
primary key(studentid,coursesid):表示学生不能多次选同一节课
3.4、插入数据
学生表插入数据:
insert into student2 values(0,"张三");
insert into student2 values(0,"李四");
insert into student2 values(0,"王五");
insert into student2 values(0,"赵六");
insert into student2 values(0,"田七");
课程表插入数据:
insert into courses values(0,"语文");
insert into courses values(0,"数学");
insert into courses values(0,"英语");
insert into courses values(0,"理综");
选择课表插入数据:
insert into elective values(1,1);
insert into elective values(1,2);
insert into elective values(1,4);
insert into elective values(3,1);
insert into elective values(3,4);
insert into elective values(1,1);
该语句无法插入
注意:如果关联了外键,而外键的值在关联的表中不存在,则无法成功插入,
数据的查询
1、多表查询数据
例1:查看学生姓名及其所在班级
select student.studentname,classes.classname from student,classes where student.classid = classes.classid;
注:1、表名.字段名 可以指定到对应表中的某个字段,在多表联合查询的时候使用
2、.在多表联合查询的时候,from后面可以跟多个表
例2:查看101班的所有学生
select student.studentname,classes.classname from student,classes where student.classid=classes.classid and
classes.classid=1;
例3:展示所有学生的所有信息
select student.*,classes.* from student,classes where student.classid=classes.classid;
2、连接关系查询
注:格式: select .... from 表1 inner/left/right join 表2 on 条件;
2.1、内链接 inner join
例:查询所有学生及姓名
select student.studentname,classes.classname from student inner join classes on student.classid = classes.classid;
2.2、右外连接 right join 或 right out join
select student.studentname,classes.classname from student right join classes on student.classid = classes.classid;
2.3、左外连接 left join 或 left out join
select student.studentname,classes.classname from student left join classes on student.classid = classes.classid;
注:当使用左连接,左边数据存在,右边没有与之对应的数据则右边显示NULL,右连接与之同理,内链接显示左右两边匹
配的数据。