#SQL# 完全图解,分分钟弄懂SQL JOIN

本文速读:

  1. 什么是JOIN?
  2. 从多表查询关联数据
  3. 怎么使用JOIN?
  4. INNER JOIN:交集
  5. OUTER JOIN:左全集(LEFT)、右全集(RIGHT)或者合并全集(FULL)
  6. CROSS JOIN:笛卡尔乘积

1、什么是JOIN?

JOIN用于根据两个或多表的列之间的关系,从中查询数据。

#SQL# 完全图解,分分钟弄懂SQL JOIN

2、怎么使用JOIN?

#SQL# 完全图解,分分钟弄懂SQL JOIN

#SQL# 完全图解,分分钟弄懂SQL JOIN

●INNER JOIN

SELECT * FROM T_NumA INNER JOIN T_NumB ON T_NumA.aID=T_NumB.bID

#SQL# 完全图解,分分钟弄懂SQL JOIN

#SQL# 完全图解,分分钟弄懂SQL JOIN

运行的结果是得到两个表之间的交集。用上图可以看出,INNER JOIN符合交换律:“A INNER JOIN B”,“B INNER JOIN A”一样。

●OUTER JOIN

1)、LEFT (OUTER) JOIN

SELECT * FROM T_NumA LEFT OUTER JOIN T_NumB ON T_NumA.aID=T_NumB.bID

#SQL# 完全图解,分分钟弄懂SQL JOIN

#SQL# 完全图解,分分钟弄懂SQL JOIN

运行的结果:产生表A的完全集,而B表中匹配的则有值,没有匹配的则以null值取代。

2)、RIGHT (OUTER) JOIN

SELECT * FROM T_NumA RIGHT OUTER JOIN T_NumB ON T_NumA.aID=T_NumB.bID

#SQL# 完全图解,分分钟弄懂SQL JOIN

从运行的结果一眼就可以看出来,该联接产生表B的完全集,而A表中匹配的则有值,没有匹配的则以null值取代。

3)、FULL(OUTER)JOIN

SELECT * FROM T_NumA FULL OUTER JOIN T_NumB ON T_NumA.aID=T_NumB.bID

#SQL# 完全图解,分分钟弄懂SQL JOIN

#SQL# 完全图解,分分钟弄懂SQL JOIN

由结果可知:该联接产生A和B的并集。但是需要注意的是,对于没有匹配的记录,则会以null做为值。

注:MySQL之中,需要使用UNION合并LFT JOIN和RIGHT JOIN来模拟FULL JOIN。

●CROSS JOIN

SELECT * FROM T_NumA CROSS JOIN T_NumB

#SQL# 完全图解,分分钟弄懂SQL JOIN

由运行结果可知:交叉联接运行的结果就是咱们在数据库系统原理中学的笛卡尔积(Cartesian Product),产生一个6*6=36行记录的结果集。

现在,你懂了SQL JOIN了吗?


分享到:


相關文章: