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


前言:該篇主要對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');
INSERT INTO `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) NOT NULL,
  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,所以需要對其進行轉換變形,最終達到效果。


by Shawn Chen,2018.6.21日,上午。 


相關內容

MySQL高級知識系列目錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM