关系型数据库连接表的几种方式

一.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

@see https://www.cnblogs.com/liulaoshi/p/6219540.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值