精华内容
下载资源
问答
  • 数据库SQL执行顺序

    千次阅读 2018-08-03 22:37:11
    数据库SQL执行顺序如下: (8)SELECT (9)DISTINCT (11)<Top Num> <select list> (1)FROM [left_table] (3)<join_type> JOIN <right_table> (2...

    数据库中SQL的执行顺序如下:

    (8)SELECT (9)DISTINCT  (11)<Top Num> <select list>
    (1)FROM [left_table]
    (3)<join_type> JOIN <right_table>
    (2)ON <join_condition>
    (4)WHERE <where_condition>
    (5)GROUP BY <group_by_list>
    (6)WITH <CUBE | RollUP>
    (7)HAVING <having_condition>
    (10)ORDER BY <order_by_list>

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

    逻辑查询处理阶段简介

    1. FROM对FROM子句中的前两个表执行笛卡尔积(Cartesian product)(交叉联接),生成虚拟表VT1。
    2. ON对VT1应用ON筛选器。只有那些使<join_condition>为真的行才被插入VT2。
    3. OUTER(JOIN)如果指定了OUTER JOIN(相对于CROSS JOIN 或(INNER JOIN),保留表(preserved table:左外部联接把左表标记为保留表,右外部联接把右表标记为保留表,完全外部联接把两个表都标记为保留表)中未找到匹配的行将作为外部行添加到 VT2,生成VT3.如果FROM子句包含两个以上的表,则对上一个联接生成的结果表和下一个表重复执行步骤1到步骤3,直到处理完所有的表为止。
    4. WHERE对VT3应用WHERE筛选器。只有使<where_condition>为true的行才被插入VT4。
    5. GROUP BY按GROUP BY子句中的列列表对VT4中的行分组,生成VT5。
    6. CUBE|ROLLUP把超组(Suppergroups)插入VT5,生成VT6。
    7. HAVING对VT6应用HAVING筛选器。只有使<having_condition>为true的组才会被插入VT7。
    8. SELECT处理SELECT列表,产生VT8。
    9. DISTINCT将重复的行从VT8中移除,产生VT9。
    10. ORDER BY将VT9中的行按ORDER BY 子句中的列列表排序,生成游标(VC10)。
    11. TOP从VC10的开始处选择指定数量或比例的行,生成表VT11,并返回调用者。

    <<<文章内容主要摘自https://www.cnblogs.com/XiaoZone/p/7851898.html >>>

    展开全文
  • SQL语句执行 首先摘抄一段经典的SQL语句. (1) SELECT (2)DISTINCT<select_list> (3) FROM <left_table> (4) <join type> JOIN <right_table> (5) ON <join_condition> (6) WHERE &...

    SQL语句执行顺序

    为什么要了解SQL?

    1. Ans1: 动态网页靠的是什么, 是数据库中的数据啊. 只有精通数据库才有可能称为开发大佬.
    2. Ans2: SQL就是操作数据库的标准语句, 所以玩转SQL是重要的前提. 别说啦, 赶紧把下面的内容拿走.

    SQL执行说明

    1. 首先摘抄一段特别经典的SQL语句.

      (1) SELECT (2)DISTINCT<select_list>
      (3) FROM <left_table>
      (4) <join type> JOIN <right_table>
      (5)         ON <join_condition>
      (6) WHERE <where_condition>
      (7) GROUP BY <group_by_list>
      (8) WITH {CUBE|ROLLUP}
      (9) HAVING <having_condition>
      (10) ORDER BY <order_by_condition>
      (11) LIMIT <limit_number>
      
    2. 执行顺序分析,排序靠前的最先执行 :

      1. FROM : 首先左边的表<left_table>和右边的表<right_table>先进行笛卡尔运算 .举个栗子:<left_table>中有m条记录,<right_table>中有n条记录,那么会产生一个m*n个的虚拟表VT1(virtual table);
      2. ON : 符合连接条件<join_condition>的记录会被保留下来,我们暂且称之为VT2;
      3. JOIN : 如果指定了连接类型(左连接,右连接),那么保留表中未匹配的记录作为外部行添加到虚拟表VT2,形成VT3;
      4. WHERE : 对虚拟表VT3进行条件过滤,记录满足条件<where_condition>才会执行下一步,此时的虚拟表称它为VT4;
      5. GROUP BY : 对VT4按照GROUP BY的列进行分组,形成VT5;
      6. WITH : 对VT5进行CUBE或ROLLUP操作,产生表VT6;
      7. HAVING : 对虚拟表VT6应用HAVING过滤器,只有符合<having_condition>的记录才会被插入到VT7;
      8. SELECT : 执行SELECT操作,选择指定的列,形成VT8;
      9. DISTINCT: 去除重复,产生虚拟表VT9;
      10. ORDER BY: 将虚拟表VT9中的记录按照排序字段<order_by_list>进行排序操作,产生虚拟表VT10;
      11. LIMIT: 取出指定行的记录,产生虚拟表VT11,并返回给查询用户.
    3. 补充 :

      1. 如果查询表的数量超过两个,那么可以把得到的VT3表当成已知表和下一个表重复步骤1-3,最后形成一个新的NVT3,接着进行操作;
      2. WITH : 中{CUBE|ROLLUP} : 通常和group by 语句一起使用,是根据维度在分组的结果集中进行聚合操作。——对group by的分组进行汇总。其和Order By互斥.
    展开全文
  • MySQL数据库是我们常用的关系型数据库之一,对于MySQL,我们写的SQL语句大多包含以下部分: select 字段 ...SQL语句的执行顺序,是我们必须要掌握的,这关乎到我们写的SQL语句时候的思路以及写的SQL

    MySQL数据库是我们常用的关系型数据库之一,对于MySQL,我们写的SQL语句大多包含以下部分:

    select    字段
    from    表
    join    连接类型
    on    连接字段
    where    条件
    group by    分组
    having    含聚合函数操作
    union    全连接
    order by    排序
    limit    分页

    那么,上面的SQL字段,是按照什么顺序执行的呢?SQL语句的执行顺序,是我们必须要掌握的,这关乎到我们写的SQL语句时候的思路以及写的SQL语句是否正确。SQL语句执行顺序如下:

    from
    on
    join
    where
    group by
    having
    select
    union
    order by

    我们可以这么去记:

    首先,基于哪个表执行SQL语句(from),这个表是怎么来的(on,join);

    然后,以什么条件在确定的表里进行选择(where);

    其次,通过where得到了数据,我们有没有什么其它操作(group by,having);

    通过上面的操作,我们得到了一个临时表,然后我们从临时表中去选择(select),对选择后的结果去执行一些操作,如order by。

    展开全文
  • 数据库SQL系列】sql语句执行顺序,你理解了吗

    万次阅读 多人点赞 2020-01-13 15:29:00
    1.序言 记得前几年,还是初级的时候,面试官问到,请你讲一下sql语句的执行顺序。当时我以为就是按照sql的关键字排列顺序来执行的。...了解一个sql语句的执行顺序,可以让我们清楚到sql执行时的操作顺序,进...

    热门系列


     1.序言

    记得前几年,还是初级的时候,面试官问到,请你讲一下sql语句的执行顺序。当时我以为就是按照sql的关键字排列顺序来执行的。当时说完,面试官心里估计已经直接pass我了吧。今天复习的时候,突然想起这个基础知识点,所以有时间就来发表一下了。


    2.sql语句的执行顺序

    2.1 为什么要了解sql语句执行顺序

    了解一个sql语句的执行顺序,可以让我们清楚到sql执行时的操作顺序,进而有利于我们更好的优化自己的sql语句,提升程序性能。

    举个栗子:

    --sql 1
    select a.* from table_a a left join table_b b on a.id = b.a_id where b.name = 'john';
    
    --sql 2
    select * from table_a where id = (select a_id from table_b where name = 'john');

    倘若说table_a和table_b都是几十几百万数据的表。而name=‘john’这个过滤字段可以查到table_b的唯一数据。那么此时,一定是sql2的执行效率要高于sql1的。为什么?通过sql执行顺序可以知道,table_a和table_b会优先执行联表操作,两个都是大表。其查询出来的结果集虚拟表也会很大。而sql2中,table_a只用通过table_b查询出来的唯一数据更快的获取到指定结果。

    所以,如果你不知道sql执行顺序,同样的业务需求,也许,你就使用了性能不够好的sql1了。

    2.2 sql语句执行顺序说明

    (8) SELECT (9)DISTINCT<select_list>
    (1) FROM <left_table>
    (3) <join_type> JOIN <right_table>
    (2)         ON <join_condition>
    (4) WHERE <where_condition>
    (5) GROUP BY <group_by_list>
    (6) WITH {CUBE|ROLLUP}
    (7) HAVING <having_condition>
    (10) ORDER BY <order_by_list>
    (11) LIMIT <limit_number>

    (1) FROM:对FROM子句中的左表<left_table>和右表<right_table>执行笛卡儿积,产生虚拟表VT1;
    (2) ON: 对虚拟表VT1进行ON筛选,只有那些符合<join_condition>的行才被插入虚拟表VT2;
    (3) JOIN: 如果指定了OUTER JOIN(如LEFT OUTER JOIN、RIGHT OUTER JOIN),那么保留表中未匹配的行作为外部行添加到虚拟表VT2,产生虚拟表VT3。如果FROM子句包含两个以上的表,则对上一个连接生成的结果表VT3和下一个表重复执行步骤1~步骤3,直到处理完所有的表;
    (4) WHERE: 对虚拟表VT3应用WHERE过滤条件,只有符合<where_condition>的记录才会被插入虚拟表VT4;
    (5) GROUP By: 根据GROUP BY子句中的列,对VT4中的记录进行分组操作,产生VT5;如果应用了group by,那么后面的所有步骤都只能得到的vt5的列或者是聚合函数(count、sum、avg等)。原因在于最终的结果集中只为每个组包含一行。这一点请牢记。
    (6) CUBE|ROllUP: 对VT5进行CUBE或ROLLUP操作,产生表VT6;
    (7) HAVING: 对虚拟表VT6应用HAVING过滤器,只有符合<having_condition>的记录才会被插入到VT7;
    (8) SELECT: 第二次执行SELECT操作,选择指定的列,插入到虚拟表VT8中;
    (9) DISTINCT: 去除重复,产生虚拟表VT9;
    (10) ORDER BY: 将虚拟表VT9中的记录按照<order_by_list>进行排序操作,产生虚拟表VT10;
    (11) LIMIT: 取出指定街行的记录,产生虚拟表VT11,并返回给查询用户

     

    本博客皆为学习、分享、探讨为本,欢迎各位朋友评论、点赞、收藏、关注,一起加油!

     

    展开全文
  • 一、SQL编写顺序 语法: select…from…where…group by…having…...二、SQL执行顺序 语法: from…where…group by…having…select…order by… --SQL案例1 SELECT * FROM courseinfo c LEFT JOIN subscribedin
  • MySQL数据库SQL语句执行顺序

    千次阅读 2018-08-16 10:47:00
    MySQL语句执行顺序:FROM &gt; 表链接(inner join、left join、right join) &gt; WHERE &gt;group by 进行分组 &gt; having过滤 &gt; select &gt; order by 语句排序 &gt; 分页语句.....
  • 一、sql执行顺序 (1)from (3) join (2) on (4) where (5)group by(开始使用select中的别名,后面的语句中都可以使用) (6) avg,sum… (7)having (8) select (9) distinct (10) order by (11) limit 从这个顺序中我们...
  • Mysql数据库查询Sql执行顺序

    千次阅读 2019-12-02 11:16:32
    Mysql数据库查询Sql执行顺序是什么? 目录 Mysql数据库查询Sql执行顺序是什么? 1.FROM 执行笛卡尔积 2.ON 应用ON过滤器 3.JOIN 添加外部行 4.WHERE 应用WEHRE过滤器 5.GROUP BY 分组 6.AGG_FUNC 计算...
  • 执行计划(execution plan,也叫查询计划或者解释计划)是数据库执行 SQL 语句的具体步骤,例如通过索引还是全表扫描访问表中的数据,连接查询的实现方式和连接的顺序等。如果 SQL 语句性能不够理想,我们首先应该...
  • 我们是以SQL Server 2005来学习的SQL语句,关于SQL Server的图形界面操作,和关于视图、数据库备份还原这些大家下来要下来看一下。  关于Oracle,我们都已经学习了SQL语句,那么Oracle其实已经学习了一大半,接...
  • 关键字:from.where,group by,having,select,distinct,union,orderby 执行顺序: from--->.where,---->group by--->,having,--->select,--->...了解到sql执行顺序的不同,可以避免一...
  • SQL执行顺序: 手写(就是我们写SQL语句的顺序)一般如下所示: 机器(sql服务器理解SQL语句)的顺序: 总结 JOIN图: 因为这些图都是取自阿里云教程的视频,所以后面有些本来事一张图的因为视频...
  • SQL性能下降的原因: 查询语句写的烂 索引失效(单值索引,复合索引) 单值索引 CREATE INDEX idx_good_Goodsname ON good(Goodsname); 复合索引 CREATE INDEX idx_good_GoodsnameCategoryname ON good...
  • SQL语句执行顺序一 查询数据库流程二 SQL语句执行顺序SQL数据库零散知识查看MySQL当前有多少个连接查看当前连接的状态通信类型:同步 or 异步连接方式:长连接 or 短连接MySQL最大连接数通信方式:单工//半双工//...
  • 我们做软件开发的,大部分人都离不开跟数据库打交道,特别是erp开发的,跟数据库打交道更是频繁,存储过程动不动就是上千行,如果数据量大,人员流动大,那么我么还能保证下一段时间系统还能流畅的运行吗?...
  • 1.自下而上的顺序解析(基本原理); 2.引发效率问题举例; 3.引发正确性问题举例;
  • 数据库SQL语句的执行

    2019-08-12 18:44:20
    参考 https://www.cnblogs.com/XiaoZone/p/7851898.html; https://cloud.tencent.com/developer/news/254038; ... DB2S数据库sql执行顺序SQL的执行浅析基础SQL语句组成及书写顺序新的改变...
  • Sql顺序 SQL的语法顺序: select 【distinct】 ....from ....【xxx join】【on】....where....group by ....having.......SQL执行顺序: from ....【xxx join】【on】....where....group by ....avg()、sum...
  • 其中select和from是必须的,其他关键词是可选的,这六个关键词的执行顺序sql语句的书写顺序并不是一样的,而是按照下面的顺序来执行: from>where>group by>having>select>order by from:需要从...
  • 5>...Select 5-1>选择列,5-2>distinct 1>…From 表 2>…Where 条件 3>…Group by 列 4>…Having 筛选条件 6>…Order by 列 7>...Top 转载于:...
  • SQL语句的执行顺序 MySQL的语句一共分为11步,如下图所标注的那样,最先执行的总是FROM操作,最后执行的是LIMIT操作。其中每一个操作都会产生一张虚拟的表,这个虚拟的表作为一个处理的输入,只是这些虚拟的表对用户...
  • 记录sql执行顺序

    2017-05-23 16:31:00
    SQL 语句执行顺序为: FROM WHERE GROUP BY HAVING SELECT DISTINCT UNION ORDER BY 关于 SQL 语句的执行顺序,有三个值得我们注意的地方: 1、 FROM 才是 SQL 语句...
  • SQL执行顺序

    2018-01-15 22:17:00
    在项目开发的时候特别是遇到数据库表中数据比较多的时候SQL语句的执行效率优先级是非常高的,最近...再次后面会去专门分析oracle中自带函数的使用以及原理,这里就不做分析了,先来理解一下SQL执行顺序之前写SQ...
  • 执行计划(execution plan,也叫查询计划或者解释计划)是数据库执行 SQL 语句的具体步骤,例如通过索引还是全表扫描访问表中的数据,连接查询的实现方式和连接的顺序等。如果 SQL 语句性能不够理想,我们首先应该...
  • sql执行顺序整理

    2016-12-14 15:46:00
    sql执行顺序,是优化sql语句执行效率必须要掌握的。各个数据库可能有细小的差别,但大体顺序是相同的,这里只做大致说明。 一、总体执行顺序  在sql语句执行之前,还有SQL语句准备执行阶段,这里不做描述,只...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,214
精华内容 885
关键字:

数据库sql执行顺序