Inner join, left join, right join, full join in MySQL

MySQL数据库现有TA, TB 两张表,表数据如下:

TA
ID NAME
1 A_1
2 A_2
3 A_3
4 A_4
5 A_5
7 A_7
TB
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 条数据, 相乘。

猜你喜欢

转载自blog.csdn.net/qq_26817225/article/details/86590734