MySQL的join on和 where 的执行顺序和区别,以及各种连接说明
目录
1、各种连接的解读说明:
1.1、各种连接的含义和说明
连接 | 语法 | 作用 |
---|---|---|
左外连接 | left join | 返回左表中所有的记录以及右表中连接字段相等的记录 |
右外连接 | right join | 返回右表中所有的记录以及左表中连接字段相等的记录。 |
全外连接 | full join | 返回两个表中的行:left join + right join(重合部分的相等数据只保留一份) |
自连接 | ||
笛卡尔积 | cross join(不带 WHERE 子句) | 结果是笛卡尔积,就是第一个表的行数乘以第二个表的行数。 |
内连接 | inner join | 又叫等值连接,只返回两个表中连接字段相等的行。 |
自然连接 | natrual join | 和内连接很类似,区别在于结果的重复列上: 自然连接重复列只保存一列(列去重),内连接重复列都保存(列不去重) |
1.1.1 所有连接分类
说明:
- 等值连接和不等连接的区别:都是内连接,等值连接有on条件,不等连接没有on条件
1.1.2 left join 和 left outer join 区别
简单来说就是没有区别,只是写法不同。( sql-92 标准中应为 LEFT Outer Join,而 SQLServer 中两种都支持的。 )
参考: 请说明 left join 和 left outer join 的区别 - CSDN 论坛
1.2、神图参考
1.4、一些参考说明
- 基本概念理解参考: 数据库的连接(内连接,外连接,笛卡尔积) - goasleep 的博客 - CSDN 博客
- 关于自然连接的去重可以参考: 笛卡尔积,自然连接,外连接 - 白小羊的博客 - CSDN 博客
- 概念区分参考: 【概念区分】笛卡尔积,自然连接,内连接,外连接 (左,右,全) - lawrence.li - 博客园
很好的一篇文章,解决列很多问题。- 笛卡尔积存在的意义是什么?
- ”cross join 笛卡尔积 “和” full join 全连接 “和 "inner join 内连接" 的区别在哪里?
- 既然” 连接条件 “可以写在 where 字句里面,为什么还要用 on 关键字?
- 自然连接和内连接有什么关系吗?
2、on 和 where 条件的区别
2.1 on 和 where 条件的区别 (只对外连接有区别)
前提说明:数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。
- on 条件是在生成临时表时使用的条件,它不管 on 中的条件是否为真,都会返回左边表中的记录。
- where 条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有 left join 的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
即
- 如果条件中同时有on和where 条件:
- SQL的执行实际是两步
- 第一步:根据on条件得到一个临时表
- 第二步:根据where 条件对上一步的临时表进行过滤,得到最终返回结果。
- SQL的执行实际是两步
- 如果条件中只有on:
- 那么得到的临时表就是最终返回结果
主要内容来自: sql (join on 和 where 的执行顺序) - higirle - 博客园 ,具体demo也可以看原文。
2.2 具体连接的区别
2.2.1 对于内连接没区别
因为内连接生成的临时表中只会保留符合
on条件的数据,所以数据在 on 和 where 条件中过滤没区别。
2.2.2 对于外连接(左连接,右连接,全连接)有区别
而外连接生成的临时表中会保留不符合
on条件的数据,对于这些数据,在 on 和 where 条件中过滤就区别了。
2.3 多张(>=3)表连接更显 on 和 where 条件的区别
sql 语句中 join on 和 where 用法的区别和联系 - 一个破名想半年的个人空间 - OSCHINA
注:文中的一个观点和说明很神奇。
总结下:如果是多张表连接,那么在生成临时表的过程中过滤数据和对生成后的临时表过滤数据就有明显区别了。
这种情况下: inner join on 比直接 where 的查询效率要高
3、结束
MySQL的join on和 where 的执行顺序和区别,以及各种连接说明的更多相关文章
- 【分析】浅谈C#中Control的Invoke与BeginInvoke在主副线程中的执行顺序和区别(SamWang)
[分析]浅谈C#中Control的Invoke与BeginInvoke在主副线程中的执行顺序和区别(SamWang) 今天无意中看到有关Invoke和BeginInvoke的一些资料,不太清楚它们之间 ...
- 拦截器(Interceptor)和过滤器(Filter)的执行顺序和区别
一.引言 本来想记录一下关于用户登陆和登陆之后的权限管理.菜单管理的问题,想到解决这个问题用到Interceptor,但想到了Interceptor,就想到了Filter,于是就想说一下它们的执行顺序 ...
- MySQL逻辑架构、SQL加载执行顺序、七种JOIN模式图解
逻辑架构 存储引擎 查看当前安装的mysql提供的存储引擎 查看当前mysql默认的存储引擎 MyISAM和InnoDB SQL加载执行顺序 sql书写顺序 mysql解析器执行的顺序 考点:m ...
- 转载《mysql 一》:mysql的select查询语句内在逻辑执行顺序
原文:http://www.jellythink.com/archives/924 我的抱怨 我一个搞应用开发的,非要会数据库,这不是专门的数据库开发人员干的事么?话说,小公司也没有数 据库开发人员这 ...
- MySQL中 ORDER BY 与 LIMIT 的执行顺序
如下: ORDER BY 与 LIMIT 的执行顺序:ORDER BY > LIMIT ORDER BY 与 LIMIT 的编写顺序:ORDER BY > LIMIT 正确写法: sele ...
- Mysql补充部分:SQL逻辑查询语句执行顺序
一 SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOI ...
- 带Left Join的SQL语句的执行顺序
基础的SQL执行顺序 SQL语句执行的时候是有一定顺序的.理解这个顺序对SQL的使用和学习有很大的帮助. 1.from 先选择一个表,或者说源头,构成一个结果集. 2.where 然后用where对结 ...
- MySQL中 order by 与 limit 的执行顺序以及使用实例
在 MySQL 执行查询的时候,我们可能既要对结果集进行排序又要限制行数,那么此时 order by 与 limit 的执行顺序是怎么样的呢? order by与limit的执行顺序是:先执行orde ...
- MySQL left join操作中 on与where放置条件的区别
优先级 两者放置相同条件,之所以可能会导致结果集不同,就是因为优先级.on的优先级是高于where的. 1 1 首先明确两个概念: LEFT JOIN 关键字会从左表 (table_name1) 那里 ...
随机推荐
- Base64原理解析与使用
一.Base64编码由来 为什么会有Base64编码呢?因为有些网络传送渠道并不支持所有的字节,例如传统的邮件只支持可见字符的传送,像ASCII码的控制字符就 不能通过邮件传送.这样用途就受到了很大的 ...
- zabbix基本介绍
来源是 觅安教育 大家有兴趣可以去哔哩哔哩搜搜. Open-falcon是由小米公司开源 比如windows,linux,unix,openBSD,AIX,solaris,Mac等操作系统,都可以安装 ...
- 数据结构实验之排序五:归并求逆序数(SDUT 3402)
归并排序详解(戳我). 以下是搬了别人的. #include<stdio.h> #include<stdlib.h> long long sum = 0; int a[1000 ...
- 如何把ANSYS模型输出为CDB文件并导入FLUENT 【转载】
转载自: http://linziok99.blog.163.com/blog/static/100157302009320134826/ 在main menu中选择Archive Model ,再点 ...
- 数据结构Java版之二叉查找树(七)
二叉查找树(BST : BInary Search Tree) 二叉查找树的性质: 1.每一个元素有一个键值 2.左子树的键值都小于根节点的键值 3.右子树的键值都大于根节点的键值 4.左右子树都是二 ...
- git工作总结
一.简单介绍 简介:Git是一个开源的分布式版本控制系统,可以有效.高速地处理项目版本管理. 发展史:CSV -> SVN -> Git 优点:Git速度快.开源.完全分布式管理系统 相关 ...
- 生成uuid 和 检验
//注意replaceAll前面的是正则表达式 String uuid = UUID.randomUUID().toString().replaceAll("-","&q ...
- mysql innodb与myisam存储文件的区别
myisam: .frm: 存储表定义 .myd(MYData):存储数据 .MYI(MYindex):存储引擎 innodb: .frm:存储表定义 .idb:存储数据和索引,在同一个文件中
- 常用的web api总结
1.querySelector 获取指定元素中匹配css选择器的元素. // 作用在document document.querySelector("#nav"); // 获取文档 ...
- SQL Server 将查询结果集以XML形式展现 for xml path
for xml path,其实它就是将查询结果集以XML形式展现 双击打开