总的来说,四种JOIN的使用/区别可以描述为:

left join 会从左表(shop)那里返回所有的记录,即使在右表(sale_detail)中没有匹配的行。

right outer join 右连接,返回右表中的所有记录,即使在左表中没有记录与它匹配

full outer join 全连接,返回左右表中的所有记录

在表中存在至少一个匹配时,inner join 返回行。 关键字inner可省略。

Join

一共有三种OUTER JOIN:

LEFT OUTER JOIN

RIGHT OUTER JOIN

FULL OUTER JOIN

关键字OUTER是可选择的,取决于具体语言,在实现上它们都是遵循标准的,因此FULL JOIN和FULL OUTER JOIN是一样的。

  • 接着将以简化的数据集来说明这些JOIN语句。考虑有如下两个数据集,注意到有些元素在car表中有,在person表中没有,反过来也是。
  • LEFT OUTER JOIN
  • 现在执行如下SQL语句(左连接,LEFT OUTER JOIN):
  • SELECT * FROM person LEFT OUTER JOIN car ON car_id = id;
  • 将会得到如下结果:
  • 左连接(LEFT OUTER JOIN)会输出左边的表中的所有结果,如果右边的表中有相应项,则会输出,否则为NULL
  • 因此,如果要找出在person(左边的表)中有,而在car(右边的表)中没有的数据项,可以使用如下的SQL语句:
  • SELECT * FROM person LEFT OUTER JOIN car ON car_id = id WHERE id IS NULL;
  • 将会得到如下结果:
  • RIGHT OUTER JOIN
  • 如果使用右连接,结果将会输出car表中所有的数据项和person表中相应的匹配项(注意你现在是获取了右边的表中的所有数据项):
  • SELECT * FROM person RIGHT OUTER JOIN car ON car_id = id;
  • 将会得到如下结果:
  • FULL OUTER JOIN(意义有变化,非全部显示)
  • 如果想要取得所有的元素项,则可以使用FULL JOIN:
  • SELECT * FROM person full JOIN car ON car_id = id;
  • 将会得到如下结果:
  • CROSS JOIN
  • 最后还有一个CROSS JOIN,笛卡儿积,将会返回person表中每个元素分别匹配car中所有元素的结果,即N*M组合。
  • SELECT * FROM person CROSS JOIN car;
  • 将会得到如下结果:
  • 最后附上一张图解:
  • 这边也有一张图清楚的说明了每个JOIN操作。建议把上面的内容浏览一边后,再好好看下这张图片,相信对JOIN的操作应该就完全明白了。

full outer join 与full join的区别_基础小白的SQL的JOIN语法解析相关推荐

  1. python和excel数据分析有什么区别_用Excel、SQL、Python做数据分析有何不同?

    作者简介 HeoiJin:立志透过数据看清世界的产品策划,专注爬虫.数据分析.产品策划领域. 万物皆营销 | 资本永不眠 | 数据恒真理 CSDN:https://me.csdn.net/weixin ...

  2. left join左表百万数据查询慢_Spark SQL 之 Join 实现

    正好最近跑一些spark sql ,重新温习了遍有关联合查询的一些底层实现,参考这位博主的分享Spark SQL 之 Join 实现 Join作为SQL中一个重要语法特性,几乎所有稍微复杂一点的数据分 ...

  3. 图解SQL inner join、left join、right join、full outer join、union、union all的区别

    对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对 于Select出来的结果集是什么样子有点不是很清楚.Codi ...

  4. join和countDownLatch原理及区别详解

    先上结论 原理 join 原理:在当前线程中调用另一个线程线程 thread 的 join() 方法时,会调用该 thread 的 wait() 方法,直到这个 thread 执行完毕(JVM在 ru ...

  5. 详细解释C# 中Path.Join与Path.Combine的区别

    C# 中Path.Join与Path.Combine的区别 public static void Main(){var path1 = "C:/Program Files/";va ...

  6. oracle sql 多表 嵌套子查询 连接查询, join where exist in 的区别

    sql中exits和in的区别 转:http://hi.baidu.com/delphi_relive/blog/item/d7c0034a49c4932208f7ef21.html in 和 exi ...

  7. sqr和Oracle的区别,Oracle学习笔记:a inner join b与from a,b where a.x=b.x的差异

    近期,在使用Oracle的过程中,由以下两段代码的执行引发的思考,到底 select * from a,b where a.id = b.id 和 select * from a inner join ...

  8. oracle等值连接与innerjoin,inner join(等值联接)、left join(左联接)、right join(右联接)用法及区别...

    inner join(等值连接) 只返回两个表中联结字段相等的行 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有 ...

  9. Left,Right,Outer和Inner Joins有什么区别?

    我想知道如何区分所有这些不同的连接... #1楼 内连接 :仅显示行,何时从两个表中获取数据. 外连接 (左/右):显示从与配对行(S)的左/右表中的所有结果,如果它存在与否. #2楼 只有4种: 内 ...

最新文章

  1. php mysql 随机字符串函数是,mysql生成随机字符串函数分享
  2. 找到所有小于N的素数
  3. 三菱e68系统程序传输_盘点那些年用过的数控操作系统,全会操作的话你肯定是老师傅...
  4. producer send源码_RocketMq系列之Producer顺序消息发送源码分析(四)
  5. python中case的用法_用 Python 实现简单的 switch/case 语句
  6. mysql的告警日志_运维日记|MySQL关于aborted告警日志的分析
  7. tomcat源码分析(一)从tomcat架构说起
  8. u盘安装centos 7.2
  9. 基于mycat的mysql_MySQL基于Mycat实现读写分离
  10. Google C++ Testing Framework之断言
  11. 2022张宇考研基础30讲 第十一讲 多元函数微分学
  12. 移动端车牌识别sdk——技术干货
  13. 如何理解静态库与动态库
  14. 微信通讯录java实现的,小程序组件之仿微信通讯录的实现代码
  15. 鸿蒙生死印是谁的,逆天邪神:鸿蒙印的器灵还存在,或许云澈将知道些关于远古的秘密...
  16. Quorum NWR算法
  17. java aes iv_java AES加密解密
  18. 短视频 SDK 架构设计实践
  19. 弘辽科技:拼多多推广计划怎么设置划算?如何做好推广?
  20. 终于把“翻转课堂”、“微课”和“慕课”说明白了

热门文章

  1. 微软CRM记录列表每页显示超过250个记录解决办法
  2. ROW_NUMBER
  3. Objective-C的hook方案(一): Method Swizzling
  4. sharepoint搜索pdf文档
  5. Jscript 控制程序的流程
  6. Stanford机器学习---第十一讲.异常检测
  7. 【干货】2020十大消费新机遇.pdf(附下载链接)
  8. 【报告分享】2020年上半年中国直播电商行业发展分析报告.pdf(附下载链接)...
  9. Delaunay三角化实现原理
  10. php 面向接口,php开发app接口