Mysql多表查询

多表关联关系种类


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连接分类
•交叉连接
•内连接
•左外连接
•右外连接
•全连接
•自连接


多表查询时会产生笛卡尔积(简单说将两个表中所有字段相乘)
为了消除迪卡尔积,需要对表与表之间进行条件判断
比较常见,主外键等值判断。

在多表查询中我们首先要做的事情就是将迪卡尔积消除,
然后在根据具体的条件进行操作。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值