问题描述

在做数据库程序的时候经常会对某条数据的附加属性进行联合查询,这些附加属性不是所有的数据都有。举例来说,我们希望查询客户信息的同时,也能查看客户消费次数。但是,由于不是所有的客户都有消息记录,如果我们直接使用INNER JOIN的话,没有消费记录的客户人信息就不会显示。

实例展示

就客户信息与消费记录的示例具体请看以下数据表。

表1:Custom 表

------------------------
CID |   Name  |  Sex
----+---------+--------1  |  Tom    | Male2  |  Jack   | Male3  |  Lucy   | Female
------------------------

表2:Order 表

-------------------
OID | CID | Count
----+-----+--------1  |  1  |   452  |  3  |   36
-------------------

查询语句

SELECT Custom.Name, Custom.Sex, Order.Count
FROMCustom INNER JOIN Order ON Custom.CID = Order.CID-- 注:SQL语句不分大小写了 ,但一般习惯将关键字大写

查询结果

-------------------------Name  |   Sex  |. Count
-------+--------+--------Tom |  Male  |  45Lucy | Female |  36
-------------------------

在以上的示例中可以看到,使用了INNER JOIN以后,虽然实现多表联合查询,但是由于Jack没有消费记录,所以在最终结果中没有显示出来。

OUTER JOIN 的使用

为了解决这个问题,我们可以使用OUTER JOIN进行联合查询,只需将 INNER 改为 LEFT OUTER 即可,最终查询语句如下:

SELECT Custom.Name, Custom.Sex, Order.Count
FROMCustom LEFT OUTER JOIN Order ON Custom.CID = Order.CID

结果显示如下:

-------------------------Name  |   Sex  | Count
-------+--------+--------Tom  |  Male  |  45Jack |  Maie  | NULLLucy | Female |  36
-------------------------

在返回的结果中,没有数据的记录为NULL。这时只需要在显示时做相应的处理,比如把NULL改成0、"",或者“无”等其他合适的内容即可。

补充说明

在使用OUTER JOIN 的时候,如果使用 LEFT 关键字,则左表是主表,显示其全部内容,如上例所示;如果使用 RIGHT,则右表是主表显示其全部内容。这两个关键字除了左右表谁为主表不一样,其他没有任何不同,在使用的时候可以根据实际情况自由选择。

OUTER JOIN的应用场景相关推荐

  1. full outer join应用场景

    1.背景:和分析师对数的过程,了解到她会使用full outer join 来检测结果表与主表的对齐数量,发现很好用. 2.应用场景:如果主表的所有粒度值都要(如主表粒度是设备,即指所有设备都要在结果 ...

  2. MaxCompute full outer join改写left anti join实践

    简介: ods层数据同步时经常会遇到增全量合并的模型,即T-1天增量表 + T-2全量表 = T-1全量表.可以通过full outer join脚本来完成合并,但是数据量很大时非常消耗资源.本文将为 ...

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

    问题描述: 另外,LEFT JOIN.RIGHT JOIN 和 FULL JOIN 如何适应? 保持自己快人一步,享受全网独家提供的一站式外包任务.远程工作.创意产品订阅服务–huntsbot.com ...

  4. mysql全关联_MySQL实现全关联 full outer join

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

  5. [摘]终于找到一个有助理解left/right/full outer join的例子

    近日在学习<Understading DB2>的时候找到了一个例子,对于理解 left/right/full 三种 outer join 的大有裨益. 先看样本数据,来自DB2的示例数据库 ...

  6. left join 和 left outer join 的区别

    老是混淆,做个笔记,转自:https://www.cnblogs.com/xieqian111/p/5735977.html left join 和 left outer join 的区别 通俗的讲: ...

  7. R语言merge函数全连接dataframe数据(Full (outer) join)、merge函数进行全连接必须将参数all设置为true(all=TRUE)、默认merge函数通过公共列名合并数

    R语言merge函数全连接dataframe数据(Full (outer) join).merge函数进行全连接必须将参数all设置为true(all=TRUE).默认merge函数通过公共列名合并数 ...

  8. R语言merge函数左连接dataframe数据(Left (outer) join in R)、左连接必须将参数all设置(all.x = TRUE)、默认merge函数通过公共列名合并数据集

    R语言merge函数左连接dataframe数据(Left (outer) join in R).merge函数进行左连接必须将参数all设置为(all.x = TRUE).默认merge函数通过公共 ...

  9. oracle full outer join,oracle 内连接(inner join)、外连接(outer join)、全连接(full join)...

    建表语句: create table EMPLOYEE ( EID NUMBER, DEPTID NUMBER, ENAME VARCHAR2(200) ) create table DEPT ( D ...

最新文章

  1. 哪些模块可用于python性能分析_提升Python程序性能的方法有哪些?看完你就知道啦!...
  2. 键桥通讯布局大数据 9.45亿入股上海即富
  3. bzoj 3747: [POI2015]Kinoman
  4. Python操作Redis中的hash
  5. IOS之学习笔记十五(协议和委托的使用)
  6. 56 SD配置-科目分配-定义物料科目设置组
  7. android getevent 代码,Getevent  |  Android 开源项目  |  Android Open Source Project
  8. Gbase相关学习总结
  9. 一个成功的网络营销案例的分析
  10. s7200cpu224xp手册_西门子S7-200模块CPU224XPCN可编程控制器
  11. 本特利电源模块3500/15-05-05-00
  12. [配置] minGW32 安装与环境配置
  13. 电商物流就是昨天的外卖乱战?千亿市场到底该如何整合
  14. 什么是胖客户端和瘦客户端?什么是哑终端?
  15. Macbook无法开机备份数据 制作安装系统U盘 安装系统 (图文)
  16. 使用 OpenCV 构建文档扫描仪
  17. 网页脚本编程学习笔记
  18. 【Proteus仿真】基于74LS148+74LS279+74LS48的四路抢答器
  19. 20145204张亚军第14周博客总结
  20. 写电子邮件是一件严肃的事情

热门文章

  1. 三星班加罗尔(SRIB)校园面试体验
  2. cobar是什么? 能做什么?
  3. Android Studio Electric Eel 正式版下载地址
  4. 支付宝APP支付 (JAVA生成支付信息,uniapp拉起支付宝支付)
  5. python xlutils模块安装_python接口测试,第三方包xlrd和xlutils,怎么安装
  6. 计算机无法识别华为m3,华为平板M3青春版10.1英寸平板电脑没法充电的原因是什么_华为平板电脑没法充电故障分析...
  7. Adobe2023全家桶win及Mac系统安装包下载及安装教程ps、pr、ai、ae安装包下载
  8. 华为无线网卡插上服务器没反应,无限网卡插在台式机上没反应啊怎么解决
  9. 基于gensim的Deep learning with paragraph2vec 官方models.doc2vec文档解释
  10. 为什么谷歌浏览器修改主题背景,只有标签栏变了,但新标签页背景不变?怎么办?