大家可以先看MySQL:left join 避坑指南

看过之后再接着看下面

在多表查询时,ON和where都表示筛选条件,on先执行,where后执行。

  1. on 后跟连接条件,然后再加的筛选条件只针对关联表(从表)

    执行顺序:从表按照条件筛选,然后再进行连接;即先筛选再连接

  2. where 则针对连接后产生的临时表进行筛选

    执行顺序:先连接再筛选

区别:
外连接时,on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。而where条件是在临时表生成好后,再对临时表进行过滤的条件。

所以,on 后跟关联表(从表)的过滤条件,where 后跟主表或临时表的筛选条件(左连接为例,主表的数据都会查询到,所以临时表中必定包含主表所有的字段,需要给主表加什么筛选条件,直接给临时表加效果相同)

注意:所有的连接条件都必须放在 on 后面,否则无论是 left 还是 right 连接都将不起作用(where 作用的是连接后的临时表,与连接已经无关)

因为 on 会首先过滤掉不符合条件的行,然后再进行其他运算,按理说 on 更快,允许的条件下,用 on 进行最大限度的筛选,后面 where 就避免重复筛选重复的数据,从而提升效率。还有一个重要特征:on 后的筛选条件筛选掉不符要求的字段后,对于主表中 null 结果的记录是没办法筛选掉的;而 where 则可以(关键就是 on 的筛选条件先筛选再连接,筛选时还不知道主表中的一些数据,自然没办法筛选)

参考: MySql 连接查询中 on 和 where 的区别 - "无问西东" - 博客园

MySql 连接查询中 on 和 where 的区别相关推荐

  1. mysql连接查询on_MySql 连接查询中 on 和 where 的区别

    MySql 连接查询时,on 后面跟的是连接条件,再跟 and 关键就可以继续加过滤条件,这样看来是不是可以免用 where 增加过滤条件了呢?开始我也是这样以为的(老师是这么教的,且使用 on 的情 ...

  2. 【mysql】左外连接查询中 on 和 where 的区别

    论点 在使用 mysql 的左外连接(left join)查询时,驱动表(left join 左边的表),亦即数据需要全部被查出表的查询条件建议用 where 设定,被驱动表(left join 右边 ...

  3. MySQL外键关联(一对多)MySQL连接查询

    MySQL外键关联(一对多) 外键说明 什么是外键? 1)表A中有字段(如身份证号)做了主键,表B中也有这个字段(身份证号),这里的身份证号一定来自表A同样字段里的内容,但再B表中身份证号对应id可以 ...

  4. 二、MySQL连接查询学习笔记(多表连接查询:内连接,外连接,交叉连接详解)

    MySQL连接查询(多表连接查询:内连接,外连接,交叉连接详解) 6:多表连接查询 笛卡尔乘积:如果连接条件省略或无效则会出现 解决办法:添加上连接条件 连接查询的分类: 1.按年代分类:1)sql ...

  5. mysql连接查询分为几种方式_SQL多表查询的几种连接方式

    一.基础 1.1 SQL查询的基本原理 第一.单表查询:根据WHERE条件过滤表中的记录,形成中间表(这个中间表对用户是不可见的):然后根据SELECT的选择列选择相应的列进行返回最终结果. 第二.两 ...

  6. Mysql连接查询主要分为三种:内连接、外连接、交叉连接

    Mysql 连接查询主要分为三种:内连接.外连接.交叉连接 内连接 使用比较运算符(包括=.>.<.<>.>=.<=.!>和!<)进行表间的比较操作,查 ...

  7. Mysql连接查询详解

    前言 记得刚工作几年的时候,就写了一篇关于Mysql连接查询的博客文章,里面简单的认为先对关联表的记录进行笛卡尔积,然后再根据where条件过滤,现在看来有点贻笑大方了.正好最近看了<mysql ...

  8. MySQL连接查询(内连接,外连接,全连接)

    对比分析MySQL连接查询(内连接,外连接,全连接) 内连接 等值连接 非等值连接 ==自连接== 外连接 左外连接 右外连接 全外连接 交叉连接 首先建三个数据表 sql文件下载 https://w ...

  9. MySQL连接查询 内连接和外连接的区别

    MySQL 连接查询 @ sunRainAmazing 1.使用连接查询的场景 将多张表进行记录的连接查询(按照某个字段指定的条件进行数据的拼接):进行数据的拼接(两张表的内容显示在一个结果表中 使用 ...

最新文章

  1. ProLiant 服务器安装 Ret Hat Enterprise Linux AS 3 说明 (一)
  2. run cuda samples ubuntu_NVIDIA cuDNN v8 deb方法安装教程(Linux/Ubuntu)
  3. 大话数据结构书籍及配套源码
  4. Lua string库整理
  5. Vue的computed(计算属性)使用实例之TodoList
  6. 李天平: 技术以外的功夫
  7. 关联与依赖区别理解(原)
  8. 广播电台常用51首背景音乐~甘醇永久
  9. 语音处理:霍夫曼编码算法原理分析
  10. ts封装,H264和aac 封装成为ts,并生成m3u8
  11. python获取摄像头型号,python3.6 opencv获取摄像头代码
  12. 正常计算机的c盘空间多大,往往C盘剩余空间多少为宜
  13. 日本80年代芯片战后二次决战
  14. mysql 当前时间小时制_日期函数——MYSQL
  15. restTemplate文件上传与下载
  16. 决策树留一法python代码_机器学习模型2 决策树-基于Python sklearn的实现
  17. 普中科技开发板AD转换和步进电机
  18. Office 365入门之感受云计算
  19. QT中png图片无法显示的问题
  20. 云平台结合英特尔®傲腾™技术发挥更强效能!

热门文章

  1. 饥荒联机版在线服务器登陆,《饥荒:联机版》不搜索房间直连服务器教程
  2. C# ThreadPool.QueueUserWorkItem()之线程池异步
  3. 创建一个空dataframe
  4. 拆解报告:爱否开物1A2C 65W PD氮化镓充电器智融SW3516多口快充协议芯片
  5. Oozie的简单使用
  6. ACCESS报OleDbException (0x80004005): 未指定的错误
  7. python 冒泡排序算法
  8. 为什么me域名不能备案_.me域名是否能注册,能不能备案?
  9. 机器学习-根据身高体重画图
  10. Qt实现HTTP客户端操作