假设我们有两张表。

  • Table A 是左边的表。
  • Table B 是右边的表。

其各有四条记录,其中有两条记录是相同的,如下所示:

id name       id  name
-- ---- -- ----
1 Pirate 1 Rutabaga
2 Monkey 2 Pirate
3 Ninja 3 Darth Vader
4 Spaghetti 4 Ninja

下面让我们来看看不同的Join会产生什么样的结果。

note: left outer join是左外连接,left outer join也可以写成left join,因为join默认是outer属性的。

SELECT * FROM TableA
INNER JOIN TableB
ON TableA.name = TableB.name id name id name
-- ---- -- ----
1 Pirate 2 Pirate
3 Ninja 4 Ninja

Inner join
产生的结果集中,是A和B的交集。

SELECT * FROM TableA
FULL OUTER JOIN TableB
ON TableA.name = TableB.name id name id name
-- ---- -- ----
1 Pirate 2 Pirate
2 Monkey null null
3 Ninja 4 Ninja
4 Spaghetti null null
null null 1 Rutabaga
null null 3 Darth Vader

Full outer join 产生A和B的并集。但是需要注意的是,对于没有匹配的记录,则会以null做为值。

SELECT * FROM TableA
LEFT OUTER JOIN TableB
ON TableA.name = TableB.name id name id name
-- ---- -- ----
1 Pirate 2 Pirate
2 Monkey null null
3 Ninja 4 Ninja
4 Spaghetti null null

Left outer join 产生表A的完全集,而B表中匹配的则有值,没有匹配的则以null值取代。

SELECT * FROM TableA
LEFT OUTER JOIN TableB
ON TableA.name = TableB.name
WHERE TableB.id IS null id name id name
-- ---- -- ----
2 Monkey null null
4 Spaghetti null null

产生在A表中有而在B表中没有的集合。

SELECT * FROM TableA
FULL OUTER JOIN TableB
ON TableA.name = TableB.name
WHERE TableA.id IS null
OR TableB.id IS null

id name id name
-- ---- -- ----
2 Monkey null null
4 Spaghetti null null
null null 1 Rutabaga
null null 3 Darth Vader

产生A表和B表都没有出现的数据集。

还需要注册的是我们还有一个是“交差集” cross join, 这种Join没有办法用文式图表示,因为其就是把表A和表B的数据进行一个N*M的组合,即笛卡尔积。表达式如下:

SELECT * FROM TableA
CROSS JOIN TableB

这个笛卡尔乘积会产生 4 x 4 = 16 条记录,一般来说,我们很少用到这个语法。但是我们得小心,如果不是使用嵌套的select语句,一般系统都会产生笛卡尔乘积然再做过滤。这是对于性能来说是非常危险的,尤其是表很大的时候。

最新文章

  1. JavaScript 模板引擎实现原理解析
  2. C++ ODB 框架(未实践使用)
  3. Windows 8.1——将网站固定到开始菜单,自定义图标、颜色和Windows推送通知
  4. 组合逻辑的Glitch与时序逻辑的亚稳态
  5. 测试post
  6. gdb之watch命令
  7. js和jQuery创建元素和把元素插入到文档中所用的方法
  8. UVA 12647 Balloon
  9. C#:实体类中做数据验证
  10. Python的html和xml解析库Beautiful Soup
  11. 学习笔记:javascript内置对象:字符串对象
  12. jquery.imagezoom.js制作鼠标悬停图片放大镜特效、参数和最简教程
  13. iota
  14. Grails 第二课
  15. spring mvc 解决跨域问题
  16. #PHP# 华为云 API 方式发送短信
  17. problem during schema drop, statement alter table ACT_RU_VARIABLE
  18. 11g OCM自动打补丁
  19. kmplayer加速播放视频(转)
  20. Ceph的工作原理及流程

热门文章

  1. 生成JNI的DLL时提示找不到jni.h的解决的方法Cannot open include file: 'jni.h': No such file or directory
  2. 第6章 网页解析器和BeautifulSoup第三方插件
  3. Lumen开发:lumen源码解读之初始化(4)——服务提供(ServiceProviders)与路由(Routes)
  4. 设置tableView背景颜色
  5. Git客户端搭建环境(Windows系统)的使用
  6. spider_action
  7. Struts2学习总结(完整版)
  8. 阿里云修改centos7主机名
  9. SVN代码merge
  10. python selenium cookie 登录