Mysql 的七种 join

代码星冰乐

专注成就未来

首页 归档 关于

Mysql 的七种 join

Feb 6, 2017 | haifeiWu | Java | 阅读
文章目录
  1. 1. 建表
  2. 2. 文氏图与SQL语句的编写以及查询结果
    1. 2.1. 内连接
      1. 2.1.1. 内连接文氏图
        1. 2.1.1.1. 执行的sql语句以及执行的查询结果
  3. 3. 左外连接
    1. 3.1. 左外连接文氏图
      1. 3.1.0.1. 执行的sql语句以及执行的查询结果
  4. 3.2. 右外连接
    1. 3.2.1. 右外连接文氏图
      1. 3.2.1.1. 执行的sql语句以及执行的查询结果
  5. 3.3. 左连接
    1. 3.3.1. 左连接文氏图
      1. 3.3.1.1. 执行的sql语句以及执行的查询结果
  6. 3.4. 右连接
    1. 3.4.1. 右连接文氏图
      1. 3.4.1.1. 执行的sql语句以及执行的查询结果
  7. 3.5. 全连接
    1. 3.5.1. 全连接文氏图
      1. 3.5.1.1. 执行的sql语句以及执行的查询结果
  8. 3.6. 两张表中都没有出现的数据集
    1. 3.6.1. 文氏图
      1. 3.6.1.1. 执行的sql语句以及执行的查询结果

作 者:haifeiWu
原文链接:https://www.hchstudio.cn/article/2017/56cd/
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。


由于版权原因,请阅读原文 --> Mysql 的七种 join

关注我们

作 者:haifeiWu
原文链接:https://www.hchstudio.cn/article/2017/56cd/
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。

作 者:haifeiWu
原文链接:https://www.hchstudio.cn/article/2017/56cd/
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。

对于SQL的Join,在学习起来可能是比较乱的。我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚。Coding Horror上有一篇文章(实在不清楚为什么Coding Horror也被墙)通过 文氏图 Venn diagrams解释了SQL的Join。

建表

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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);

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

内连接

内连接文氏图

表的内连接

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

    1
    select * from tbl_dept a inner join tbl_emp b on a.id=b.deptId;
  • 查询结果
    这里写图片描述

左外连接

左外连接文氏图

左连接

执行的sql语句以及执行的查询结果
  • 执行的sql语句
1
select * from tbl_dept a left join tbl_emp b on a.id=b.deptId;
  • 查询结果
    左外连接

右外连接

右外连接文氏图

这里写图片描述

执行的sql语句以及执行的查询结果
  • 执行的sql语句
1
select * from tbl_dept a right join tbl_emp b on a.id=b.deptId;
  • 查询结果
    这里写图片描述

左连接

左连接文氏图

这里写图片描述

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

这里写图片描述

右连接

右连接文氏图

右连接

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

右连接

全连接

全连接文氏图

这里写图片描述

执行的sql语句以及执行的查询结果
  • 执行的sql语句
1
2
3
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;
  • 查询结果
    全连接

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

文氏图

执行的sql语句以及执行的查询结果
  • 执行的sql语句
1
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;
  • 查询结果

这里写图片描述

关注我们

作 者:haifeiWu
原文链接:https://www.hchstudio.cn/article/2017/56cd/
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。

分享
JavaMySQL
FutureTask源码分析APP启动速度优化
微信关注我们
分类
  • Android8
  • Go4
  • Java59
  • Kafka,Java1
  • Kotlin2
  • Linux1
  • MapReduce1
  • Python2
  • Raft1
  • Redis1
  • ThreadPoolExecutor1
  • go1
  • 工具1
  • 总结8
  • 旅游日记1
标签
Nginx ChanghuiN haifeiWu Android Java 设计模式 hexo Kotlin 算法 MySQL 源码解析 Python Redis golang web Kafka 配置中心 总结 性能优化 旅游日记 Shell Go 问题排查 译文 Docker Spring Boot 工具 学习笔记 WebFlux 性能测试 go 散列表 源码 netty Raft
最近文章
  • Kafka的日志复制机制
  • 从20到21
  • go 并发编程
  • 【译】了解Linux CPU负载-您何时应该担心?
  • Zookeeper 与分布式锁
  • 基于Redis的分布式锁到底安全吗?
  • 【译】Raft 学生指南
  • ThreadPoolExecutor 的简单梳理
  • MapReduce 的简单实现
  • 使用 Map 实现策略模式
福利专区
    免费SSL证书
      阿里云红包
        腾讯云专属福利
        Copyright © 2021 代码星冰乐. Powered by ChanghuiN. 版权所有 晋ICP备15001365号
        特别感谢: 云服务器服务商 、 CDN 服务商