专栏首页XSYMambaSQL的各种连接Join详解

SQL的各种连接Join详解

SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。

最常见的 JOIN 类型:SQL INNER JOIN(简单的 JOIN)、SQL LEFT JOIN、SQL RIGHT JOIN、SQL FULL JOIN,其中前一种是内连接,后三种是外链接。

假设我们有两张表,Table A是左边的表,Table B是右边的表。

id

name

1

Google

2

淘宝

3

微博

4

Facebook

id

address

1

美国

5

中国

3

中国

6

美国

INNER JOIN

内连接是最常见的一种连接,只连接匹配的行。

inner join语法

select column_name(s)
from table 1
INNER JOIN table 2
ON
table 1.column_name=table 2.column_name

注释:INNER JOIN与JOIN是相同

INNER JOIN产生的结果集中,是1和2的交集。

select * from Table A inner join Table B
on Table A.id=Table B.id

执行以上SQL输出结果如下:

id

name

address

1

Google

美国

3

微博

中国

LEFT JOIN

LEFT JOIN返回左表的全部行和右表满足ON条件的行,如果左表的行在右表中没有匹配,那么这一行右表中对应数据用NULL代替。

LEFT JOIN 语法

select column_name(s)
from table 1
LEFT JOIN table 2
ON table 1.column_name=table 2.column_name

注释:在某些数据库中,LEFT JOIN 称为LEFT OUTER JOIN

LEFT JOIN产生表1的完全集,而2表中匹配的则有值,没有匹配的则以null值取代。

select * from Table A left join Table B
on Table A.id=Table B.id

执行以上SQL输出结果如下:

id

name

address

1

Google

美国

2

淘宝

null

3

微博

中国

4

Facebook

null

RIGHT JOIN

RIGHT JOIN返回右表的全部行和左表满足ON条件的行,如果右表的行在左表中没有匹配,那么这一行左表中对应数据用NULL代替。

RIGHT JOIN语法

select column_name(s)
from table 1
RIGHT JOIN table 2
ON table 1.column_name=table 2.column_name

注释:在某些数据库中,RIGHT JOIN 称为RIGHT OUTER JOIN

RIGHT JOIN产生表2的完全集,而1表中匹配的则有值,没有匹配的则以null值取代。

select * from Table A right join Table B
on Table A.id=Table B.id

执行以上SQL输出结果如下:

id

name

address

1

Google

美国

5

null

中国

3

微博

中国

6

null

美国

FULL OUTER JOIN

FULL JOIN 会从左表 和右表 那里返回所有的行。如果其中一个表的数据行在另一个表中没有匹配的行,那么对面的数据用NULL代替

FULL OUTER JOIN语法

select column_name(s)
from table 1
FULL OUTER JOIN table 2
ON table 1.column_name=table 2.column_name

FULL OUTER JOIN产生1和2的并集。但是需要注意的是,对于没有匹配的记录,则会以null做为值。

select * from Table A full outer join Table B
on Table A.id=Table B.id

执行以上SQL输出结果如下:

id

name

address

1

Google

美国

2

淘宝

null

3

微博

中国

4

Facebook

null

5

null

中国

6

null

美国

本文分享自微信公众号 - XSYMamba(xx441438),作者:王刚涛

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python生成随机数方法小结

    random.randrange(a, b, step):在指定的集合[a,b)中,以step为基数随机取一个数.如random.randrange(0, 20...

    用户5745385
  • 机器学习——KNN算法总结

    用户5745385
  • 机器学习--Numpy基础(一)

    前人栽树,后人乘凉,学习还是要多交流,学习别人的学习经验,这样可以少走弯路,别人推荐的一套“机器学习”相关学习资料,先理解的算法,然后编程实现,对理解“机器学习...

    用户5745385
  • SQL的各种连接Join详解,都需要熟练掌握!

    SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。最常见的 JOIN 类型:SQL INNER JOIN(简单的 JOIN)、...

    掌上编程
  • Apache-Flink深度解析-JOIN 算子

    在《SQL概览》中我们介绍了JOIN算子的语义和基本的使用方式,介绍过程中大家发现Apache Flink在语法语义上是遵循ANSI-SQL标准的,那么再深思一...

    王知无
  • Apache-Flink深度解析-JOIN 算子

    在《Apache Flink 漫谈系列 - SQL概览》中我对JOIN算子有过简单的介绍,这里我们以具体实例的方式让大家对JOIN算子加深印象。JOIN的本质是...

    王知无
  • 通过shell分析表依赖的层级关系(r3笔记第97天)

    在平时的工作环境中,总会有一些表会存在依赖关系,比如我们有三张表customer,用户表subscriber,账户表account 其中客户可以有多个用户或者账...

    jeanron100
  • 王知无的技术周报(3.25-3.29日)

    本篇重点向大家介绍了一种新的JOIN类型 - JOIN LATERAL。并向大家介绍了SQL Server中对LATERAL的支持方式,详细分析了JOIN LA...

    王知无
  • Apache-Flink深度解析-Temporal-Table-JOIN

    在《JOIN LATERAL》中提到了Temporal Table JOIN,本篇就向大家详细介绍什么是Temporal Table JOIN。 在ANSI-S...

    王知无
  • 每日一读 Packtpub.OpenSt

    第六章 Mapping and Editing Techniques 讲地图编辑,第七章 Checking OpenStreetMap Data for Pro...

    py3study

扫码关注云+社区

领取腾讯云代金券