SQL的连接join

一、连接说明

unionintersect等集合运算,它的特征是以 “行” 为单位进行操作,通俗点说,就是进行这些集合运算,会导致记录行数的增减,使用union会增加记录行数,使用 intersectexpect 会减少行记录,集合运算不会导致 “列” 数量的改变。而连接(join) 操作,就是将其他表中的列添加过来,进行 “列添加”的运算。当需要从多张表中取出不同的列组成一个新的查询结果时,就需要用的连接(join)运算了。以下是几种连接运算的简单说明。

1、join 和 inner join

joininner join是一样的,为了简写省掉 inner 可直接写为 join, 内连接,表示以两个表的交集为主,查出来是两个表有交集的部分,其余没有关联就不额外显示出来,如下:

在这里插入图片描述

2、left join 左连接

left join 左连接,表A left join 表B,以左为主,表示以表A为主,关联上表B的数据,查出来的结果显示左边的所有数据,然后右边显示的是和左边有交集部分的数据。如下

在这里插入图片描述

3、right join 右连接

right join 右连接,表A right join 表B,以右为主,表示以表B为主,关联查询表A的数据,查出表B所有数据以及表A和表B有交集的数据,如下:

在这里插入图片描述

4、outer join

outer joinMySQL中, 外连接必须指定主表,需指定左右,也即 left outer joinright outer join,实际上,就是 left joinright join,为了方便书写把outer省略掉了,在Oracle中,支持全外连接,即 full outer join;

5、交叉连接 CROSS JOIN

交叉连接 CROSS JOIN (也就是耳熟能详的的笛卡尔积),交叉连接的结果是两个表中行数的乘积,交叉连接的结果中包含了内连接,外连接,全连接的所有结果。实际业务中很少会使用交叉连接,因为交叉连接的记过没有实用价值,运算结果函数太多,需要浪费很多运算性能。

6、连接总结

下图可以囊括连接的所有情况

在这里插入图片描述

二、案例

1、表结构

(1)stu表

idname
1张三
2李四
3王二

(2)score表

idfk_stuscore
1110
2220
4440

2、内连接

select * from stu join score on stu.id = score.fk_stu;
idnameid(1)fk_stuscore
1张三1110
2李四2220

3、左连接

select * from stu left join score on stu.id = score.fk_stu;
idnameid(1)fk_stuscore
1张三1110
2李四2220
3王二

4、右连接

select * from stu right join score on stu.id = score.fk_stu;
idnameid(1)fk_stuscore
1张三1110
2李四2220
4440

5、全连接

select * from stu full join score on stu.id = score.fk_stu;
idnameid(1)fk_stuscore
1张三1110
2李四2220
4440
3王二

6、交叉连接

select * from stu cross join score;
1张三1110
2李四1110
3王二1110
1张三2220
2李四2220
3王二2220
1张三4440
2李四4440
3王二4440
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值