为了账号安全,请及时绑定邮箱和手机立即绑定

“INNER JOIN”和“OUTER JOIN”有什么区别?

“INNER JOIN”和“OUTER JOIN”有什么区别?

慕森卡 2019-05-22 13:20:23
“INNER JOIN”和“OUTER JOIN”有什么区别?此外怎么办LEFT JOIN,RIGHT JOIN和FULL JOIN适合吗?
查看完整描述

4 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

连接用于组合来自两个表的数据,结果是一个新的临时表。连接是基于称为谓词的东西执行的,谓词指定了用于执行连接的条件。内连接和外连接之间的区别在于内连接将仅返回基于连接谓词实际匹配的行。让我们考虑员工和位置表:

在此输入图像描述

内连接: - 内连接通过基于连接谓词组合两个表( Employee Location)的列值来创建新的结果表。该查询将 Employee的每一行与 Location的每一行进行比较,以查找满足join-predicate的所有行对。当通过匹配非NULL值来满足连接谓词时, Employee Location的每个匹配行对的列值将合并到结果行中。以下是内连接的SQL的外观:

select  * from employee inner join location on employee.empID = location.empIDORselect  * from employee, location where employee.empID
 = location.empID

现在,这是运行SQL的结果: 

外连接: - 外连接不要求两个连接表中的每个记录都有匹配的记录。即使没有其他匹配记录,联接表也会保留每条记录。外连接进一步细分为左外连接和右外连接,具体取决于保留哪个表的行(左或右)。

左外连接: - 表的左外连接(或简称左连接)的结果 Employee Location始终包含“左”表(Employee)的所有记录,即使连接条件未找到任何匹配的记录“右”表(位置)。以下是使用上表的左外连接的SQL的样子:

select  * from employee left outer join location on employee.empID = location.empID;//Use of outer keyword is optional

现在,运行此SQL的结果如下: 

右外连接: - 右外连接(或右连接)非常类似于左外连接,除非对表的处理相反。“右”表(位置)中的每一行将至少出现在连接表中一次。如果从“左”表(不匹配的行员工)存在,NULL就会出现在列的员工对于那些在没有匹配的记录位置。这就是SQL的样子:

select * from employee right outer join location  on employee.empID = location.empID;//Use of outer keyword is optional

使用上面的表格,我们可以显示右外连接的结果集是什么样的:


完全外部联接: - 完全外部联接或完全联接是通过在联接的结果中包含不匹配的行来保留不匹配的信息,使用完整的外部联接。它包括来自两个表的所有行,无论另一个表是否具有匹配值。 

图像来源

MySQL 8.0参考手册 - 加入语法

Oracle Join操作


查看完整回答
反对 回复 2019-05-22
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

简单来说:

一个内部联接仅检索匹配的行。

而一个外连接检索一个表匹配的行和其他表中的所有行....结果取决于你使用哪一种:

  • :右表中匹配的行和左表中的所有行

  • :左表中匹配的行和右表中的所有行或

  • 完整:所有表中的所有行。是否有匹配并不重要


查看完整回答
反对 回复 2019-05-22
  • 4 回答
  • 0 关注
  • 2291 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信