前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL中的Join用法

MySQL中的Join用法

作者头像
Autooooooo
发布2020-11-09 10:18:34
3.3K0
发布2020-11-09 10:18:34
举报
文章被收录于专栏:CoxhuangCoxhuang

SQL中的Join用法

#1 环境

代码语言:javascript
复制
MySQL5.7
Mac

#2 创建表及插入数据

新建两个表tableA及tableB

代码语言:javascript
复制
mysql> create table tableA ( id int(10), name varchar(100) );
mysql> create table tableB ( id int(10), name varchar(100) );

插入数据

tableA:

代码语言:javascript
复制
mysql> insert into tableA values(1,'布鲁日');
mysql> insert into tableA values(2,'巴黎');
mysql> insert into tableA values(3,'伦敦');
mysql> insert into tableA values(4,'柏林');
mysql> insert into tableA values(5,'耶路撒冷');

tableB:

代码语言:javascript
复制
mysql> insert into tableB values(1,'多哈');
mysql> insert into tableB values(2,'耶路撒冷');
mysql> insert into tableB values(3,'新德里');
mysql> insert into tableB values(4,'马尼拉');
mysql> insert into tableB values(5,'吉隆坡');
20200112132138-image.png
20200112132138-image.png

#3 开始

#3.1 inner join

产生的结果是A和B的交集, inner join也可以简写成join

代码语言:javascript
复制
select * from tableA join tableB ON tableA.name=tableB.name;

输出结果:

代码语言:javascript
复制
+------+--------------+------+--------------+
| id   | name         | id   | name         |
+------+--------------+------+--------------+
|    5 | 耶路撒冷     |    2 | 耶路撒冷     |
+------+--------------+------+--------------+
20200112151317-image.png
20200112151317-image.png

#3.2 left join

产生表A的完全集,而B表中匹配的则有值(没有匹配的则以null值取代)。left join返回左表的全部行和右表满足ON条件的行,如果左表的行在右表中没有匹配,那么这一行右表中对应数据用NULL代替。

代码语言:javascript
复制
select * from tableA left join tableB ON tableA.name=tableB.name;

输出结果:

代码语言:javascript
复制
+------+--------------+------+--------------+
| id   | name         | id   | name         |
+------+--------------+------+--------------+
|    5 | 耶路撒冷     |    2 | 耶路撒冷     |
|    1 | 布鲁日       | NULL | NULL         |
|    2 | 巴黎         | NULL | NULL         |
|    3 | 伦敦         | NULL | NULL         |
|    4 | 柏林         | NULL | NULL         |
+------+--------------+------+--------------+
20200112151410-image.png
20200112151410-image.png

左表独有:

代码语言:javascript
复制
select * from tableA left join tableB ON tableA.name=tableB.name where tableB.name is null;

输出结果:

代码语言:javascript
复制
+------+-----------+------+------+
| id   | name      | id   | name |
+------+-----------+------+------+
|    1 | 布鲁日    | NULL | NULL |
|    2 | 巴黎      | NULL | NULL |
|    3 | 伦敦      | NULL | NULL |
|    4 | 柏林      | NULL | NULL |
+------+-----------+------+------+
20200112152142-image.png
20200112152142-image.png

#3.3 right join

与left join相反,产生表B的完全集,而A表中匹配的则有值(没有匹配的则以null值取代)。left join返回左表的全部行和右表满足ON条件的行,如果左表的行在右表中没有匹配,那么这一行右表中对应数据用NULL代替。

代码语言:javascript
复制
select * from tableA right join tableB ON tableA.name=tableB.name;

输出结果:

代码语言:javascript
复制
+------+--------------+------+--------------+
| id   | name         | id   | name         |
+------+--------------+------+--------------+
|    5 | 耶路撒冷     |    2 | 耶路撒冷     |
| NULL | NULL         |    1 | 多哈         |
| NULL | NULL         |    3 | 新德里       |
| NULL | NULL         |    4 | 马尼拉       |
| NULL | NULL         |    5 | 吉隆坡       |
+------+--------------+------+--------------+
20200112151501-image.png
20200112151501-image.png

右表独有:

代码语言:javascript
复制
select * from tableA right join tableB ON tableA.name=tableB.name where tableA.name is null;

输出结果:

代码语言:javascript
复制
+------+------+------+-----------+
| id   | name | id   | name      |
+------+------+------+-----------+
| NULL | NULL |    1 | 多哈      |
| NULL | NULL |    3 | 新德里    |
| NULL | NULL |    4 | 马尼拉    |
| NULL | NULL |    5 | 吉隆坡    |
+------+------+------+-----------+
20200112152345-image.png
20200112152345-image.png

#3.4 full join

A和B的并集,oracle里面有full join,但是在mysql中没有full join 。我们可以使用union来达到目的。

代码语言:javascript
复制
select * from tableA left join tableB ON tableA.name=tableB.name 
union
select * from tableA right join tableB ON tableA.name=tableB.name;

输出结果:

代码语言:javascript
复制
+------+--------------+------+--------------+
| id   | name         | id   | name         |
+------+--------------+------+--------------+
|    5 | 耶路撒冷     |    2 | 耶路撒冷     |
|    1 | 布鲁日       | NULL | NULL         |
|    2 | 巴黎         | NULL | NULL         |
|    3 | 伦敦         | NULL | NULL         |
|    4 | 柏林         | NULL | NULL         |
| NULL | NULL         |    1 | 多哈         |
| NULL | NULL         |    3 | 新德里       |
| NULL | NULL         |    4 | 马尼拉       |
| NULL | NULL         |    5 | 吉隆坡       |
+------+--------------+------+--------------+
20200112151827-image.png
20200112151827-image.png
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-01-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SQL中的Join用法
  • #1 环境
  • #2 创建表及插入数据
  • #3 开始
    • #3.1 inner join
      • #3.2 left join
        • #3.3 right join
          • #3.4 full join
          相关产品与服务
          云数据库 MySQL
          腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档