1. 程式人生 > 其它 >Mysql的七種join

Mysql的七種join

技術標籤:javaSQLmysqlsql資料庫

首先準備一下需要的表和資料(以Mysql為準)

CREATE TABLE `boy` (
  `bid` int(11) NOT NULL,
  `bname` varchar(50) NOT NULL,
  `gid` int(11) DEFAULT NULL,
  PRIMARY KEY (`bid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `boy` VALUES ('1', '李雷', '1');
INSERT INTO `boy` VALUES ('2', '小明',
'2'); INSERT INTO `boy` VALUES ('3', '小王', null); CREATE TABLE `girl` ( `gid` int(11) NOT NULL, `gname` varchar(50) NOT NULL, `bid` int(11) DEFAULT NULL, PRIMARY KEY (`gid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `girl` VALUES ('1', '韓梅梅', '1'); INSERT INTO `girl` VALUES ('2', '小紅'
, '2'); INSERT INTO `girl` VALUES ('3', '小麗', null);

瞭解一下七種型別都有哪些
在這裡插入圖片描述
交集,A表與B表都包含的資料

SQL:

select * from Boy a inner join Girl b on a.gid = b.gid

查詢結果:
在這裡插入圖片描述

在這裡插入圖片描述
左外連線,包含A加AB共有的資料

SQL:

select * from Boy a left join Girl b on a.gid = b.gid

查詢結果:
在這裡插入圖片描述

在這裡插入圖片描述
右外連線,包含B加AB共有的資料

SQL:

select * from Boy a right join Girl b on a.
gid = b.gid

查詢結果:
在這裡插入圖片描述

前三種都比較簡單,下面稍微分析下
在這裡插入圖片描述
A獨有的資料,這張圖跟第二張圖(左外連線)比較,去掉了AB共有的資料,這個在資料上分析更簡單,下面看一下第二張圖的資料

在這裡插入圖片描述
前兩條資料都是AB共有的資料,我們現在想要的是第三條資料,即在where條件加上b.gid is null即可

SQL:

select * from Boy a left join Girl b on a.gid = b.gid where b.gid is null

查詢結果:
在這裡插入圖片描述

在這裡插入圖片描述
**B獨有的資料,這個跟第三張圖(右外連線)比較,需要新增的條件是a.bid is null **

SQL:

select * from Boy a right join Girl b on a.gid = b.gid where a.bid is null

查詢結果:
在這裡插入圖片描述

在這裡插入圖片描述
AB全表,第二種(右外連線)和第三種(左外連線)相加就可以了,但是這裡有一個問題,兩種查詢方法都包含了AB’共有的,如果相加可能會有重複資料,這時就需要用union,這個關鍵字的左右合併結果集並去重,注意:多個結果集查詢的欄位必須相同

SQL:

select * from Boy a LEFT JOIN Girl b on a.gid = b.gid
UNION
select * from Boy a right join Girl b on a.gid = b.gid

查詢結果:
在這裡插入圖片描述

在這裡插入圖片描述
A獨有+B獨有,第三種和第四種的合集

SQL:

select * from Boy a LEFT JOIN Girl b on a.gid = b.gid where b.gid is null
UNION
select * from Boy a right join Girl b on a.gid = b.gid where a.bid is null

查詢結果:
在這裡插入圖片描述