一.SQL 左外连接,右外连接,全连接,内连接
a表 id name b表 id job parent_id
1 张3 1 23 1
2 李四 2 34 2
3 王武 3 34 4
a.id同parent_id 存在关系
内连接 inner join与join的结果是一样的
select a.,b. from a inner join b on a.id=b.parent_id
结果是
1 张3 1 23 1
2 李四 2 34 2
左连接
select a.,b. from a left join b on a.id=b.parent_id
结果是
1 张3 1 23 1
2 李四 2 34 2
3 王武 null
右连接
select a.,b. from a right join b on a.id=b.parent_id
结果是
1 张3 1 23 1
2 李四 2 34 2
null 3 34 4
完全连接
select a.,b. from a full join b on a.id=b.parent_id
结果是
1 张3 1 23 1
2 李四 2 34 2
null 3 34 4
3 王武 null
注意:join 默认结果等于inner join
二、自然连接
natural join:自然连接(不允许带on/using)
natrual join:全自然连接,对左右2个表相同名字的列进行等值匹配,不可用on,using操作指定,自动删除多余重名列,自动合并不同的列
natrual left join:左自然连接,保留2个表的列(删除多余重名列),以左表为准,不存在匹配的右表列,值置为NULL
natrual right join:和左自然连接相反
select * from tb_test1 natural join tb_student;
+—-+——–+——–+——-+————+
| id | name | gender | score | birthday |
+—-+——–+——–+——-+————+
| 1 | 李毅 | 男 | 95.30 | 1988-03-20 |
+—-+——–+——–+——-+————+
select * from tb_test1 natural left join tb_student;
+—-+———–+——–+——-+————+
| id | name | gender | score | birthday |
+—-+———–+——–+——-+————+
| 1 | 李毅 | 男 | 95.30 | 1988-03-20 |
| 2 | 二丫 | 女 | 95.30 | NULL |
| 3 | 张三 | 女 | 95.30 | NULL |
| 4 | 李四 | 女 | 95.30 | NULL |
| 7 | 胡鲁瓦 | 男 | 95.30 | NULL |
| 9 | 后羿 | 男 | 95.30 | NULL |
+—-+———–+——–+——-+————+
select * from tb_test1 natural right join tb_student;
+—-+——–+——–+————+——-+
| id | name | gender | birthday | score |
+—-+——–+——–+————+——-+
| 1 | 李毅 | 男 | 1988-03-20 | 95.30 |
| 2 | kevin | 男 | 1987-08-23 | NULL |
| 3 | marry | 女 | 1989-11-25 | NULL |
| 4 | lucy | 女 | 1989-11-25 | NULL |
| 5 | lily | 女 | 1992-01-25 | NULL |
+—-+——–+——–+————+——-+