- 内连接
指连接结果仅仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件。
- 外连接
指连接结果不仅包含符合连接条件的行,同时也包含自身不符合条件的行。分为左外连接、右外连接和全外连接。
- 左外连接:左边表数据行全部保留,右边表保留符合连接条件的行
- 右外连接:右边表数据行全部保留,左边表保留符合连接条件的行
- 全外连接:左外连接 union 右外连接
- 举例说明
存在三个表TestA,TestB,TestC,各有A,B两列
TestA:
A | B |
001 | 10A |
002 | 20A |
TestB:
A | B |
001 | 10B |
003 | 30B |
TestC:
A | B |
001 | 10C |
004 | 40C |
1. 内连接
SELECT *
FROM TestA,TestB
WHERE TestA.A = TestB.A
result:
A | B | A | B |
001 | 10A | 001 | 10B |
2. 外连接
1) 左外连接 left outer join 或 left join
SELECT *
FROM TestA
LEFT OUTER JOIN TestB
ON TestA.A = TestB.A
result:
A | B | A | B |
001 | 10A | 001 | 10B |
002 | 20A |
三个表做左外连接
SELECT *
FROM TestA
LEFT OUTER JOIN TestB
ON TestA.A = TestB.A
LEFT OUTER JOIN TestC
ON TestA.A = TestC.A
result:
A | B | A | B | A | B |
001 | 10A | 001 | 10B | 001 | 10C |
002 | 20A |
2) 右外连接 right outer join 或 right join
SELECT *
FROM TestA
RIGHT OUTER JOIN TestB
ON TestA.A = TestB.A
result:
A | B | A | B |
001 | 10A | 001 | 10B |
003 | 30B |
3) 全外连接 full outer join 或 full join
SELECT *
FROM TestA
FULL OUTER JOIN TestB
ON TestA.A = TestB.A
result:
A | B | A | B |
001 | 10A | 001 | 10B |
002 | 20A | ||
003 | 30B |