MySQL数据库现有TA, TB 两张表,表数据如下:
ID | NAME |
---|---|
1 | A_1 |
2 | A_2 |
3 | A_3 |
4 | A_4 |
5 | A_5 |
7 | A_7 |
ID | NAME |
---|---|
1 | B_1 |
2 | B_2 |
3 | B_3 |
4 | B_4 |
5 | B_5 |
6 | B_6 |
INNER JOIN
select * from TA INNER JOIN TB ON TA.ID = TB.ID;
等效于
select * from TA JOIN TB ON TA.ID = TB.ID;
等效于
select * from TA, TB where TA.ID = TB.ID;
ID | NAME | ID | NAME |
---|---|---|---|
1 | A_1 | 1 | B_1 |
2 | A_2 | 2 | B_2 |
3 | A_3 | 3 | B_3 |
4 | A_4 | 4 | B_4 |
5 | A_5 | 5 | B_5 |
Inner join 是查询出两张表都满足条件的结果。
Left Join
SELECT * FROM ta LEFT JOIN tb on ta.id = tb.id;
等效于
SELECT * FROM ta LEFT OUTER JOIN tb on ta.id = tb.id;
ID | NAME | ID | NANE |
---|---|---|---|
1 | A_1 | 1 | B_1 |
2 | A_2 | 2 | B_2 |
3 | A_3 | 3 | B_3 |
4 | A_4 | 4 | B_4 |
5 | A_5 | 5 | B_5 |
7 | A_7 | NULL | NULL |
左外连接就是在等值连接的基础上加上主表中的未匹配数据,即本例中TA中为匹配的数据 ID为7的数据。
Right Join
SELECT * FROM ta RIGHT JOIN tb on ta.id = tb.id;
等效于
SELECT * FROM ta RIGHT OUTER JOIN tb on ta.id = tb.id;
ID | NAME | ID | NAME |
---|---|---|---|
1 | A_1 | 1 | B_1 |
2 | A_2 | 2 | B_2 |
3 | A_3 | 3 | B_3 |
4 | A_4 | 4 | B_4 |
5 | A_5 | 5 | B_5 |
NULL | NULL | 6 | B_6 |
右外连接就是在等值连接的基础上加上主表中的未匹配数据,即本例中TB中为匹配的数据 ID为6的数据。
Full Join
SELECT * FROM ta FULL JOIN tb;
等效于
SELECT * FROM ta, tb;
ID | NAME | ID | NAME |
---|---|---|---|
1 | A_1 | 1 | B_1 |
2 | A_2 | 1 | B_1 |
3 | A_3 | 1 | B_1 |
4 | A_4 | 1 | B_1 |
5 | A_5 | 1 | B_1 |
7 | A_7 | 1 | B_1 |
... | ... | ... | ... |
1 | A_1 | 6 | B_6 |
2 | A_2 | 6 | B_6 |
3 | A_3 | 6 | B_6 |
4 | A_4 | 6 | B_6 |
5 | A_5 | 6 | B_6 |
7 | A_7 | 6 | B_6 |
全连接就是两张表的笛卡尔积。共36条数据,即TA 6条数据,TB 6 条数据, 相乘。