精华内容
下载资源
问答
  • 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互斥.
    展开全文
  • 数据库SQL执行顺序

    千次阅读 2018-08-03 22:37:11
    数据库中SQL的执行顺序如下: (8)SELECT (9)DISTINCT (11)&lt;Top Num&gt; &lt;select list&gt; (1)FROM [left_table] (3)&lt;join_type&gt; JOIN &lt;right_table&gt; (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语句执行顺序,你理解了吗

    万次阅读 多人点赞 2020-01-13 15:29:00
    记得前几年,还是初级的时候,面试官问到,请你讲一下sql语句的执行顺序。当时我以为就是按照sql的关键字排列顺序来执行的。当时说完,面试官心里估计已经直接pass我了吧。今天复习的时候,突然想起这个基础知识点,...

    热门系列


     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,并返回给查询用户

     

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

     

    展开全文
  • 日常书写顺序 SELECT 查询列 FROM 表1 [连接类型] JOIN 表2 ON 连接的条件 WHERE 筛选的条件 ...手写循序 数据库执行循序 SELECT 查询列表 (7) FROM 表 1 (1) 【连接类型】 JOIN 表 2 (2)
  •  当SELECT语句被DBMS执行时,其子句会按照固定的先后顺序执行:   (1)FROM 子句。   (2)WHERE 子句。   (3)GROUP BY 子句。   (4)HAVING 子句。   (5)SELECT 子句。   (6)ORDER BY 子句。...
    最近在学习数据库的相关知识,想和大家分享一下学习后的相关笔记。 
    
       当SELECT语句被DBMS执行时,其子句会按照固定的先后顺序执行: 
       (1)FROM  子句。 
       (2)WHERE 子句。 
       (3)GROUP BY 子句。 
       (4)HAVING 子句。 
       (5)SELECT 子句。 
       (6)ORDER BY 子句。 

       基本的工作原理:FROM子句先被执行,通过FROM子句获得一个虚拟表,然后通过WHERE子句从虚拟表中获取满足条件的记录,生成新的虚拟表。将新虚拟表中的记录通过GROUP BY子句分组后得到更新的虚拟表,而后HAVING子句在最新的虚拟表中筛选出满足条件的记录组成另外一个虚拟表中,SELECT子句会将指定的列提取出来组成更新的虚拟表,最后ORDER BY子句对其进行排序得出最终的虚拟表。通常这个最终的虚拟表被称为查询结果集。


    另一篇

    引言

      这不是一个什么多深的技术问题,多么牛叉的编程能力。这跟一个人的开发能力也没有非常必然的直接关系,但是知道这些会对你的SQL编写,排忧及优化上会有很大的帮助。它不是一个复杂的知识点,但是一个非常基础的SQL根基。不了解这些,你一直用普通水泥盖房子;掌握这些,你是在用高等水泥盖房子。

      然而,就是这么一个小小的知识点,大家可以去调查一下周围的同事朋友,没准你会得到一个“惊喜”。

      由于这篇文章是突然有感而写,下面随手编写的SQL语句没有经过测试。

      看下面的几段SQL语句:

    1
    2
    3
    4
    5
    6
    7
    SELECT ID, COUNT (ID) AS TOTAL
     
    FROM STUDENT
     
    GROUP BY ID
     
    HAVING TOTAL>2
    1
    2
    3
    4
    5
    6
    7
    SELECT ID, COUNT (ID) AS TOTAL
     
    FROM STUDENT
     
    GROUP BY ID
     
    ORDER BY TOTAL
    1
    2
    3
    4
    5
    SELECT FIRSTNAME+ ' ' +LASTNAME AS NAME , COUNT (*) AS COUNT
     
    FROM STUDENT
     
    GROUP BY NAME

      你觉得哪一个不能够成功执行?

     言归正传

      下面是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语句的实际物理执行顺序可能会由于查询处理器的不同而与这个顺序有所出入。

     几个示例

      示例一

    1
    2
    3
    4
    5
    6
    7
    SELECT ID, COUNT (ID) AS TOTAL
     
    FROM STUDENT
     
    GROUP BY ID
     
    HAVING TOTAL>2

      觉得这个SQL语句眼熟吗?对,非常基础的分组查询。但它不能执行成功,因为HAVING的执行顺序在SELECT之上。

      实际执行顺序如下:

    1. FROM STUDENT
    2. GROUP BY ID
    3. HAVING TOTAL>2
    4. SELECT ID,COUNT(ID) AS TOTAL

      很明显,TOTAL是在最后一句SELECT ID,COUNT(ID) AS TOTAL执行过后生成的新别名。因此,在HAVING TOTAL>2执行时是不能识别TOTAL的。

      示例二

    1
    2
    3
    4
    5
    6
    7
    SELECT ID, COUNT (ID) AS TOTAL
     
    FROM STUDENT
     
    GROUP BY ID
     
    ORDER BY TOTAL

      这个的实际执行顺序是:

    1. FROM STUDENT
    2. GROUP BY ID
    3. SELECT ID,COUNT(ID) AS TOTAL
    4. ORDER BY TOTAL

      这一次没有任何问题,能够成功执行。如果把ORDER BY TOTAL换成ORDER BY COUNT(ID)呢?

    1
    2
    3
    4
    5
    6
    7
    SELECT ID, COUNT (ID) AS TOTAL
     
    FROM STUDENT
     
    GROUP BY ID
     
    ORDER BY COUNT (ID)

      实际执行顺序:

    1. FROM STUDENT
    2. GROUP BY ID
    3. SELECT ID,COUNT(ID) AS TOTAL
    4. ORDER BY COUNT(ID)

      没错,它是能够成功执行的,看SQL执行计划,它与上面ORDER BY TOTAL是一样的。ORDER BY 是在SELECT后执行,因此可以用别名TOTAL。

      示例三

    1
    2
    3
    4
    5
    SELECT FIRSTNAME+ ' ' +LASTNAME AS NAME , COUNT (*) AS COUNT
     
    FROM STUDENT
     
    GROUP BY NAME

      实际执行顺序:

    1
    2
    3
    4
    5
    FROM STUDENT
     
    GROUP BY NAME
     
    SELECT FIRSTNAME+ ' ' +LASTNAME AS NAME , COUNT (*) AS COUNT

      很明显,执行GROUP BY NAME时别名NAME还没有创建,因此它是不能执行成功的。

     总结

      回忆起曾经随意问过一些人这个问题,不管谁说不知道时我们都会故意嘲笑一翻,当然此嘲笑非彼嘲笑。但事实证明还是有一些人不会注意到这个知识点,在此贴出来只是做为一个友好的提醒。




    展开全文
  • Oracle sql语句执行顺序

    千次阅读 2017-11-16 22:58:23
    2)语义分析,检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限。 3)视图转换,将涉及视图的查询语句转换为相应的对基表查询语句。 4)表达式转换, 将复杂的 SQL 表达式转换为较简单的等效连接表达式...
  • 数据库查询中经常使用的关键字 ...其中select和from是最基本也是必须的的关键字,其他的关键字可以根据需要搭配选择与sql语句的书写顺序并不是一样的,执行顺序如下: from--where--group by--having--sel...
  • SQL语句的执行顺序

    千次阅读 2018-07-26 23:30:15
    SQL语句执行顺序 查询语句中select from where group by having order by的执行顺序   1.查询中用到的关键词主要包含六个,并且他们的顺序依次为  select--from--where--group by--having--order by   ...
  • mysql数据库各关键字执行顺序

    千次阅读 2018-10-22 21:55:17
    在SQL语句中每个关键字都会按照顺序往下执行,而每一步操作,会生成一个虚拟表,最后的虚拟表就是最终结果。 基本sql 语句如下 : (8)SELECT (9)DISTINCT &lt;select_list&gt; (1)FROM &lt;left_table...
  • SQL的select语句完整的执行顺序

    千次阅读 多人点赞 2020-07-15 10:17:49
    SQL Select语句完整的执行顺序: 1、from子句组装来自不同数据源的数据; 2、where子句基于指定的条件对记录行进行筛选; 3、group by子句将数据划分为多个分组; 4、使用聚集函数进行计算; 5、使用having子句筛选...
  • MySql执行顺序及执行计划

    万次阅读 多人点赞 2019-03-06 12:41:12
    一、mySql的执行顺序 mysql执行sql的顺序从 From 开始,以下是执行的顺序流程 1、FROM table1 left join table2 on 将table1和table2中的数据产生笛卡尔积,生成Temp1 2、JOINtable2 所以先是确定表,再确定关联...
  • 主要介绍了数据库中的SELECT语句逻辑执行顺序分析,并列出了一些例子,需要的朋友可以参考下
  • 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; 分页语句.....
  • 微信小程序云开发数据库操作顺序

    千次阅读 2019-05-03 15:18:15
    想先对数据库user进行搜索,搜索出user中,like字段为123的,删除 实现想法: 先用数据库搜索,搜索出like字段为123的,通过get里的success,赋值给全局变量userID,然后通过userID,达到删除的效果(云开发的remove...
  • 当同时出现了where_group_by_having_order_by的时候_执行顺序和编写顺序时的用法
  • 数据库的语句执行顺序(必看)

    千次阅读 2014-12-05 11:32:10
    1.问题:如下2条语句的具体执行顺序是什么呢,有什么区别,哪条语句效率更高?  (1).select * from tb1 a join tb2 b on a.id=b.id  where a.time between t11 and t12 and b.time between ...
  • 数据库学习】数据库总结

    万次阅读 多人点赞 2018-07-26 13:26:41
    1,数据库 1)概念 数据库是长期存储在计算机内、有组织的、可共享的大量数据的集合。 常见数据库管理系统有:Access、mysql、sql server 2)特点 ①数据库数据特点 永久存储、有组织...
  • 1、Oracle数据库Where条件执行顺序:由于SQL优化起来比较复杂,并且还会受环境限制,在开发过程中,写SQL必须必须要遵循以下几点的原则: 1.ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在...
  • 本文将详细介绍数据库总结--SQL语句执行顺序,需要了解更多的朋友可以参考下
  • SQL关键字的执行顺序

    万次阅读 2018-04-23 15:36:54
    纸上得来终觉浅1.这样一个问题,作为一个开发人员需要掌握数据库的哪些东西? 在开发中涉及到数据库,基本上...学习下面几点:1)Mysql的执行顺序,这个是写sql的核心,之前遇到的一些错误就是因为对其不了解;2)如何...
  • SELECT emp_name, emp_age FROM emp_info WHERE emp_age > (SELECT emp_...上面代码中,是先执行主查询的FROM子句,然后执行主查询的WHERE子句,然后执行子查询……;还是先执行子查询,在执行主查询的FROM子句……
  • sql语句执行顺序

    万次阅读 多人点赞 2019-06-23 09:18:23
    sql语句定义和执行顺序 摘自《MySQL技术内幕:SQL编程》 sql语句定义的顺序 (1) SELECT (2)DISTINCT<select_list> (3) FROM <left_table> (4) <join_type> JOIN <right_table> (5) ON <...
  • join(连接)、group by(分组)、order by(排序)、where(条件)是数据库最常用的几个函数,这里简单介绍下各个函数的作用,及其共同使用时的使用顺序。 函数的作用 join:join主要是为了获取两个表中匹配...
  • 1、Oracle数据库Where条件执行顺序: 由于SQL优化起来比较复杂,并且还会受环境限制,在开发过程中,写SQL必须必须要遵循以下几点的原则:  1.ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接...
  • 数据库查询不同关键字的执行顺序

    千次阅读 2015-08-27 17:58:38
    标准查询关键字执行顺序为 : from->where->group by->having->order by 注意:连表查询 : LEFT JOIN XXXX ON .. AND .. 在from后面,所以比where先执行。关键字注意点: ON与where的使用一定要注意场所: (1...
  • 数据库SQL执行计划

    千次阅读 2018-10-11 23:40:13
    能写sql 只是程序员的基本功,能写出...MySQL本身的功能架构分为三个部分,分别是 应用层、逻辑层、物理层,不只是MySQL ,其他大多数数据库产品都是按这种架构来进行划分的。 应用层,主要负责与客户端进行交互...
  • 引言 到目前为止,已经总结了常见的SQL子句,包括 SELECT 、FROM、JOIN ...ON、...除了上述这些子句,下面将会介绍另一个比较常用的子句 LIMIT ,并且总结一下SQL 语句的执行顺序。 一、LIMIT 子句 LIMIT 子句...
  • 分页查询 LINIT 联合查询 UNION [ALL] 查询语句执行顺序总结 表的概念
  • 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 计算...
  • 建议安装(10g即以上版本上)xplan package,XPALN包其实是对DBMS_XPLAN包的封装,使用XPLAN包就可以很清晰的看到执行计划的执行顺序。 安装很简单:其中xplan.sql_.txt可以到如下的网站下载: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 509,680
精华内容 203,872
关键字:

数据库执行顺序