where 和on的区别
- 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的区别相关推荐
- RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别
1. 基本概念 PRC 远程过程调用 Remote Procedure Call,其就是一个节点请求另外一个节点提供的服务.当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手 ...
- C++ 笔记(28)— C++ 中 NULL和 nullptr 的区别
最近看公司代码的时候发现在判断指针是否为空的时候,有的时候用的是 NULL, 有的时候用的是 nullptr 感觉很奇怪,好奇心驱使我查了下两者的区别,发现还是有很多细节需要学习的. 1. NULL ...
- gcc 和 g++ 的联系和区别,使用 gcc 编译 c++
GCC 编译器已经为我们提供了调用它的接口,对于 C 语言或者 C++ 程序,可以通过执行 gcc 或者 g++ 指令来调用 GCC 编译器. 实际使用中我们更习惯使用 gcc 指令编译 C 语言程序 ...
- Python2 与 Python3 区别
Python2.x 与 Python3.x 区别 1. print 函数 Python2 中 print 是语句(statement),Python3 中 print 则变成了函数.在 Python3 ...
- Docker 入门系列(1)- 初识容器,镜像、容器、仓库的区别
Docker 简介 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发 ...
- HTTP 协议入门 — (TCP/IP协议族、通信传输流、URI 与 URL 的区别、Cookie 状态管理、HTTP 支持的方法、状态码类别、HTTP 首部字段)
TCP/IP协议族 在介绍 HTTP 协议之前,我们先对 TCP/IP 协议族有个大概的了解,TCP/IP 协议从上到下主要分为应用层.传输层.网络层和数据链路层,各层的主要功能如下表所示: 协议层 ...
- python二进制打开(rb)和文本格式打开(r)什么区别?
使用 open() 函数以文本格式打开文件和以二进制格式打开文件,唯一的区别是对文件中换行符的处理不同. 在 Windows 系统中,文件中用 "\r\n" 作为行末标识符(即换行 ...
- python中__dict__与dir()区别
前言 Python下一切皆对象,每个对象都有多个属性(attribute),Python对属性有一套统一的管理方案. __dict__与dir()的区别: dir()是一个函数,返回的是list: _ ...
- java和C#面向对象的区别
问题:C#中的构造函数和java的构造函数一样吗? 答: .net的项目中,写实体Entity属性时,经常会为每一个属性写一对get和set方法,在用到这个实体或是一个类时,通过new实例化一个对象, ...
- 判别模型和生成模型的区别
20210703 https://www.zhihu.com/question/20446337 机器学习"判定模型"和"生成模型"有什么区别? 重点 http ...
最新文章
- elasticsearch和hadoop集成,gateway.type hdfs设置
- 有没有办法检查`null`和`undefined`?
- 计算机硬件技术 实验的软件,计算机硬件技术基础软件实验讲义.doc
- JAVA实现HTTPserver端
- oracle 计划中的view,为何执行计划中会出现个VIEW: VM_NWVW_1 ?
- ldap集成nginx
- Spark _28_窗口函数
- 程序员欢呼:微软Bing开始支持搜索源码、可直接运行
- 写在ICDsoft购买和Paypal付款之后
- CF1132G Greedy Subsequences
- 阿里云因 bug 禁用内部 IP 导致链路不通,造成大规模故障
- luogu P2765 魔术球问题 (最小路径覆盖)
- w10计算机恢复出厂设置,如何给win10系统的电脑强制恢复出厂设置
- SAP 客商之一次性供应商
- 2022中国大学专业排名公布:集成电路相关专业哪家强?
- 记一次阿里云黑客攻击事件
- 7-6 jmu-Java-03面向对象-06-继承覆盖综合练习
- 玩vr游戏的计算机配置要求,玩虚拟现实游戏,电脑配置必须强大如此
- nao机器人python库安装_NAO机器人学习笔记(1)
- 使用Matlab转换高阶方程自变量和因变量
热门文章
- 大专计算机毕业当兵有前途吗,24岁的大专毕业生去当兵有前途吗?该怎么办?...
- L1-028 判断素数
- php图片添加角标,我和极光的那些事儿 | 基于 PHPCordova — 推送实现及角标的设置...
- WannaCry 主要利用的哪个漏洞进行攻击的?
- 舒亦梵:这四大点作为黄金投资者的你,一定要铭记
- Linux 常用命令合集
- 赢在中国---经典语录--马云
- python 字符串 包含 且不包含_正则表达式:匹配不包含某些字符和不包含某些字符串的写法...
- 【竞赛】视频质量评价竞赛经验记录-2(调研和尝试)
- atop用法_atop linux 命令 在线中文手册