3 Outer Join
在「cmdev」的员工资料(emp) 表格中,部门编号(deptno) 栏位是用来储存员工所属的部门用的;不过有一些员工并没有部门编号:
所以如果你使用「内部结合」的作法执行下列的查询,你会发现少了两个员工的资料:
这是因为使用「内部结合」的查询,一定要符合「结合条件」的资料才会出现:
如果你想查询的资料是「包含部门名称的员工资料,可是没有分派部门的员工就不用出现了」,那使用「内部结合」就可以完成你的工作了;可是如果你想要查询的资料是「包含部门名称的员工资料,没有分派部门的员工也要出现」,那你就要使用「OUTER JOIN」,这种结合查询通常称为「外部结合」:
除了多一个「LEFT」或「RIGHT」,还有把「INNER」换成「OUTER」外,其它的部份与内部结合的作法都是一样的。
3.1 LEFT OUTER JOIN
所以在结合查询的应用中,如果你想要查询的资料是「包含部门名称的员工资料,没有分派部门的员工也要出现」,也就是希望不符合结合条件的资料也要出现的话,就要换成使用「LEFT OUTER JOIN」来执行结合查询。OUTER JOIN 分为 LEFT 和 RIGHT 两种,在这个范例中,要使用 LEFT 才符合查询的需求:
3.2 RIGHT OUTER JOIN
其实使用「LEFT OUTER JOIN」或是「RIGHT OUTER JOIN」并没有差异,以上列的需求来说,要查询「包含部门名称的员工资料,没有分派部门的员工也要出现」,就是要以「cmdev.emp」表格的资料为主,所以下列两种写法所得到的结果是完全一样的:
了解两种「OUTER JOIN」的后,下列这两个看起来会有点混淆的查询,虽然只有「LEFT」与「RIGHT」的差异,它们所完成的查询需求,却是完全不一样的:
所以使用「RIGHT OUTER JOIN」的查询需求,就成为「部门名称与该部门的员工资料,没有员工的部门也要出现」:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论