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、一些参考说明

2、on 和 where 条件的区别

2.1 on 和 where 条件的区别 (只对外连接有区别)

前提说明:数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。

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

  • 如果条件中同时有on和where 条件:

    • SQL的执行实际是两步

      • 第一步:根据on条件得到一个临时表
      • 第二步:根据where 条件对上一步的临时表进行过滤,得到最终返回结果。
  • 如果条件中只有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 的执行顺序和区别,以及各种连接说明的更多相关文章

  1. 【分析】浅谈C#中Control的Invoke与BeginInvoke在主副线程中的执行顺序和区别(SamWang)

    [分析]浅谈C#中Control的Invoke与BeginInvoke在主副线程中的执行顺序和区别(SamWang) 今天无意中看到有关Invoke和BeginInvoke的一些资料,不太清楚它们之间 ...

  2. 拦截器(Interceptor)和过滤器(Filter)的执行顺序和区别

    一.引言 本来想记录一下关于用户登陆和登陆之后的权限管理.菜单管理的问题,想到解决这个问题用到Interceptor,但想到了Interceptor,就想到了Filter,于是就想说一下它们的执行顺序 ...

  3. MySQL逻辑架构、SQL加载执行顺序、七种JOIN模式图解

    逻辑架构   存储引擎 查看当前安装的mysql提供的存储引擎 查看当前mysql默认的存储引擎 MyISAM和InnoDB SQL加载执行顺序 sql书写顺序 mysql解析器执行的顺序  考点:m ...

  4. 转载《mysql 一》:mysql的select查询语句内在逻辑执行顺序

    原文:http://www.jellythink.com/archives/924 我的抱怨 我一个搞应用开发的,非要会数据库,这不是专门的数据库开发人员干的事么?话说,小公司也没有数 据库开发人员这 ...

  5. MySQL中 ORDER BY 与 LIMIT 的执行顺序

    如下: ORDER BY 与 LIMIT 的执行顺序:ORDER BY > LIMIT ORDER BY 与 LIMIT 的编写顺序:ORDER BY > LIMIT 正确写法: sele ...

  6. Mysql补充部分:SQL逻辑查询语句执行顺序

    一 SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOI ...

  7. 带Left Join的SQL语句的执行顺序

    基础的SQL执行顺序 SQL语句执行的时候是有一定顺序的.理解这个顺序对SQL的使用和学习有很大的帮助. 1.from 先选择一个表,或者说源头,构成一个结果集. 2.where 然后用where对结 ...

  8. MySQL中 order by 与 limit 的执行顺序以及使用实例

    在 MySQL 执行查询的时候,我们可能既要对结果集进行排序又要限制行数,那么此时 order by 与 limit 的执行顺序是怎么样的呢? order by与limit的执行顺序是:先执行orde ...

  9. MySQL left join操作中 on与where放置条件的区别

    优先级 两者放置相同条件,之所以可能会导致结果集不同,就是因为优先级.on的优先级是高于where的. 1 1 首先明确两个概念: LEFT JOIN 关键字会从左表 (table_name1) 那里 ...

随机推荐

  1. 猴猴吃香蕉 背包DP

    猴猴吃香蕉 背包DP \(D\)次询问,第\(i\)次询问,每次有\(n_i\)个带权香蕉,问有多少方案使香蕉之积为\(k_i\),对结果取模\(1000000007\) \(n\le 10^3,k\ ...

  2. shell编程题(四)

    编译当前目录下的所有.c文件 #!/bin/bash ] ;] 输入参数个数 echo "Please follow up file.c!" echo "eg: ./ma ...

  3. shell编程题(一)

    求2个数之和 #!/bin/bash function add { )); then echo "The arg in't correct" else +$)) echo $sum ...

  4. mac编译Cpython

    源代码中有什么? CPython 源代码分发包含各种工具,库和组件.我们将在本文中探讨这些内容. 首先,我们将重点关注编译器.先从 git 上下载 Cpython 源代码. git clone htt ...

  5. win10 eclipse连接虚拟机ubuntu中的hdfs

    1.eclipse安装连接hadoop的插件hadoop-eclipse-plugin-2.6.0(注意自己hadoop的版本) 将该插件放在eclipse安装路径的plugins文件夹中. ps:我 ...

  6. 深度学习面试题21:批量归一化(Batch Normalization,BN)

    目录 BN的由来 BN的作用 BN的操作阶段 BN的操作流程 BN可以防止梯度消失吗 为什么归一化后还要放缩和平移 BN在GoogLeNet中的应用 参考资料 BN的由来 BN是由Google于201 ...

  7. * resolve_conffiles: Existing conffile /etc/config/dhcp is different from the conffile in the new package. The new conffile will be placed at /etc/config/dhcp-opkg.

    * resolve_conffiles: Existing conffile /etc/config/dhcp is different from the conffile in the new pa ...

  8. tansition-group 使用方法

    <transition-group name="breadcrumb"> <el-breadcrumb-item v-for="(item,index) ...

  9. Manning Java Persistence with Hibernate & hibernate_in_action

    Manning | Java Persistence with Hibernatehttps://www.manning.com/books/java-persistence-with-hiberna ...

  10. 网络通信技术中的中继器repeater

    1. repeater的作用 对信号进行再生和还原 2. repeater的优点 延长通讯距离 提高可靠性 增加节点的最大数目 各个网段可以使用不同的通讯速率 3. repeater的缺点 增加了延时 ...