MySQL的七种join

转载 原文地址

建表

在这里我们先建立两张有外键关联的两张表:

CREATE DATABASE db0206;
USE db0206;

CREATE TABLE `db0206`.`tbl_dept`(  
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `deptName` VARCHAR(30),
  `locAdd` VARCHAR(40),
  PRIMARY KEY (`id`)
) ENGINE=INNODB CHARSET=utf8;

CREATE TABLE `db0206`.`tbl_emp`(  
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(20),
  `deptId` INT(11),
  PRIMARY KEY (`id`),
  FOREIGN KEY (`deptId`) REFERENCES `db0206`.`tb_dept`(`id`)
) ENGINE=INNODB CHARSET=utf8;
/*插入数据*/

INSERT INTO tbl_dept(deptName,locAdd) VALUES('RD',11);
INSERT INTO tbl_dept(deptName,locAdd) VALUES('HR',12);
INSERT INTO tbl_dept(deptName,locAdd) VALUES('MK',13);
INSERT INTO tbl_dept(deptName,locAdd) VALUES('MIS',14);
INSERT INTO tbl_dept(deptName,locAdd) VALUES('FD',15);

INSERT INTO tbl_emp(NAME,deptId) VALUES('z3',1);
INSERT INTO tbl_emp(NAME,deptId) VALUES('z4',1);
INSERT INTO tbl_emp(NAME,deptId) VALUES('z5',1);

INSERT INTO tbl_emp(NAME,deptId) VALUES('w5',2);
INSERT INTO tbl_emp(NAME,deptId) VALUES('w6',2);

INSERT INTO tbl_emp(NAME,deptId) VALUES('s7',3);

INSERT INTO tbl_emp(NAME,deptId) VALUES('s8',4);

Venn图与SQL语句的编写以及查询结果

1. 内连接

内连接Venn图

内连接Venn图

执行的SQL语句以及执行的查询结果:

  • 执行的SQL语句
    select * from tbl_dept a inner join tbl_emp b on a.id=b.deptId;
  • 查询结果
    查询结果

2. 左外连接

左外连接文氏图:

执行的sql语句以及执行的查询结果:

  • 执行的sql语句
    select * from tbl_dept a left join tbl_emp b on a.id=b.deptId;
  • 查询结果

3. 右外连接

右外连接Venn图:

执行的sql语句以及执行的查询结果

  • 执行的sql语句
    select * from tbl_dept a right join tbl_emp b on a.id=b.deptId
  • 查询结果

4. 左连接

左连接Venn图:

执行的SQL语句以及执行的查询结果

  • 执行的sql语句
    select * from tbl_dept a left join tbl_emp b on a.id=b.deptId where b.deptId is null;
  • 查询结果

5. 右连接

右连接文氏图

执行的sql语句以及执行的查询结果:

  • 执行的sql语句
    select * from tbl_dept a right join tbl_emp b on a.id=b.deptId where a.id is null;
  • 查询结果

6. 全连接

全连接文氏图:

执行的sql语句以及执行的查询结果:

  • 执行的sql语句
select * from tbl_dept a right join tbl_emp b on a.id=b.deptId 
union 
select * from tbl_dept a left join tbl_emp b on a.id=b.deptId;
  • 查询结果

7. 两张表中都没有出现的数据集

文氏图:

执行的sql语句以及执行的查询结果:

  • 执行的sql语句
select * from tbl_dept a right join tbl_emp b on a.id=b.deptId where a.id is null union select * from tbl_dept a left join tbl_emp b on a.id=b.deptId where b.deptId is null;
  • 查询结果
原文地址:https://www.cnblogs.com/boothsun/p/7792341.html