【sql的四大连接】

深入理解Sql的四种连接

1、内连接

(典型的连接运算,使用= 或<> 之类的比较运算比较符)包括相等连接的自然连接
内连接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索student 和course表中学生标识号相同的所有行。
(1)innner join:有两种,显式和隐式的,返回连接表中符合连接条件和查询条件的数据行(所谓连接表就是数据库在做查询形成的中间表)
*

  1. 隐式的内连接没有inner join,形成的中间表经过on条件过滤后的笛卡尔积* ,如下
SELECT O.ID,O.ORDER_NUMBER,C.ID,C.NAME
FROM CUSTOMERS C,ORDERS O
WHERE C.ID=O.CUSTOMER_ID;

2 显式内连接,有inner join,形成的中间表经过on条件过滤后的笛卡尔积

 select t1.c1, t2.c2 
from t1 
inner join t2 
on t1.c3 = t2.c3

在这里插入图片描述
内连接与左右连接不同,内连接的代码中,inner join 两边的t1和t2表的位置可以互换,结果都是一样的。

左连接

左连接:left [outer] join,左连接从左表(t1)取出所有记录,与右表(t2)匹配。如果没有匹配,以null值代表右边表的列。outer 可以不写,默认情况下不写outer关键字

select t1.c1, t2.c2 
from t1 
left join t2 
on t1.c3 = t2.c3

下面表结构显示学生信息存在student表中,学生分数存在score表中,我想知道每个学生每科成绩和个人信息,显然这里主表是score表,因为它存储每科每个学生成绩,每个学生对应多个成绩,如果是student表的话每个人只有一条记录,没有办法表示每科成绩。这里我们使用左连接,score表为左表,student表为右表

在这里插入图片描述
左表score表写在left join前面是主表,因此左表的数据记录全部会出现在结果集中,而右表student中的记录如果在主表中没找到匹配,就不会出现在结果集中,上面的s_id=8的记录就没有出现在最终结果中

左连接还有一种情况,就是我只需要取出左表中不在右表的部分数据:

select t1.c1, t2.c2 
from t1 
left join t2 
on t1.c3 = t2.c3
where t1.c3 is nul

在这里插入图片描述

右连接

右连接:right [outer] join,右连接从右表(t2)取出所有记录,与左表(t1)匹配。如果没有匹配,以null值代表左边表的列

select t1.c1, t2.c2 
from t1 
right join t2 
on t1.c3 = t2.c3

实际上,右连接取出的结果和左连接取出的结果是一样的,唯一的不同时字段顺序不同,两者的字段顺序是相反的,左连接的左表结果在右连接的右边,左连接的右表结果在右连接的左边;而对于每种连接来说,哪张表写在前面,哪张表的字段默认就会出现在结果集的左边(select后指定字段的情况除外)
在这里插入图片描述
右连接还有一种情况,就是我只需要取出右表中不在左表的部分数据:
在这里插入图片描述

select t1.c1, t2.c2 
from t1 
right join t2 
on t1.c3 = t2.c3
where t2.c3 is null

内连接(inner on)

内连接,也叫等值连接, inner join得出同时存在t1表和t2表的数据集,通俗一点说就是求两个表的交集。

select t1.c1, t2.c2 
from t1 
inner join t2 
on t1.c3 = t2.c3

在这里插入图片描述
与左连接和右连接不同,内连接的代码中,“inner join”两边的t1表和t2表的位置可以互换,结果都一样。上面的s_id=8的记录没有出现在score表中所以就不是交集,被排出

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值