转自: https://www.cnblogs.com/reaptomorrow-flydream/p/8145610.html

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 美国
 

最新文章

  1. asp.net identity 介绍
  2. Maven依赖Scope标签用法
  3. caller和callee
  4. margin的理解
  5. bzoj 1493 暴力
  6. Logic BIST
  7. HDU 1350
  8. searchDisplayController 时引起的数组越界
  9. 1011. World Cup Betting (20)(最大值)
  10. 小结 iOS 中的 copy
  11. HDOJ 1846 Brave Game
  12. redis 压缩链表
  13. 读取xml文件中节点
  14. 【epubcfi函数generateRangeFromCfi和generateCfiFromRange】两者的区别和适用性,以及另一种实现
  15. springdata 一对多 级联操作 在注解里面开启级联操作@OneToMany(mappedBy = "customer",cascade = CascadeType.ALL)
  16. spring-boot-starter-actouator2.1.4与c3p0版本0.9.1.2冲突
  17. java 二分法学习
  18. Error occurred during initialization of VM Could not reserve enough space for object heap
  19. (python)数据结构---元组
  20. 如何获取STM32 MCU的唯一ID

热门文章

  1. Palindrome Bo (预处理 + 区间DP)
  2. 20155228 2016-2017-2 《Java程序设计》第6周学习总结
  3. css 箭头
  4. python 读写json数据
  5. python模板字符串和格式化字符串
  6. nextjs 服务端渲染请求参数
  7. Linux基础命令---文本统计paste
  8. Failed to load ApplicationContext
  9. linux下启动多个php,分别监听不同的端口。
  10. linux 安装 ImageMagick 和 imagick 扩展