【校招VIP】各种JOIN的区别

4小时前 收藏 0 评论 0 java开发

【校招VIP】各种JOIN的区别

转载声明:文章来源https://blog.csdn.net/zxr0130/article/details/141420932

1. Inner Join(Join , 内连接)
功能
返回两个表中都有的记录信息
也称之为自然连接
inner可以省略,inner join = join
图解

语法

SELECT columns
FROM Table_A A
INNER JOIN Table_B B
ON A.column = B.column;

结果
仅包含两个表中匹配的行。
支持


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。
支持


变种功能
返回左表中那些没有在右表查找到的对应行。
图解


语法

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


Table B


通过
A LEFT JOIN B
ON A.PK = B.PK WHERE B.PK IS 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。
支持


变种功能
返回右表中那些没有在左表查找到的对应行。
图解

语法

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


Table B


通过
A RIGHT JOIN B
ON A.PK = B.PK WHERE A.PK IS NULL
返回结果


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。
支持


变种功能
返回左表和右表中不存在交集的记录。
图解


语法

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

Table B


通过
A FULL JOIN B
ON A.PK = B.PK WHERE A.PK IS NULL OR B.PK IS NULL
返回结果


5.Cross Join( 交叉连接 )
功能
返回两个表的笛卡尔积,即每个左表的行都与右表的每一行结合。
图解


语法

SELECT columns
FROM Table_A A
CROSS JOIN Table_B B;

结果
包含两个表的所有可能行组合。
支持


6. Self Join(自连接)
功能
将表与自身连接。通常用于表中记录的比较。
图解


语法

SELECT A.column, B.column
FROM Table A A
JOIN Table A B
ON A.column = B.column;

结果
返回表中满足条件的行对。
支持


7.Left Semi Join

功能
返回左表中所有在右表中有匹配的记录。只返回左表的列。
图解

语法

SELECT columns
FROM Table_A A
LEFT SEMI JOIN Table_B B
ON A.column = B.column;

结果
结果:只包含左表中有匹配的行。
支持


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;

结果
只包含左表中没有匹配的行。
支持


C 0条回复 评论

帖子还没人回复快来抢沙发