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

当时存疑但没有深究,多次网上看帖写的连接查询用了 on,还用 where,所以了解了一下,现在做一个输出:

首先,老师教错了...(diss~)on 和 where 之间并没有冲突,随都用作设立条件,但有区别:

on 后跟连接条件,这是规范。其次,如果再加筛选条件只针对关联表!没错,是关联表的筛选条件

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

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

执行顺序:先连接再筛选

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

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

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

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

  1. 内连接、外连接的区别及作用

    1.基本介绍 不管是内连接.外连接还是带where子句的多表查询,都组合自多个表,并生成结果表. 1.内连接:只返回两个表中连接字段相等的行.inner join(等值连接) 只返回两个表中联结字段相 ...

  2. mysql 多表既有内连接又有外连接_MySQL 多表查询中的内连接和外连接

    一般情况下一个网站的数据库通常会有多张数据表组成,这些数据表分别存储网站不同区域的内容.数据表之间可以用类似 ID 的字段来关联,在查询的时候可以通过一条语句来查询多张表的内容.例如 论坛的数据库,帖 ...

  3. 不同服务器数据库表连接查询修改,如何连接多个数据库,mysql中的服务器和查询两个表中的对方?...

    我期待从不同服务器连接两个不同的数据库.此外,我想运行一个查询,从两个数据库中获取数据到一个单一的结果.我正在使用mysql在PHP脚本中执行此操作.这里是如何很期待做[没有成功:)]如何连接多个数据 ...

  4. 【MySQL】MySQL中的查询语句的详解----等值连接、左连接、右连接、全连接

    用两个表(t_worker,t_depart),关联字段t_worker.deptno和t_depart.deptno来演示一下MySQL的等值连接.左连接.右连接.全连接.数据库表:t_worker ...

  5. Mysql中嵌套查询和连接查询的区别

    一.嵌套查询 嵌套查询我们以mybatis中的嵌套查询举例: 1.1.创建数据库 CREATE TABLE `teacher` (`id` INT(10) NOT NULL,`name` VARCHA ...

  6. mysql sql查询 sleep_mysql中sleep连接过多,Ufiner查询无数据

    一大早上就接到浩子的QQ袭扰,说现场移动的人一堆的投诉,说dms连不上,查询没有数据,都快把他的电话打爆了. 赶紧让浩子登到数据库服务器,确认数据库没有挂掉,进入数据库使用 show processl ...

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

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

  8. MySql 连接查询中 on 和 where 的区别

    大家可以先看MySQL:left join 避坑指南 看过之后再接着看下面 在多表查询时,ON和where都表示筛选条件,on先执行,where后执行. on 后跟连接条件,然后再加的筛选条件只针对关 ...

  9. mysql 连接 分组_详解MySQL中的分组查询与连接查询语句

    分组查询 group by group by 属性名 [having 条件表达式][ with rollup] "属性名 "指按照该字段值进行分组:"having 条件表 ...

最新文章

  1. laravel 如何自定义全局的方法/类
  2. 腾讯AI战略详解:技术社会与创新图景 | 2017互联网科技创新白皮书重磅首发
  3. python3各个版本是通用的吗-python3各版本
  4. python使用什么注释语句和运算-怎么使用python注释语句
  5. 7.01面试长沙黄花机场
  6. java源文件编译成jar_从源文件和JAR文件构建Java代码模型
  7. php算法不大于n的质数,php求不大于n的质数
  8. Ubuntu的 g++ gcc版本升降级
  9. 小脚丫 LCMXO2 4000HC FPGA入门——点个灯
  10. 北航计算机考研 跨考,北航计算机考研经验谈_跨考网
  11. vsftp配置虚拟账户
  12. Region Proposal by Guided Anchoring阅读笔记
  13. 【竞品分析】摩拜和ofo竞品分析报告
  14. Visual Studio 许可证已过期
  15. 6-6 使用函数判断完全平方数 (10 分)(C语言版)
  16. FFMpeg ver 20160219-git-98a0053 滤镜中英文对照 2016.02.21 by 1CM
  17. 在Ubuntu系统下运行c语言程序
  18. CY7C68013的slave fifo的时序分析(附FPGA代码)
  19. [附源码]java毕业设计书店网站论文
  20. fms5序列号_CentOS下安装FMS5.0 互联网技术圈 互联网技术圈

热门文章

  1. 可以用手机实现的移动端车牌识别功能
  2. asyncio结合线程池
  3. MySQL复制中slave延迟监控
  4. IBM “第8格(Debug)”开发者技术沙龙首站招募中,有胆你就来!
  5. shell学习脚本-tomcat停止脚本
  6. EMMA 覆盖率工具
  7. eclipse各个版本的区别
  8. 基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(三)
  9. 每天学一点flash(11) as3.0 与asp 通信 (1)
  10. BlueIdea 7周年 北京欢天喜地大聚会