多表关联关系种类
1.一对一
例如 人与身份证person表
字段 id name
card表
字段 id number pid
2.一对多(最常见,开发中应用于最多的一种关系)
例如 员工与部门
emp
字段 empno ,ename ,deptno
dept
字段 deptno address dname
3.多对多(会产生一个中间表,用户来描述表与表之间的映射关系)
例如 教师与学生
teacher
id name
student
id name
ts
id tid sid
多对多举例
create table teacher(
id int primary key auto_increment,
name varchar(20)
)
create table student(
id int primary key auto_increment,
name varchar(20)
)
create table ts(
id int primary key auto_increment,
tid int,
sid int,
constraint tid_fk foreign key(tid) references teacher(id),
constraint sid_fk foreign key(sid) references student(id)
)
insert into teacher(name) values('tom');
insert into teacher(name) values('tony');
insert into student(name) values('zhangsan');
insert into student(name) values('lisi');
insert into ts(tid,sid) values(1,1);
insert into ts(tid,sid) values(1,2);
insert into ts(tid,sid) values(2,2);
多表查询
l连接分类
•交叉连接
•内连接
•左外连接
•右外连接
•全连接
•自连接
多表查询时会产生笛卡尔积(简单说将两个表中所有字段相乘)
为了消除迪卡尔积,需要对表与表之间进行条件判断
比较常见,主外键等值判断。
在多表查询中我们首先要做的事情就是将迪卡尔积消除,
然后在根据具体的条件进行操作。