前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mysql 的七种 join

Mysql 的七种 join

作者头像
haifeiWu
发布2018-09-11 10:19:57
4050
发布2018-09-11 10:19:57
举报
文章被收录于专栏:haifeiWu与他朋友们的专栏

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

建表

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

代码语言:javascript
复制
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语句 select * from tbl_dept a inner join tbl_emp b on a.id=b.deptId;
  • 查询结果

左外连接

左外连接文氏图

执行的sql语句以及执行的查询结果
  • 执行的sql语句
代码语言:javascript
复制
select * from tbl_dept a left join tbl_emp b on a.id=b.deptId;
  • 查询结果

右外连接

右外连接文氏图
执行的sql语句以及执行的查询结果
  • 执行的sql语句
代码语言:javascript
复制
select * from tbl_dept a right join tbl_emp b on a.id=b.deptId;
  • 查询结果

左连接

左连接文氏图
执行的sql语句以及执行的查询结果
  • 执行的sql语句
代码语言:javascript
复制
elect * from tbl_dept a left join tbl_emp b on a.id=b.deptId where b.deptId is null;
  • 查询结果

右连接

右连接文氏图
执行的sql语句以及执行的查询结果
  • 执行的sql语句
代码语言:javascript
复制
select * from tbl_dept a right join tbl_emp b on a.id=b.deptId where a.id is null;
  • 查询结果

全连接

全连接文氏图
执行的sql语句以及执行的查询结果
  • 执行的sql语句
代码语言:javascript
复制
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语句
代码语言:javascript
复制
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://cloud.tencent.com/developer/article/1333331

版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 建表
  • 文氏图与SQL语句的编写以及查询结果
    • 内连接
      • 内连接文氏图
  • 左外连接
    • 左外连接文氏图
      • 右外连接
        • 右外连接文氏图
      • 左连接
        • 左连接文氏图
      • 右连接
        • 右连接文氏图
      • 全连接
        • 全连接文氏图
      • 两张表中都没有出现的数据集
        • 文氏图
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档