MySQL高級知識(二)——join查詢


該篇目主要對MySQL中的join語句的七種情況進行總結。

準備

join主要根據兩表或者多表之間的關係,從這些表中進行數據的查詢。
首先創建兩張表,emp(員工表)和dept(部門表),並插入相關測試數據。

  1. emp表
DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `deptid` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_emp_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `emp`(name,deptid) VALUES ('jack', '1');
INSERT INTO `emp`(name,deptid) VALUES ('tom', '1');
INSERT INTO `emp`(name,deptid) VALUES ('tonny', '1');
INSERT INTO `emp`(name,deptid) VALUES ('mary', '2');
INSERT INTO `emp`(name,deptid) VALUES ('rose', '2');
INSERT INTO `emp`(name,deptid) VALUES ('luffy', '3');
INSERT INTO `emp`(name,deptid) VALUES ('outman', '14');

數據庫中的數據情況:
在這裏插入圖片描述

  1. dept表
DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `deptname` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `dept`(deptname) VALUES ('研發');
INSERT INTO `dept`(deptname) VALUES ('測試');
INSERT INTO `dept`(deptname) VALUES ('運維');
INSERT INTO `dept`(deptname) VALUES ('經理');

數據庫中的數據情況:
在這裏插入圖片描述

1. inner join

標註:A表示左表,B表示右表,以下同。
inner join : A、B共有,也就是交集。
在這裏插入圖片描述
例如:select * from emp e inner join dept d on e.deptid = d.id
在這裏插入圖片描述

2. left join

left join:A獨有+AB共有(交集)
在這裏插入圖片描述
例如:select * from emp e left join dept d on e.deptid = d.id
在這裏插入圖片描述

3. right join

right join:B獨有+AB共有(交集)
在這裏插入圖片描述
例如:select * from emp e right join dept d on e.deptid = d.id
在這裏插入圖片描述

4. A獨有

在這裏插入圖片描述
例如:select * from emp e left join dept d on e.deptid = d.id where d.id is null
在這裏插入圖片描述
注意:參照left join,A獨有 只是將AB交集部分去掉

5. B獨有

在這裏插入圖片描述
例如:select * from emp e right join dept d on e.deptid = d.id where e.deptid is null
在這裏插入圖片描述
注:參照right join,B獨有隻是將AB交集部分去掉。

6. AB全有(並集)

在這裏插入圖片描述
例如:

select * from emp e left join dept d on e.deptid = d.id
union
select * from emp e right join dept d on e.deptid = d.id

在這裏插入圖片描述
由於mysql不支持full outer join,所以這裏通過union進行轉換。AB並集 = AB交集 + A獨有 + B獨有。

7. A、B獨有並集

在這裏插入圖片描述
A、B獨有並集,相當於A、B全有去掉AB的共有(交集)
例如:

select * from emp e left join dept d on e.deptid = d.id where d.id is null
union 
select * from emp e right join dept d on e.deptid = d.id where e.deptid is null

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章