1. Inner Join(Join , 内连接)
功能:
 返回两个表中都有的记录信息
 也称之为自然连接
 inner可以省略,inner join = join
图解:
 
 语法:
SELECT columns
FROM Table_A A
INNER JOIN Table_B B
ON A.column = B.column;
结果:
 仅包含两个表中匹配的行。
支持:
| JoinType | Mysql | Oracle | Hive | 
|---|---|---|---|
| Inner Join | √ | √ | √ | 
2. Left Outer Join(Left join , 左外连接)
功能:
 返回左表中的所有记录,以及右表中匹配的记录。如果右表中没有匹配,则结果中的右表列显示为 NULL。
 Outer可以省略,Left Outer join = Left join
图解:
 
 语法:
SELECT columns
FROM Table_A A
LEFT JOIN Table_B B
ON A.column = B.column;
结果:
 包含左表的所有行,如果在右表中没有匹配,则相应的右表列为 NULL。
支持:
| JoinType | Mysql | Oracle | Hive | 
|---|---|---|---|
| Left Join | √ | √ | √ | 
变种功能
 返回左表中那些没有在右表查找到的对应行。
图解
 
 语法:
SELECT columns
FROM Table_A A
LEFT JOIN Table_B B
ON A.column = B.column
WHERE B.column IS NULL;
结果
 仅返回A表中不包含B表的记录
举例
 假设 Table A 和 Table B中有以下数据:
 Table A
| PK | Value | 
|---|---|
| 1 | A1 | 
| 2 | A2 | 
| 3 | A3 | 
| 4 | A4 | 
| 5 | A5 | 
Table B
| PK | Value | 
|---|---|
| 2 | B2 | 
| 3 | B3 | 
| 4 | B4 | 
| 6 | B6 | 
| 7 | B7 | 
通过
 A LEFT JOIN B
 ON A.PK = B.PK WHERE B.PK IS NULL
 返回结果
| A.PK | B.PK | A.Value | B.Value | 
|---|---|---|---|
| 1 | NULL | A1 | NULL | 
| 5 | NULL | A5 | NULL | 
3. Right Outer Join(Left join , 左外连接)
功能:
 返回右表中的所有记录,以及左表中匹配的记录。如果左表中没有匹配,则结果中的左表列显示为 NULL。
 Outer可以省略,Right Outer join = Right join
图解:
 
语法:
SELECT columns
FROM Table_A A
RIGHT JOIN Table_B B
ON A.column = B.column;
结果:
 包含右表的所有行,如果在左表中没有匹配,则相应的左表列为 NULL。
支持:
| JoinType | Mysql | Oracle | Hive | 
|---|---|---|---|
| Right Join | √ | √ | √ | 
变种功能
 返回右表中那些没有在左表查找到的对应行。
图解
 
语法:
SELECT columns
FROM Table_A A
RIGHT JOIN Table_B B
ON A.column = B.column
WHERE A.column IS NULL;
结果
 仅返回B表中不包含A表的记录
举例
 假设 Table A 和 Table B中有以下数据:
 Table A
| PK | Value | 
|---|---|
| 1 | A1 | 
| 2 | A2 | 
| 3 | A3 | 
| 4 | A4 | 
| 5 | A5 | 
Table B
| PK | Value | 
|---|---|
| 2 | B2 | 
| 3 | B3 | 
| 4 | B4 | 
| 6 | B6 | 
| 7 | B7 | 
通过
 A RIGHT JOIN B
 ON A.PK = B.PK WHERE A.PK IS NULL
 返回结果
| A.PK | B.PK | A.Value | B.Value | 
|---|---|---|---|
| NULL | 6 | NULL | B6 | 
| NULL | 7 | NULL | B7 | 
4. Full Outer Join(Full Join , 全连接)
功能:
 返回左表和右表中的所有记录。如果没有匹配,则对应表的列显示为 NULL。
 Outer可以省略,Full Outer Join = Full Join
图解:
 
语法:
SELECT columns
FROM Table_A A
FULL JOIN Table_B B
ON A.column = B.column;
结果:
 包含左表和右表中的所有行。未匹配的行在对应列中显示为 NULL。
支持:
| JoinType | Mysql | Oracle | Hive | 
|---|---|---|---|
| Full Join | × | √ | √ | 
变种功能
 返回左表和右表中不存在交集的记录。
图解
 
语法:
SELECT columns
FROM Table_A A
FULL JOIN Table_B B
ON A.column = B.column
WHERE A.column IS NULL OR B.column
结果
 仅返回A表和B表的差集
举例
 假设 Table A 和 Table B中有以下数据:
 Table A
| PK | Value | 
|---|---|
| 1 | A1 | 
| 2 | A2 | 
| 3 | A3 | 
| 4 | A4 | 
| 5 | A5 | 
Table B
| PK | Value | 
|---|---|
| 2 | B2 | 
| 3 | B3 | 
| 4 | B4 | 
| 6 | B6 | 
| 7 | B7 | 
通过
 A FULL JOIN B
 ON A.PK = B.PK WHERE A.PK IS NULL OR B.PK IS NULL
 返回结果
| A.PK | B.PK | A.Value | B.Value | 
|---|---|---|---|
| 1 | NULL | A1 | NULL | 
| NULL | 6 | NULL | B6 | 
| NULL | 7 | NULL | B7 | 
5.Cross Join( 交叉连接 )
功能:
 返回两个表的笛卡尔积,即每个左表的行都与右表的每一行结合。
图解:
 
语法:
SELECT columns
FROM Table_A A
CROSS JOIN Table_B B;
结果:
 包含两个表的所有可能行组合。
支持:
| JoinType | Mysql | Oracle | Hive | 
|---|---|---|---|
| Cross Join | √ | √ | √ | 
6. Self Join(自连接)
功能:
 将表与自身连接。通常用于表中记录的比较。
图解:
 
语法:
SELECT A.column, B.column
FROM Table A A
JOIN Table A B
ON A.column = B.column;
结果:
 返回表中满足条件的行对。
支持:
| JoinType | Mysql | Oracle | Hive | 
|---|---|---|---|
| Self Join | √ | √ | √ | 
7.Left Semi Join
功能:
 返回左表中所有在右表中有匹配的记录。只返回左表的列。
图解:
 
语法:
SELECT columns
FROM Table_A A
LEFT SEMI JOIN Table_B B
ON A.column = B.column;
结果:
 结果:只包含左表中有匹配的行。
支持:
| JoinType | Mysql | Oracle | Hive | 
|---|---|---|---|
| Left Semi Join | × | × | √ | 
8.Anti Join(Anti Join,反连接)
功能:
 返回左表中所有在右表中没有匹配的记录。
图解:
 
语法:
(通常通过 LEFT JOIN + WHERE 或 NOT EXISTS 实现)
SELECT columns
FROM Table_A A
LEFT JOIN Table_B B
ON A.column = B.column
WHERE B.column IS NULL;
结果:
 只包含左表中没有匹配的行。
支持:
| JoinType | Mysql | Oracle | Hive | 
|---|---|---|---|
| Anti Join | × | × | √ | 

















![World of Warcraft [CLASSIC] the Eye of Eternity [EOE] P1-P2](https://i-blog.csdnimg.cn/direct/40c2276b92274dd9a09cc9d9b0d5eec8.jpeg)

