• 6、where 和on的区别

在使用left jion时,on和where条件的区别如下:
1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

两条SQL:
1、select * form tab1 left join tab2 on (tab1.size = tab2.size) where tab2.name=’AAA’
2、select * form tab1 left join tab2 on (tab1.size = tab2.size and tab2.name=’AAA’)

第一条SQL的过程:1、中间表on条件: tab1.size = tab2.size tab1.id tab1.size tab2.size tab2.name
1 10 10 AAA
2 20 20 BBB
2 20 20 CCC
3 30 (null) (null)

2、再对中间表过滤where 条件:tab2.name=’AAA’ tab1.id tab1.size tab2.size tab2.name
1 10 10 AAA

第二条SQL的过程:1、中间表on条件: tab1.size = tab2.size and tab2.name=’AAA’(条件不为真也会返回左表中的记录) tab1.id tab1.size tab2.size tab2.name

1 10 10 AAA
2 20 (null) (null)
3 30 (null) (null)

总结:

​ 其实以上结果的关键原因就是left join,right join,full join的特殊性,不管on上的条件是否为真都会返回left或right表中的记录,full则具有left和right的特性的并集。 而inner join没这个特殊性,则条件放在on中和where中,返回的结果集是相同的。on为了反映外连接中一方的全连接,而where没有这个功能,内连接配对是可以的。

where 和on的区别相关推荐

  1. RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别

    1. 基本概念 PRC 远程过程调用 Remote Procedure Call,其就是一个节点请求另外一个节点提供的服务.当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手 ...

  2. C++ 笔记(28)— C++ 中 NULL和 nullptr 的区别

    最近看公司代码的时候发现在判断指针是否为空的时候,有的时候用的是 NULL, 有的时候用的是 nullptr 感觉很奇怪,好奇心驱使我查了下两者的区别,发现还是有很多细节需要学习的. 1. NULL ...

  3. gcc 和 g++ 的联系和区别,使用 gcc 编译 c++

    GCC 编译器已经为我们提供了调用它的接口,对于 C 语言或者 C++ 程序,可以通过执行 gcc 或者 g++ 指令来调用 GCC 编译器. 实际使用中我们更习惯使用 gcc 指令编译 C 语言程序 ...

  4. Python2 与 Python3 区别

    Python2.x 与 Python3.x 区别 1. print 函数 Python2 中 print 是语句(statement),Python3 中 print 则变成了函数.在 Python3 ...

  5. Docker 入门系列(1)- 初识容器,镜像、容器、仓库的区别

    Docker 简介 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发 ...

  6. HTTP 协议入门 — (TCP/IP协议族、通信传输流、URI 与 URL 的区别、Cookie 状态管理、HTTP 支持的方法、状态码类别、HTTP 首部字段)

    TCP/IP协议族 在介绍 HTTP 协议之前,我们先对 TCP/IP 协议族有个大概的了解,TCP/IP 协议从上到下主要分为应用层.传输层.网络层和数据链路层,各层的主要功能如下表所示: 协议层 ...

  7. python二进制打开(rb)和文本格式打开(r)什么区别?

    使用 open() 函数以文本格式打开文件和以二进制格式打开文件,唯一的区别是对文件中换行符的处理不同. 在 Windows 系统中,文件中用 "\r\n" 作为行末标识符(即换行 ...

  8. python中__dict__与dir()区别

    前言 Python下一切皆对象,每个对象都有多个属性(attribute),Python对属性有一套统一的管理方案. __dict__与dir()的区别: dir()是一个函数,返回的是list: _ ...

  9. java和C#面向对象的区别

    问题:C#中的构造函数和java的构造函数一样吗? 答: .net的项目中,写实体Entity属性时,经常会为每一个属性写一对get和set方法,在用到这个实体或是一个类时,通过new实例化一个对象, ...

  10. 判别模型和生成模型的区别

    20210703 https://www.zhihu.com/question/20446337 机器学习"判定模型"和"生成模型"有什么区别? 重点 http ...

最新文章

  1. elasticsearch和hadoop集成,gateway.type hdfs设置
  2. 有没有办法检查`null`和`undefined`?
  3. 计算机硬件技术 实验的软件,计算机硬件技术基础软件实验讲义.doc
  4. JAVA实现HTTPserver端
  5. oracle 计划中的view,为何执行计划中会出现个VIEW: VM_NWVW_1 ?
  6. ldap集成nginx
  7. Spark _28_窗口函数
  8. 程序员欢呼:微软Bing开始支持搜索源码、可直接运行
  9. 写在ICDsoft购买和Paypal付款之后
  10. CF1132G Greedy Subsequences
  11. 阿里云因 bug 禁用内部 IP 导致链路不通,造成大规模故障
  12. luogu P2765 魔术球问题 (最小路径覆盖)
  13. w10计算机恢复出厂设置,如何给win10系统的电脑强制恢复出厂设置
  14. SAP 客商之一次性供应商
  15. 2022中国大学专业排名公布:集成电路相关专业哪家强?
  16. 记一次阿里云黑客攻击事件
  17. 7-6 jmu-Java-03面向对象-06-继承覆盖综合练习
  18. 玩vr游戏的计算机配置要求,玩虚拟现实游戏,电脑配置必须强大如此
  19. nao机器人python库安装_NAO机器人学习笔记(1)
  20. 使用Matlab转换高阶方程自变量和因变量

热门文章

  1. 大专计算机毕业当兵有前途吗,24岁的大专毕业生去当兵有前途吗?该怎么办?...
  2. L1-028 判断素数
  3. php图片添加角标,我和极光的那些事儿 | 基于 PHPCordova — 推送实现及角标的设置...
  4. WannaCry 主要利用的哪个漏洞进行攻击的?
  5. 舒亦梵:这四大点作为黄金投资者的你,一定要铭记
  6. Linux 常用命令合集
  7. 赢在中国---经典语录--马云
  8. python 字符串 包含 且不包含_正则表达式:匹配不包含某些字符和不包含某些字符串的写法...
  9. 【竞赛】视频质量评价竞赛经验记录-2(调研和尝试)
  10. atop用法_atop linux 命令 在线中文手册