mysql :join连接 (7种)

前言

关于MySQL 中 的JOIN 连接,今天在这里进行记录

一:建表

create table tbl_dept(
  id  int primary key  not null auto_increment,
	deptName varchar(30) default null  #部门名
) ENGINE=InnoDB DEFAULT CHARSET=utf8;



 insert into tbl_dept(deptName) values('RD');
 insert into tbl_dept(deptName) VALUES('HR');
 insert into tbl_dept(deptName) VALUES('MK');
 SELECT * from tbl_dept;
 

dept 表·

create table tbl_emp(
  	id  int primary key  not null auto_increment,
	name  varchar(30) default null ,
	deptId int default null,
	CONSTRAINT fk_dept_id FOREIGN KEY (deptId) REFERENCES tbl_dept(id)  # 外键 
	

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 INSERT into tbl_emp(name,deptId) VALUES ('z3',1);
  
 INSERT into tbl_emp(name,deptId) VALUES ('l4',3);
  
 INSERT into tbl_emp(name,deptId) VALUES ('w5',2);
  
 INSERT into tbl_emp(name,deptId) VALUES ('d6',30);


 SELECT * from tbl_emp;

emp表

二、七种连接

1.笛卡尔积

a*b

 select  * from  tbl_emp a ,tbl_dept b; 

在这里插入图片描述

2 . INNER JOIN

a和b 的交集

select  * from  tbl_emp a  INNER JOIN tbl_dept b on a.deptId = b.id; 	

在这里插入图片描述
inner join

3. LEFT JOIN

a 表的全部

 select  * from  tbl_emp a  LEFT JOIN tbl_dept b on a.deptId = b.id ;
					
 

LEFT JOIN

4. RIGHT JOIN

b 的全部;

 select  * from  tbl_emp a  RIGHT JOIN tbl_dept b on a.deptId = b.id ;
			 

在这里插入图片描述

5. 全连接

a 和 b 的并集;

full join mysql 好像不支持;

 select  * from  tbl_emp a  FULL JOIN  tbl_dept b on a.deptId = b.id ;	#

在这里插入图片描述
换一种思路:
就是 左连接 加上 右连接  并去重  
UNION

  select  * from  tbl_emp a  LEFT JOIN tbl_dept b on a.deptId = b.id 
UNION
 select  * from  tbl_emp a  RIGHT JOIN tbl_dept b on a.deptId = b.id ;

union 有去重功效

6. LEFT JOIN 去掉 相交的部分

select  * from  tbl_emp a  LEFT JOIN tbl_dept b on a.deptId = b.id 
where b.id is null;

在这里插入图片描述

7. RIGHT JOIN 去掉 相交的部分

select  * from  tbl_emp a  RIGHT JOIN tbl_dept b on a.deptId = b.id 
where a.deptId is null;

在这里插入图片描述

8.全连接 去掉中间相交的部分

select  * from  tbl_emp a  FULL JOIN  tbl_dept b on a.deptId = b.id 
where a.deptId is null or b.id is null;	

a表的独有 + b表的独有 =全连接去掉中间相交的部分

select  * from  tbl_emp a  LEFT JOIN tbl_dept b on a.deptId = b.id 
where b.id is null
union
select  * from  tbl_emp a  RIGHT JOIN tbl_dept b on a.deptId = b.id 
where a.deptId is null;	

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值