一、典型SELECT语句完整的执行顺序

1)from子句组装来自不同数据源的数据;

2)使用on进行join连接的数据筛选

3)where子句基于指定的条件对记录行进行筛选;

4)group by子句将数据划分为多个分组;

5)cube, rollup

6)使用聚集函数进行计算;

7)使用having子句筛选分组;

8)计算所有的表达式;

9)计算select的字段;

10)使用distinct 进行数据去重

11)使用order by对结果集进行排序。

12)选择TOPN的数据

二、from

如果是采用的 关联   from tableA, tableB ,这2个表会先组织进行笛卡尔积,然后在进行下面的  where、group by 等操作。

三、on

如果使用left join, inner join 或者 outer full join的时候,使用on 进行条件筛选后,在进行join。

看下面的2个sql 和结果。2者的区别仅仅是在on后面的一个语句在on和where位置的不同。  由此可以看出是先通过on 进行条件筛选,然后在join,最后在进行where条件筛选。

假如:是先进行join,在进行on的话,会产生一个笛卡尔积,然后在筛选。这样的left join 和 直连接 没有任何的区别。 所以肯定是先on 条件筛选后,在进行join。

假如:是在进行where 后,在on,在进行join, 下面2个sql的返回结果应该是一样的。由此可以见,where是针对 join 后的集合进行的筛选。

综上: 先  执行on 条件筛选, 在进行join, 最后进行where 筛选。

SELECT DISTINCTa.domain , b.domainFROMmal_nxdomains_raw aLEFT JOIN mal_nxdomains_detail b ON a.domain = b.domain AND b.date = '20160403'

WHERE a.date = '20160403'

SELECT DISTINCTa.domain , b.domainFROMmal_nxdomains_raw aLEFT JOIN mal_nxdomains_detail b ON a.domain = b.domain #and b.date = '20160403'

WHERE a.date = '20160403'

AND b.date = '20160403'

四、on 条件与where 条件

使用位置

on 条件位置在join后面

where 条件在join 与on完成的后面

使用对象

on 的使用对象是被关联表

where的使用对象可以是主表,也可以是关联表

选择与使用

主表条件筛选:只能在where后面使用。

被关联表,如果是想缩小join范围,可以放置到on后面。如果是关联后再查询,可以放置到where 后面。

如果left join 中,where条件有对被关联表的 关联字段的 非空查询,与使用inner join的效果后,在进行where 筛选的效果是一样的。不能起到left join的作用。

五、join 流程

tableA join tableB, 从A表中拿出一条数据,到B表中进行扫描匹配。

所以A的行数决定查询次数,B表的行数决定扫描范围。例如A表100条,B表200表,需要100次从A表中取出一条数据到B表中进行200次的比对。

相对来说从A表取数据消耗的资源比较多。所以尽量tableA选择比较小的表。同时缩小B表的查询范围。

但是实际应用中,因为二者返回的数据结果不同,使用的索引也不同,导致条件放置在on 和 where 效率是不一定谁更好。要根据需求来确定。

mysql中的on的执行顺序_MySQL -- join , on , where 的执行顺序相关推荐

  1. 在MySQL中以下属于ddl语句的_MySQL的DDL语句、DML语句与DCL语句

    背景:近几年,开源数据库逐渐流行起来.由于具有免费使用.配置简单.稳定性好.性能优良等优点,开源数据库在中低端应用上占据了很大的市场份额,而 MySQL 正是开源数据库中的杰出代表.MySQL 数据库 ...

  2. mysql 中存储引擎是什么意思_mysql常用的存储引擎是什么

    mysql常用的存储引擎是什么 发布时间:2020-12-02 09:35:04 来源:亿速云 阅读:62 作者:小新 这篇文章将为大家详细讲解有关mysql常用的存储引擎是什么,小编觉得挺实用的,因 ...

  3. mysql中如何删除多个表格_mysql怎么批量删除多个表?

    mysql批量删除多个表的方法:使用"DROP TABLE"语句,只要将表名依次写在后面,相互之间用逗号隔开即可:语法格式"DROP TABLE [IF EXISTS] ...

  4. MySQL中引入存储引擎意义是_mysql学习九:存储引擎、存储过程和函数的引入

    存储引擎: 存储引擎是mysql特有的,共有7种,常用的有myisam.memory.innodb 查看表的存储引擎: show create table 表名; 修改表的存储引擎: alter ta ...

  5. mysql中数据定义和数据控制语言_MySQL 数据定义语言(DDL)

    SQL 包含以下 4部分:1数据定义语言(DDL):DROP.CREATE.ALTER 等语句.2数据操作语言(DML):INSERT(插入).UPDATE(修改).DELETE(删除)语句.3数据查 ...

  6. mysql中值换行显示为乱码_MySQL数据移植中的乱码问题

    mysql移植含有中文的数据时,很容易出现乱码问题.很多是在从mysql4.x向mysql5.x移植的时候出现.mysql的缺省字符集是latin1,在使用mysql4.x的时候,很多人都是用的lat ...

  7. mysql中gbk编码汉字和英文_MySQL字符集 GBK、GB2312、UTF8区别 解决 MYSQL中文乱码问题...

    MySQL中涉及的几个字符集 character-set-server/default-character-set:服务器字符集,默认情况下所采用的. character-set-database:数 ...

  8. mysql中数据表null什么意思_MySQL 中NULL和空值的区别是什么?

    展开全部 空值是不占用空间的,MySQL中的NULL其实是占用空间的. 不过在MySQL数据库中执行62616964757a686964616fe78988e69d8331333363396466SQ ...

  9. mysql中创建唯一索引的关键字_MySQL中创建唯一索引的关键字是_______ 。

    [判断题]判断零件键槽的尺寸标注是否正确.[图片] [单选题][图片] [单选题]读零件图,回答问题:1. C3表示倒角为( )度?2. C2表示倒角锥台高度为( )?[图片] [单选题]如图为套筒零 ...

  10. mysql中if在oracle怎么用_MySql和Oracle的使用

    本文档是一个记录文档,会不定时更新使用过程中遇到的差异问题 本文档记录MySql和Oracle在使用中要注意的问题,也包括两者使用上的差异问题 字符串拼接函数 CONCAT MySql MySql的 ...

最新文章

  1. INSTALL_FAILED_USER_RESTRICTED
  2. 逻辑回归 logistic regression
  3. python sklearn.decomposition.PCA 主成分分析, 原理详解
  4. HashMap根据value值排序
  5. 珍惜相聚,亦珍惜离别
  6. 个人开发者 android内购,【开发者账号】关于内购,协议税务的一些坑
  7. 【linux杂谈】查看centOS系统的版本号和内核号
  8. 昨天终于收到《.Net Web服务编程》
  9. Java新特性(二)
  10. amos看拟合度在哪里看_哪里可以看亲爱的热爱的电视剧全集
  11. SAP ABAP刷新ALV 渲染刷新 (我也不太懂,反正就这么写了)
  12. python从入门到_Python学习路线从入门到上手,如何快速Python学习?
  13. .NET开发相关技术
  14. pb数据窗口怎么调用视图_大数据架构如何做到流批一体?
  15. scrapy框架简介和基础应用
  16. CIS Benchmarks
  17. 同名计算机无法加入域,客户端不能加入域解决方法(同名11850)
  18. Python社区采访Michael Kennedy
  19. java:对字母进行大写(小写)的转化
  20. 芯盾时代完成3亿元C轮融资,宽带资本领投

热门文章

  1. Atitit snownlp nlp 常见功能 目录 1.1. 主要功能: 1 1.2. 官网信息: 2 1.3. # 自动摘要 vs 关键词提取 2 1.4. Tf idf算法 2 1.5. p
  2. Atitit 知识体系概论 attilax著 三大类型 学术型 应用型 职业技术教育 1 附表1、CIP-2000学科群设置情况总表 1 三大层次 分类 学科 专业 2 20个知识大类 2 需
  3. Atitit 图像处理 opencv使用蒙版mask抠图 切割 attilax总结
  4. Atitit.uke 团队建设的组织与运营之道attilax总结
  5. 丹纳赫:全球实业型赋能投资标杆
  6. Rust : codewars的Product of consecutive Fib numbers
  7. (转)谭志勇、赵微:区块链技术在中国商品交易市场的应用与发展
  8. SQLite:关于日期的字段的优化将给Julia带来大幅效率提升
  9. 【扩频通信】基于matlab扩频+解扩仿真【含Matlab源码 1495期】
  10. 【优化算法】缎面弓箭鸟优化(SBO)【含Matlab源码 1432期】