MYSQL高階(2): JOIN查詢
阿新 • • 發佈:2021-08-21
前言:該篇主要對MySQL中join語句的七種情況進行總結。
0.準備
join主要根據兩表或多表之間列的關係,從這些表中進行資料的查詢。
首先建立兩張表:tb_emp(員工表)和tb_dept(部門表),並插入相關測試資料。
1.tb_emp表
DROP TABLE IF EXISTS `tb_emp`; CREATE TABLE `tb_emp` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, `deptid` int(11) NOT NULL, PRIMARY KEY (`id`),KEY `idx_tb_emp_name` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `tb_emp`(name,deptid) VALUES ('jack', '1'); INSERT INTO `tb_emp`(name,deptid) VALUES ('tom', '1'); INSERT INTO `tb_emp`(name,deptid) VALUES ('tonny', '1'); INSERT INTO `tb_emp`(name,deptid) VALUES ('mary', '2'); INSERTINTO `tb_emp`(name,deptid) VALUES ('rose', '2'); INSERT INTO `tb_emp`(name,deptid) VALUES ('luffy', '3'); INSERT INTO `tb_emp`(name,deptid) VALUES ('outman', '14');
2.tb_dept表
DROP TABLE IF EXISTS `tb_dept`; CREATE TABLE `tb_dept` ( `id` int(11) NOT NULL AUTO_INCREMENT, `deptname` varchar(20) NOTNULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `tb_dept`(deptname) VALUES ('研發'); INSERT INTO `tb_dept`(deptname) VALUES ('測試'); INSERT INTO `tb_dept`(deptname) VALUES ('運維'); INSERT INTO `tb_dept`(deptname) VALUES ('經理');
從上表插入的資料可知outman是沒有對應部門的。
1.inner join
注:A表示左表,B表示右表,下同。
inner join:A、B共有,也就是交集。
2.left join
left jion:A獨有+AB共有(交集)
3.right join
right join:B獨有+AB共有(交集)
4.A獨有
注:參照left join,A獨有隻是將AB交集部分去掉。
5.B獨有
注:參照right join,B獨有隻是將AB交集部分去掉。
6.AB全有(並集)
由於mysql中不支援full outer join,所以這裡通過union進行轉換。AB並集:AB交集+A獨有+B獨有。
7.A、B獨有並集
A、B獨有並集,相當於A、B全有去掉AB的共有(交集)
總結
這裡主要對MySQL中join語句的7中用法進行了總結,主要注意MySQL不支援full outer join,所以需要對其進行轉換變形,最終達到效果。