赞
踩
一.SQL 左外连接,右外连接,全连接,内连接
内连接
a表
id name
1 张3
2 李四
3 王武
b表
id job parent_id
1 23 1
2 34 2
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 |
±—±-------±-------±-----------±------+
笛卡尔乘积
已上连接都是基于cross join(笛卡尔乘积),即两表行数的乘积
@see https://zhidao.baidu.com/question/545819975.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。