SQL中的内联结和外联结

本文介绍了SQL中的内联结和外联结,包括左外联结、右外联结和全外联结的概念及应用场景。通过具体的查询示例,阐述了如何利用这些联结方式查询满足特定条件的数据,以及在数据不匹配时如何处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内联结:当需要查询2张表中同时存在的数据(返回在两张表中所有正确关联的行);
左外联结或右外联结:需要查询2张表中在一张表存在,而在另一张表不存在的数据。
内联结的查询结果都是满足连接条件的元组。但有时我们也希望输出那些不满足联结条件的元组信息。比如,我们想知道每个学生的选课情况,包括已经选课的学生(这部分学生的学号在学生表中有,在选课表中也有,是满足联结条件的),也包括没有选课的学生(这部分学生的学号在学生表中有,但在选课表中没有,不满足联结条件),这时就需要使用外联结。外联结是只限制一张表中的数据必须满足联结条件,而另一张表中的数据可以不满足联结条件的联结方式。3种外联结如下:
(1)左外联结(LEFT OUTER JOIN,简称为LEFT JOIN)
如果在联结查询中,联结管子左端的表中所有的元组都列出来,并且能在右端的表中找到匹配的元组,那么联结成功。如果在右端的表中,没能找到匹配的元组,那么对应的元组是空值(NULL)。这时,查询语句使用关键字LEFT OUTER JOIN。也就是说,左外联结的含义是限制联结关键字右端的表中的数据必须满足联结条件,而不管左端的表中的数据是否满足联结条件,均输出左端表中的内容。左外联结是以左表为主,先查询左表,然后根据ON后的查询条件去匹配右表,如果匹配不到就用NULL值填充。
例如:要查询所有学生的选课情况,包括已经选课的和还没有选课的学生,查询语句为
SELECT 学生表.学号,姓名,班级,课程号,成绩
FROM 学生表 LEFT OUTER JOIN 选课表
ON 学生表.学号=选课表.学号;
左外联结查询中左端表中的所有元组的信息都得到了保留。
(2)右外联结(RIGH TOUTERJOIN,简称为RIGHT JOIN)
右外联结与左外联结类似,只是右端表中的所有元组都被列出来了,限制左端表的数据必须满足联结条件,而不管右端表中的数据是否满足联结条件,均输出右端表中的内容。右外联结是以右表为主,先查询右表,然后根据ON后的查询条件去匹配左表,如果匹配不到就用NULL值填充。
例如:同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值