精华内容
下载资源
问答
  • MySQL sql语句执行顺序

    2021-02-01 17:52:57
    (8)DISTINCT(1)FROM(3)JOIN(2)ON(4)WHERE(5)GROUPBY(6)HAVING(9)ORDERBY(10)LIMIT一、执行FROM语句mysql是从左往右执行,oracle是从右往左执行,SQL语句执行过程,都会产生一个虚拟表,用来保存SQL语...

    (8)     DISTINCT 

    (1)     FROM 

    (3)      JOIN 

    (2)     ON 

    (4)     WHERE 

    (5)     GROUP BY 

    (6)     HAVING 

    (9)     ORDER BY 

    (10)    LIMIT 

    一、执行FROM语句,mysql是从左往右执行,oracle是从右往左执行,SQL语句的执行过程中,都会产生一个虚拟表,用来保存SQL语句的执行结果(这是重点),执行from语句之后会产生一个虚拟表暂时叫VT1(vitual table 1),VT1是根据笛卡尔积生成

    二、执行on进行过滤

    根据on后面的条件过滤掉不符合条件的数据,参数VT2

    三、执行链接的类型

    inner join内连接、left join左链接、right右链接、outer join 外链接、full outer join 全连接

    执行完产生VT3

    四、执行where后面的条件

    这时候使用WHERE条件的时候要注意:不能使用组函数、并且字段的别名不能放到条件中使用

    例如SELECT city as c FROM t WHERE c=‘shanghai‘

    五、执行group by 进行分组

    六、执行having过滤

    HAVING子句主要和GROUP BY子句配合使用,having后面可以跟组函数的条件

    七、执行select

    八、执行distinct,去掉重复的数据

    九、执行order by 语句排序

    十、执行分页语句

    转自: http://blog.csdn.net/u010833154/article/details/50696583

    MySQL sql语句执行顺序

    标签:.net   group by   art   sql   条件过滤   join   order   字段   生成

    本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

    本文系统来源:http://www.cnblogs.com/shenwenkai/p/7135824.html

    展开全文
  • MySQL 语句执行顺序

    2021-01-20 02:22:04
    (1)SQL语句的语法顺序:SELECT[DISTINCT]FROMJOINONWHEREGROUP BYHAVINGUNIONORDER BYLIMIT(2)SQL的执行顺序FROM:将数据从硬盘加载到数据缓冲区,方便对接下来的数据进行操作。WHERE:从基表或视图选择满足条件的...

    (1)SQL语句的语法顺序:

    SELECT[DISTINCT]

    FROM

    JOIN

    ON

    WHERE

    GROUP BY

    HAVING

    UNION

    ORDER BY

    LIMIT

    (2)SQL的执行顺序

    FROM:将数据从硬盘加载到数据缓冲区,方便对接下来的数据进行操作。

    WHERE:从基表或视图中选择满足条件的元组。(不能使用聚合函数)

    JOIN(如right left 右连接-------从右边表中读取某个元组,并且找到该元组在左边表中对应的元组或元组集)

    ON:join on实现多表连接查询,推荐该种方式进行多表查询,不使用子查询。

    GROUP BY:分组,一般和聚合函数一起使用。

    HAVING:在元组的基础上进行筛选,选出符合条件的元组。(一般与GROUP BY进行连用)

    SELECT:查询到得所有元组需要罗列的哪些列。

    DISTINCT:去重的功能。

    UNION:将多个查询结果合并(默认去掉重复的记录)。

    ORDER BY:进行相应的排序。

    LIMIT 1:显示输出一条数据记录(元组)

    https://blog.csdn.net/akaks0/article/details/81433801

    展开全文
  • 偶尔有些时候会关系到sql的执行顺序SQL Select语句完整的执行顺序:1、from子句组装来自不同数据源的数据; (先join在on)2、where子句基于指定的条件对记录行进行筛选;3、group by子句将数据划分为多个分组;4、...

    偶尔有些时候会关系到sql的执行顺序

    SQL Select语句完整的执行顺序:

    1、from子句组装来自不同数据源的数据; (先join在on)

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

    3、group by子句将数据划分为多个分组;

    4、使用聚集函数进行计算;

    5、使用having子句筛选分组;

    6、计算所有的表达式;

    7、select 的字段;

    8、使用order by对结果集进行排序。

    SQL语言不同于其他编程语言的最明显特征是处理代码的顺序。在大多数据库语言中,代码按编码顺序被处理。但在SQL语句中,第一个被处理的子句式FROM,而不是第一出现的SELECT。SQL查询处理的步骤序号:

    (1) FROM

    (2) JOIN

    (3) ON

    (4) WHERE

    (5) GROUP BY

    (6) WITH {CUBE | ROLLUP}

    (7) HAVING

    (8) SELECT

    (9) DISTINCT

    (9) ORDER BY

    以上每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入。这些虚拟表对调用者(客户端应用程序或者外部查询)不可用。只有最后一步生成的表才会会给调用者。如果没有在查询中指定某一个子句,将跳过相应的步骤。

    展开全文
  • MySQL语句执行顺序

    2021-01-19 05:19:04
    下面我们来具体分析一下查询处理的每一个阶段MySQL语句一共分为11步,如下图所标注的那样,最先执行的总是FROM操作,最后执行的是LIMIT操作。其中每一个操作都会产生一张虚拟的表,这个虚拟的表作为一个处理的输入...

    0c3b754b582d10cba31fdb1da32fda8b.png

    下面我们来具体分析一下查询处理的每一个阶段MySQL的语句一共分为11步,如下图所标注的那样,最先执行的总是FROM操作,最后执行的是LIMIT操作。其中每一个操作都会产生一张虚拟的表,这个虚拟的表作为一个处理的输入,只是这些虚拟的表对用户来说是透明的,但是只有最后一个虚拟的表才会被作为结果返回。如果没有在语句中指定某一个子句,那么将会跳过相应的步骤

    FORM: 对FROM的左边的表和右边的表计算笛卡尔积。产生虚表VT1

    ON: 对虚表VT1进行ON筛选,只有那些符合的行才会被记录在虚表VT2中。

    JOIN: 如果指定了OUTER JOIN(比如left join、 right join),那么保留表中未匹配的行就会作为外部行添加到虚拟表VT2中,产生虚拟表VT3, rug from子句中包含两个以上的表的话,那么就会对上一个join连接产生的结果VT3和下一个表重复执行步骤1~3这三个步骤,一直到处理完所有的表为止。

    WHERE: 对虚拟表VT3进行WHERE条件过滤。只有符合的记录才会被插入到虚拟表VT4中。

    GROUP BY: 根据group by子句中的列,对VT4中的记录进行分组操作,产生VT5.

    CUBE | ROLLUP: 对表VT5进行cube或者rollup操作,产生表VT6.

    HAVING: 对虚拟表VT6应用having过滤,只有符合的记录才会被 插入到虚拟表VT7中。

    SELECT: 执行select操作,选择指定的列,插入到虚拟表VT8中。

    DISTINCT: 对VT8中的记录进行去重。产生虚拟表VT9.

    ORDER BY: 将虚拟表VT9中的记录按照进行排序操作,产生虚拟表VT10.

    LIMIT:取出指定行的记录,产生虚拟表VT11, 并将结果返回。

    子查询的执行

    子查询又称内部查询,而包含子查询的语句称之外部查询(又称主查询)。

    所有的子查询可以分为两类,即相关子查询和非相关子查询。

    非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询。

    相关子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。

    使用过oracle或者其他关系数据库的DBA或者开发人员都有这样的经验,在子查询上都认为数据库已经做过优化,能够很好的选择驱动表执行,然后在把该经验移植到mysql数据库上,但是不幸的是,mysql在子查询的处理上有可能会让你大失所望,在我们的生产系统上就碰到过一些案例,例如:SELECT i_id,

    sum(i_sell) AS i_sell

    FROM table_data

    WHERE i_id IN

    (SELECT i_id

    FROM table_data

    WHERE Gmt_create >= '2011-10-07 00:00:00')

    GROUP BY i_id;

    (备注:sql的业务逻辑可以打个比方:先查询出10-07号新卖出的100本书,然后在查询这新卖出的100本书在全年的销量情况)。

    这条sql之所以出现的性能问题在于mysql优化器在处理子查询的弱点,mysql优化器在处理子查询的时候,会将将子查询改写。通常情况下,我们希望由内到外,先完成子查询的结果,然后在用子查询来驱动外查询的表,完成查询;但是mysql处理为将会先扫描外面表中的所有数据,每条数据将会传到子查询中与子查询关联,如果外表很大的话,那么性能上将会出现问题;

    针对上面的查询,由于table_data这张表的数据有70W的数据,同时子查询中的数据较多,有大量是重复的,这样就需要关联近70W次,大量的关联导致这条sql执行了几个小时也没有执行完成,所以我们需要改写sql:SELECT t2.i_id,

    SUM(t2.i_sell) AS sold

    FROM

    (SELECT DISTINCT i_id

    FROM table_data

    WHERE gmt_create >= '2011-10-07 00:00:00') t1,

    table_data t2

    WHERE t1.i_id = t2.i_id

    GROUP BY t2.i_id;

    我们将子查询改为了关联,同时在子查询中加上distinct,减少t1关联t2的次数;

    改造后,sql的执行时间降到100ms以内。

    mysql的子查询的优化一直不是很友好,一直有受业界批评比较多,也是我在sql优化中遇到过最多的问题之一,mysql在处理子查询的时候,会将子查询改写,通常情况下,我们希望由内到外,也就是先完成子查询的结果,然后在用子查询来驱动外查询的表,完成查询,但是恰恰相反,子查询不会先被执行;今天希望通过介绍一些实际的案例来加深对mysql子查询的理解。

    展开全文
  • MySql 语句执行顺序

    2021-01-19 19:51:37
    一、手写SQL顺序select from join on where group by having order by limit 二、MySql执行顺序from on join where group by having select distinctorder by limit 三、MySql执行顺序理解第一步:加载from子句的前...
  • 背景之前一直以为MySQL的多表关联查询...下面是从网上搜到一些比较热门的SQL执行顺序的文章,大家应该很熟悉吧,尤其是下面那张鱼骨图。摘自:步步深入:MySQL架构总览->查询执行流程->SQL解析顺序问题描述最...
  • 一、sql语句执行顺序 1.sql语句执行顺序 (7)select (8)distinct 字段名1,字段名2... (5)[fun 字段名] (1)from 表名 (2)inner|left|right|full|cross join on 连接条件 (3)where 筛选条件 (4)group by 分组条件...
  • 之所以引出sql书写顺序和执行顺序,源于具体要解决的问题是:一个账号对应多个角色,每个角色都有等级,需要查询每一个账号下等级最大的那个角色id,且最大等级大于20?错误方案:select char_id ,levelfrom tbl_char...
  • 1.SELECT语句处理顺序 2.where 后条件执行先后顺序 1.SELECT语句处理顺序 (1)from (2)on (3)join (4)where (5)group by (开始使用select的别名,后面的语句中都可以使用) (6)avg,sum.... (7)having (8...
  • SELECT语句执行的逻辑查询处理步骤:(8)SELECT (9)DISTINCT(11) (1)FROM (3) JOIN (2) ON (4)WHERE (5)GROUP BY (6)WITH {CUBE | ROLLUP}(7)HAVING (10)ORDER BY 1.FROM2.ON3.JOIN4.WHERE5.GROUP BY6.WITH CUBE ...
  • 那么先放上Sql语句执行顺序: from 、 join 、 on 、where、 group by(开始使用select的别名,后面的语句中都可以使用) 、 avg,sum… 、 having 、 select 、 distinct 、 order by 、 limit 那么再放上MySql语句...
  • MySQL,SQL语句执行顺序

    千次阅读 2021-01-19 16:30:59
    1.SQL执行顺序:select 考生姓名, max(总成绩) asmax总成绩fromtb_Gradewhere 考生姓名 is not nullgroup by考生姓名having max(总成绩) > 600order by max总成绩(1). 首先执行 FROM 子句, 从 tb_Grade 表组装...
  • MySQL的SELECT语法的执行顺序和Oracle的基本相同,只是增加了MySQL独有的LIMIT语法。目录一、SELECT语句的处理过程1. FROM阶段2. WHERE阶段3. GROUP BY阶段4. HAVING阶段5. SELECT阶段6. ORDER BY阶段7. LIMIT阶段一...
  • 下面是SELECT语句的逻辑执行顺序: 1.FROM 2.ON 3.JOIN 4.WHERE 5.GROUP BY 6.WITH CUBE or WITH ROLLUP 7.HAVING 8.SELECT 9.DISTINCT 10.ORDER BY 11.TOP MICROSOFT指出,SELECT语句的实际物理执行顺序可能会由于...
  • select语句完美语法:SELECTDISTINCT FROM JOIN ON WHERE GROUP BY HAVING ORDER BY LIMIT 执行顺序:from →join →on →where →group by→having→select→order by→limit(1)各个关键词的作用:from:需要从哪个...
  • SQL语句书写顺序和执行顺序(7) SELECT(8) DISTINCT (1) FROM (3) JOIN (2) ON (4) WHERE (5) GROUP BY (6) HAVING (9) ORDER BY (10) LIMIT 书写顺序从上向下依次书写,即:SELECT→FROM→JOIN→ON→WHERE→GROUP BY...
  • 本篇文章小编给大家分享一下MySQL语句执行顺序和编写顺序代码实例解析,代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。select语句完整语法:SELECTDISTINCT FROM ...
  • 前言:mysql在我们的开发基本每天都要面对的,作为开发的数据...mysql服务端是如何处理请求的,又是如何执行sql语句的?本篇博客将来探讨这个问题:本篇博客的目录一:mysql执行过程二:mysql执行过程的状态三:mys...
  • mysql语句的书写顺序和执行顺序有很大差异。书写顺序,mysql的一般书写顺写为:selectfrom joinonwheregroup byhavingorder bylimit然而其执行顺序却是:from # 笛卡尔积on #对笛卡尔积的虚表进行筛选 join #指定...
  • 查询执行顺序 FROM 和 JOINs FROM 或 JOIN会第一个执行,确定一个整体的数据范围. 如果要JOIN不同表,可能会生成一个临时Table来用于 下面的过程。总之第一步可以简单理解为确定一个数据源表(含临时表) WHERE...
  • 前言:MySQL在我们的开发基本每天都要面对的,作为开发的数据...MySQL服务端是如何处理请求的,又是如何执行sql语句的?本篇博客将来探讨这个问题:本篇博客的目录一:MySQL执行过程二:MySQL执行过程的状态三:MyS...
  • mysql sql的执行顺序

    2021-01-26 05:36:33
    from 子句--执行顺序为从后往前、从右到左表名(最后面的那个表名为驱动表,执行顺序为从后往前, 所以数据量较少的表尽量放后)oracle 的解析器按照从右到左的顺序处理,FROM 子句的表名,FROM 子句写在最后的表...
  • MYSQL数据库sql的执行顺序: FROM ON JOIN WHERE GROUP BY --执行后(有聚合函数),其结果一定是唯一的,也不需要针对这个字段使用distinct HAVING SELECT DISTINCT -- 要写在所有要查询字段的前面,后面有几个...
  • 一、SQL 语句关键字的执行顺序查询:姓名不同人员的最高工资,并且要求大于5000元,同时按最大工资进行排序并取出前5条.select name, max(salary)frompersonwhere name is not nullgroup bynamehaving max(salary) >...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 166,062
精华内容 66,424
关键字:

mysql中语句的执行顺序

mysql 订阅