外部联接(Outer Join)是所有 SQL 联接类型中最不为人知的。也许是因为与其他联接类型相比,外部联接的需求较少。无论如何,外部联接本身并没有什么奇特的。正如我们将在这篇文章中看到的几个外部联接的示例,应该足以消除你对它们的任何误解和困惑。

本文将首先讲述 Outer Join 语句的语法和用途,然后会有一些示例说明。

OUTER JOIN 语法

当左(表 A)或右(表 B)表记录中存在匹配项时,OUTER JOIN(或 FULL OUTER JOIN)关键字会返回两个联接表的所有记录。下面的 VEN 图描述了潜在的匹配项和 OUTER JOIN 语法:

因此,FULL OUTER JOIN 会从返回两个表中不匹配的行,以及两个表中的匹配行。换句话说,无论两个表的联接字段(Clave)值是否匹配,查询都会返回行。

还是一头雾水?不用担心,我们将在下一节中看看一些示例,就能一清二楚。

OUTER JOIN 的实践

在本教程中,我们将使用广为人知的 Northwind 示例数据库。

以下 SQL 语句选择所有客户和所有订单:

SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;

由 OUTER JOIN 查询生成的结果集的特征之一是,你可能会在任一联接列中看到 Null 值,因为联接列可能出现在一个表中,但不会出现在另一个表中。在下面的屏幕截图中,我们可以看到Navicat Premium 16中上述查询及其结果:

当然,你不会在两个表列中看到 Null,因为值必须至少出现在一个表中。值得注意的是,在 ContactName 列中出现 Null 是有问题的,因为这意味着订单与现有客户无关。这指出数据库设计存在缺陷,很可能是缺少外键约束。

我们的第二个示例是从项目管理数据库中获取数据,即项目经理和项目。以下是 SQL 语句:

SELECT m.name member, p.title project
FROM pm.members mFULL OUTER JOIN pm.projects p ON p.id = m.project_id;

同样,我们可以看到 Null 值(至少一个 Null 值)

在这种情况下,结果表明 Jack Daniel 目前没有项目。这是否构成问题将取决于该组织的具体业务。在任何给定时间,项目经理没有项目或未分配项目可能是完全合理的。

总结

希望今天的文章能够帮助你了解外部联接在查询中的用途和用法。最后一件要注意的事:外部联接可能会产生非常大的结果集,因此要谨慎使用它们,并加入筛选子句(例如 WHERE)以尽量减少返回的行数。

往期回顾

Navicat 被投毒了 | 真相来了!

盗版引发设备瘫痪

Navicat 16 现已支持 OceanBase 社区版

Navicat 成为信通院数据库创新实验室成员

Navicat 学术伙伴计划 - 免费教育版申请

Navicat 技术智库 - 实战演练与各类热门问题解答

免费试用攻略 | Navciat 16 数据库管理工具

干货 | SQL 外部联接 Outer Join相关推荐

  1. SQL 经典回顾:JOIN 表连接操作不完全指南

    也许最强大的SQL功能是JOIN操作.这让所有非关系数据库羡慕不已,因为当你想"合并"两个数据集时,这个概念是如此简单,并且又普遍适用. 简单地说,连接两个表,就是将一个表中的每一 ...

  2. 外部联接(Outer Join)和笛卡尔积(Cartesian Product)

    在这个关于"常见的 SQL 查询错误"的系列中,我们一直在探索看似直观的 SQL 查询构造方法如何导致反模式,从而导致错误结果和/或性能降低.上周,我们暂停了这个系列,讨论了 SQ ...

  3. SQL外部联合:right outer join、left outer join、full outer join

    SQL将外部联合分为了右外部联合(right outer join).左外部联合(left outer join).完全外部联合(full outer join)3个类型. 左外部联合:LEFT OU ...

  4. SQL OUTER JOIN概述和示例

    This article will provide a full overview, with examples of the SQL Outer join, including the full, ...

  5. SQL:OUTER JOIN用法详解

    SQL--JOIN用法 外联接. 外联接可以是左向外联接.右向外联接或完整外部联接.  在 FROM 子句中指定外联接时,可以由下列几组关键字中的一组指定: LEFT JOIN 或 LEFT OUTE ...

  6. SQL中的left outer join,inner join,right outer join用法

    使用关系代数合并数据 1 关系代数 合并数据集合的理论基础是关系代数,它是由E.F.Codd于1970年提出的. 在关系代数的形式化语言中: ?          用表.或者数据集合表示关系或者实体. ...

  7. SQL中的left outer join,inner join,right outer join用法详解1

    LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行. LEFT JOIN 关键字语法 SELECT column_ ...

  8. SQL中的left outer join,inner join,right outer join用法 (左右内连接)

    SQL语句中的left outer join,inner join,right outer join用法 left outer join=left join ,   right outer join= ...

  9. 联接(CROSS JOIN、JOIN、OUTER JOIN)

    JOIN 表运算符对两个输入表进行操作.联接的类型有交叉联接.内部联接和外部联接,它们的区别在于如何应用逻辑查询处理阶段.交叉联接仅应用一个阶段--笛卡尔乘积,内部联接应用两个阶段--笛卡尔乘积和筛选 ...

最新文章

  1. onbeforedunload事件
  2. R线性回归模型构建示例
  3. 能量分析攻击day01
  4. 使用Advanced Installer将.exe程序重新封装为.msi程序
  5. android cursor 空,java – Android:即使数据库不为空,Cursor也总是返回null
  6. [转载] strtol() -- 将字符串转换成长整型数(转载)
  7. log4j配置文件(详细)
  8. 【教程】如何批量制作线刷包和卡刷包
  9. 计算机网络——常用的网络命令
  10. 如何创造一个能和你对话的语音AI?
  11. vue+tsx初体验
  12. 【数据结构】图邻接矩阵的创建完整代码
  13. 群发微信图文消息,但是正文中的图片却不显示
  14. CAS算法与ABA问题
  15. 西安腾讯云面试总结(已拿offer)
  16. A Novel Proof-of-Reputation Consensus for Storage Allocation in Edge Blockchain Systems 精读笔记(三)
  17. 来11:1 信就是所望之事的实底,是未见之事的确据。
  18. 庆科信息阿里IoT“物联网创新应用大赛”正式开战
  19. 外链自动转内链html,typecho网站外链自动转换内链插件ShortLinks
  20. Synergy 编译

热门文章

  1. 学生信息管理系统python
  2. OpenWrt开发必备软件模块——系统总线ubus
  3. matlab相关,来自一个初学者的收藏
  4. 恢复W ndows10系统方法步骤,Windows 10系统恢复电脑(刷新电脑)的方法步骤图文教程详解...
  5. Akm函数递归和非递归
  6. 轴承特征频率计算公式
  7. 52单片机课程设计——利用52单片机的智能窗帘设计论文+源码
  8. one 主格 复数 宾格_主格、宾格、名词所有格.
  9. 硬盘维修彻底揭密 新手必读
  10. Microsoft Office word 2019教程 - word中的excel表格随着excel表格的变化而变化