SQL的七种join

SQL的七种join_第1张图片
以上的图片是基于理论的七种join关联,但不是所有都适用于Mysql

内容介绍如下

  1. 表展示
  2. 交集
  3. 左/右连接
  4. 左/右连接去除交集
  5. 全连接
  6. 外连接不包含内连接

表展示

表A:
SQL的七种join_第2张图片
表B:
SQL的七种join_第3张图片

笛卡尔积

SELECT * from a,b

SELECT * from a CROSS JOIN b

注意右下角的红线框处,笛卡尔积就是交叉相乘,以上两种写法都是笛卡尔积的写法
SQL的七种join_第4张图片

交集

SQL的七种join_第5张图片

SELECT * from a INNER JOIN b on a.`name`=b.`name`

SQL的七种join_第6张图片

左/右连接(自身+交集)

SQL的七种join_第7张图片
左连接:

select * from a left JOIN b on a.`name`=b.`name`

SQL的七种join_第8张图片

右连接:

select * from a right JOIN b on a.`name`=b.`name`

SQL的七种join_第9张图片

这里的左右连接,主体结构都没有变,都是如下的结构

select * from 表1 right/left JOIN 表2 on 交集条件

左/右连接但不包括交集(自己独有的)

SQL的七种join_第10张图片
左连接,不包括自身:

select * from a LEFT JOIN b on a.`name`=b.`name` WHERE b.`name` IS NULL

SQL的七种join_第11张图片

左连接,不包括自身:

select * from a right JOIN b on a.`name`=b.`name` WHERE a.`name` IS NULL

SQL的七种join_第12张图片

这里的左/右连接不包括自身,都是如下的结构:

select * from 表1 right/left JOIN 表2 on 交集条件 WHERE 表1/表2 .xx is NULL

全连接

SQL的七种join_第13张图片
直接运行FULL JOIN是会出现如下的错误,因为mysql不支持全连接,oracle就只吃支持SQL的七种join_第14张图片
解决方法:

  • 因为全连接可以看做是左连接+右链接+去重(union)
select * from a right JOIN b on a.`name`=b.`name`
UNION
select * from a LEFT JOIN b on a.`name`=b.`name`

SQL的七种join_第15张图片

外连接不包含内连接

SQL的七种join_第16张图片
同样的,这里不支持全连接,所以不行,解决方法如下:

  • 左连接不包含交集+右连接不包含交集
select * from a LEFT JOIN b on a.`name`=b.`name` WHERE b.`name` IS NULL
UNION
select * from a right JOIN b on a.`name`=b.`name` WHERE a.`name` IS NULL

SQL的七种join_第17张图片

你可能感兴趣的:(数据库,JOIN,MYSQL)