sql 中on和where的区别
table a(id, type):
id type
----------------------------------
1 1
2 1
3 2
table b(id, class):
id class
---------------------------------
1 1
2 2
sql语句1:select a.*, b.* from a left join b on a.id = b.id and a.type = 1;
sql语句2:select a.*, b.* from a left join b on a.id = b.id where a.type = 1;
sql语句3:select a.*, b.* from a left join b on a.id = b.id and b.class = 1;
sql语句1的执行结果为:
a.id a.type b.id b.class
----------------------------------------
1 1 1 1
2 1 2 2
3 2
sql语句2的执行结果为:
a.id a.type b.id b.class
----------------------------------------
1 1 1 1
2 1 2 2
sql语句3的执行结果为:
a.id a.type b.id b.class
----------------------------------------
1 1 1 1
2 1
3 2
由sql语句1可见,left join 中左表的全部记录将全部被查询显示,on 后面的条件对它不起作用,除非再后面再加上where来进行筛选,这就是sql语句2了;由sql语句3可见,on后面的条件中,右表的限制条件将会起作用。
**********************************************************************************
sql语句4:select a.*, b.* from a inner join b on a.id = b.id and a.type = 1;
sql语句5:select a.*, b.* from a inner join b on a.id = b.id where a.type = 1;
sql语句6:select a.*, b.* from a, b where a.id = b.id and a.type = 1;
sql语句7:select a.*, b.* from a, b where a.type = 1 and a.id = b.id;
这四条语句的执行结果一样,如下:
a.id a.type b.id b.class
----------------------------------------
1 1 1 1
2 1 2 2
由此可见,inner join 中on后面的限制条件将全部起作用,这与where的执行结果是一样的。另外,where语句与inner join确实能得到相同的结果,只是效率不同(这个我没有测试过,不过我相信这个结论)。
但是sql语句6是否比sql语句7的效率要低一些,我没有足够的数据量来测试,不过我也相信是如此的。
转载于:https://www.cnblogs.com/shuaishuaiguo/p/6378705.html
sql 中on和where的区别相关推荐
- SQL中where与having的区别
SQL中where与having的区别 目录 SQL中where与having的区别 创建表 插入数据 进行聚合操作 # WHERE是在聚合之前进行数据行的过滤而HAVING实在聚合之后进行新数据的过 ...
- sql中exits和in的区别
sql中exits和in的区别 转:http://hi.baidu.com/delphi_relive/blog/item/d7c0034a49c4932208f7ef21.html in 和 exi ...
- SQL中modify和alter用法区别
SQL中modify和alter用法区别 1. 所属能力大小不同: modify:只能用于修改字段的属性 例如:把age字段变为非空(针对persons表中的age这一个字段进行修改) ALTER T ...
- 数据库查询语句SQL中like、%、-的区别
数据库查询语句SQL中like.%.-的区别 数据库查询语句SQL中like.%.-的区别 %百分号通配符:表示任何字符出现任意次数(可以是0次) SQL 语句选取 name 以字母 "k& ...
- sql中=null和is null区别
sql中=null和is null区别 前言 关于sql语句对null的处理尤其小心,这个null处理的知识点我看了好几次,但是很容易再次犯错,这次记录一个点, 因为这个错误是我看一个帖子看到的错误的 ...
- sql中exists替换in的区别
在sql中使用exists替换in查询时要注意使用exists时一定要关联主查询和子查询的关联不然查询会得不到相应的结果如下语句: 语句一使用in查询: select realname from ...
- 《小常识-23》sql中any与some的区别
#在 SQL 中 ANY 和 SOME 是同义词,所以下面介绍的时候只使用 ANY,SOME 的用法 #和功能和 ANY 一模一样.和 IN 运算符不同,ANY 必须和其他的比较运算符共同使用,而 # ...
- sql中 set 和select 的区别
SQL Server 中对已经定义的变量赋值的方式用两种,分别是 SET 和 SELECT. 对于这两种方式的区别,SQL Server 联机丛书中已经有详细的说明,但很多时候我们 并没有注意,其实这 ...
- sql中where和on的区别
数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户. 在使用left jion时,on和where条件的区别如下: 1. on条件是在生成临时表时使用的条 ...
最新文章
- minecraft正版多人服务器,我的世界:“服务器的潜规则”,有的保护玩家,也有的打破平衡...
- 如何使用MatPlotLib绘制出具有两个 Y 轴的曲线图?
- java项目性能测试过程记录
- opencv学习笔记3:像素处理
- boost::type_traits模块用法的一些示例
- DCMTK 3.6.2(MD支持库)与Microsoft Visual Studio 2017开发环境的搭建
- 【Vscode】调试DotNet Core代码
- HTML DOM之节点操作方法(1)
- 【CCFCSP - 201403-4】无线网络(分层图最短路)
- 公用计算机管理,如何管理公用计算机和私人计算机的文件访问
- mysql (mariadb)数据库使用 mysqldump 备份全部数据库,并自动按当前时间名保存文件
- 2022年计算机二级考试C语言程序设计冲刺题及答案
- python os模块安装方法_Python模块——os模块详解
- Caused by: java.lang.SecurityException: Neither user 10068 nor current process has android.permissio
- 量子计算机的算力是多少,我国量子计算机实现算力全球领先
- C++优先级队列priority_queue详解及其模拟实现
- ★房贷计算器 APP
- python爬虫实例手机_10个python爬虫入门实例
- 学习方法之——费曼技巧学习
- 力扣(LeetCode)怎么刷题,以排序算法为例
热门文章
- php 5.4 aws,使用 Amazon EC2 管理 AWS SDK for PHP 实例 - 适用于 PHP 的 AWS 开发工具包
- designer一直未响应 qt_未雨绸缪及时清淤 曾是内涝重灾区 这次涵洞未积水
- Entity FrameWork 操作使用详情
- Eclipse 使用 CodeMix 插件 开发 Vue.js
- POJ 4979 海贼王之伟大航路 【状压dp】【北大ACM/ICPC竞赛训练】
- hibernate状态转换关系图【原】
- EJB是什么?EJB的概念分析与理解(copy)
- 《一线架构师实践指南》—— 读后总结
- 一款纯css3实现的超炫动画背画特效
- ASP.NET中数据有效性校验的方法