精华内容
下载资源
问答
  • sql语句执行顺序
    2022-02-18 09:10:02

    select 语句定义:

    <SELECT clause> 
    	[<FROM clause>] 
    	[<WHERE clause>] 
    	[<GROUP BY clause>] 
    	[<HAVING clause>] 
    	[<ORDER BY clause>] 
    	[<LIMIT clause>] 
    

    select 语句的执行顺序

    1. from
    2. join
    3. on
    4. where
    5. group by (可以使用 select 中的别名,后面的语句中都可以使用)
    6. count、sum、svg…
    7. having
    8. select
    9. distinct
    10. order by
    11. limit

    1、确定范围:确定查询数据范围(1->2->3)
    2、数据处理:过滤不符合的数据,对需要的数据进行分组统计,过滤不符合的统计结果(4->5->6->7)
    3、返回结果:确定返回的列,去重,确定返回条数(8->9->10->11)

    特别注意:

    1、where 语句和 group by 语句后面不可以使用聚合函数(count、sum、svg…)
    2、mysql 中 group by 语句及其之后的语句可以使用 select 中的别名

    • 根据 sql 语句执行顺序,group by 在 select 之前执行,所以 group by 是无法使用 select 后面的别名的
    • mysql 中 group by 之所以能使用 select 后面的别名是因为 mysql 对其进行了扩充,其他数据库不支持
    更多相关内容
  • 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 <...

    sql语句定义和执行顺序

    摘自《MySQL技术内幕:SQL编程》

    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>
    

    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>
    

    可以看到,一共有十一个步骤,最先执行的是FROM操作,最后执行的是LIMIT操作。每个操作都会产生一个虚拟表,该虚拟表作为一个处理的输入,看下执行顺序:

    (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;
    (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语句执行顺序,需要了解更多的朋友可以参考下
  • SQL语句执行顺序

    千次阅读 2020-04-07 21:55:32
    Mysql----SQL查询语句执行顺序 (7) SELECT (8) DISTINCT <select_list> (1) FROM <left_table> (3) <join_type> JOIN <right_table> (2) ON <join_condition> (4) WHERE <where_...

    Mysql----SQL查询语句执行顺序

    (7)  SELECT 
    (8)  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)  HAVING <having_condition>
    (9)  ORDER BY <order_by_condition>
    (10) LIMIT <limit_number>
    

    前期准备工作

    用户表
    在这里插入图片描述
    订单表
    在这里插入图片描述
    准备SQL逻辑查询测试语句查询语句来获得来自北京,并且订单数少于2的客户;

    SELECT a.user_id,COUNT(b.order_id) as total_orders
    FROM  user as a
    LEFT JOIN orders as b
    ON a.user_id = b.user_id
    WHERE a.city = 'beijing'
    GROUP BY a.user_id
    HAVING COUNT(b.order_id) < 2
    ORDER BY total_orders desc
    

    在这些SQL语句的执行过程中,都会产生一个虚拟表,用来保存SQL语句的执行结果

    一. 执行FROM语句
    第一步,执行FROM语句。我们首先需要知道最开始从哪个表开始的,这就是FROM告诉我们的。现在有了<left_table><right_table>两个表,我们到底从哪个表开始,还是从两个表进行某种联系以后再开始呢?它们之间如何产生联系呢?——笛卡尔积

    经过FROM语句对两个表执行笛卡尔积,会得到一个虚拟表,VT1(vitual table 1),内容如下:
    在这里插入图片描述
    总共有28(user的记录条数 * orders的记录条数)条记录。这就是VT1的结果,接下来的操作就在VT1的基础上进行

    二. 执行ON过滤
    执行完笛卡尔积以后,接着就进行ON a.user_id = b.user_id条件过滤,根据ON中指定的条件,去掉那些不符合条件的数据,得到VT2如下:
    在这里插入图片描述

    三. 添加外部行

    这一步只有在连接类型为OUTER JOIN时才发生,如LEFT OUTER JOIN、RIGHT OUTER JOIN和FULL OUTER JOIN。在大多数的时候,我们都是会省略掉OUTER关键字的,但OUTER表示的就是外部行的概念。

    LEFT OUTER JOIN把左表记为保留表:即左表的数据会被全部查询出来,若右表中无对应数据,会用NULL来填充:
    在这里插入图片描述
    RIGHT OUTER JOIN把右表记为保留表:即右表的数据会被全部查询出来,若左表中无对应数据,则用NULL补充;
    在这里插入图片描述
    由于我在准备的测试SQL查询逻辑语句中使用的是LEFT JOIN,得到的VT3表如下:
    在这里插入图片描述
    四. 执行where条件过滤
    对添加了外部行的数据进行where条件过滤,只有符合<where_condition>条件的记录会被筛选出来,执行WHERE a.city = 'beijing' 得到VT4如下:
    在这里插入图片描述
    但是在使用WHERE子句时,需要注意以下两点:

    ① 由于数据还没有分组,因此现在还不能在where过滤条件中使用where_condition=MIN(col)这类对分组统计的过滤;

    ② 由于还没有进行列的选取操作,因此在select中使用列的别名也是不被允许的,如:select city as c from table1 wherec='beijing' 是不允许的

    五. 执行group by分组语句
    GROU BY子句主要是对使用WHERE子句得到的虚拟表进行分组操作,执行GROUP BY a.user_id 得到VT5如下:
    在这里插入图片描述
    六. 执行having
    HAVING子句主要和GROUP BY子句配合使用,对分组得到VT5的数据进行条件过滤,执行 HAVING COUNT(b.order_id) < 2,得到VT6如下:
    在这里插入图片描述
    七. select列表
    现在才会执行到SELECT子句,不要以为SELECT子句被写在第一行,就是第一个被执行的。

    我们执行测试语句中的SELECT a.user_id,user_name,COUNT(b.order_id) as total_orders,从VT6中选择出我们需要的内容,得到VT7如下:
    在这里插入图片描述
    八. 执行distinct去重复数据
    如果在查询中指定了DISTINCT子句,则会创建一张内存临时表(如果内存放不下,就需要存放在硬盘了)。这张临时表的表结构和上一步产生的虚拟表是一样的,不同的是对进行DISTINCT操作的列增加了一个唯一索引,以此来除重复数据。测试SQL中没有DISTINCT字句,所以不会执行

    九. 执行order by字句

    对虚拟表VT7中的内容按照指定的列进行排序,然后返回一个新的虚拟表,我们执行测试SQL语句中的ORDER BY total_orders DESC ,得到结果如下:

    DESC倒序排序,ASC升序排序

    在这里插入图片描述

    十. 执行limit字句

    LIMIT子句从上一步得到的虚拟表中选出从指定位置开始的指定行数据,常用来做分页;

    MySQL数据库的LIMIT支持如下形式的选择:limit n,m

    表示从第n条记录开始选择m条记录。对于小数据,使用LIMIT子句没有任何问题,当数据量非常大的时候,使用LIMIT n, m是非常低效的。因为LIMIT的机制是每次都是从头开始扫描,如果需要从第60万行开始,读取3条数据,就需要先扫描定位到60万行,然后再进行读取,而扫描的过程是一个非常低效的过程。

    展开全文
  • SQL语句执行顺序详解

    2020-09-10 06:19:30
    本文给大家介绍SQL语句执行顺序详解,涉及到sql语句执行顺序相关知识,对sql语句执行顺序感兴趣的朋友一起看看吧
  • SQL语句执行顺序是什么样的呢

    千次阅读 2022-03-13 14:22:53
    select语句定义如下: <SELECT clause> [<FROM clause>...先给出SQL语句执行顺序结论,后通过案例分析: 最先执行from tab; where语句是对条件加以限定; 执行分组语句group by 执行分

    select语句定义如下:

    <SELECT clause> [<FROM clause>] [<WHERE clause>] [<GROUP BY clause>]
    [<HAVING clause>] [<ORDER BY clause>] [<LIMIT clause>] 
    

    先给出SQL语句执行顺序结论,后通过案例分析:

    1. 最先执行from tab;
    2. where语句是对条件加以限定;
    3. 执行分组语句group by
    4. 执行分组函数
    5. 执行分组后过滤having
    6. select语句。
    7. order by排序语句。
    8. limit

    Select 6

    分组函数(avg、sum等) 4

    From 1

    where 2

    group by 3

    having 5

    order by 7
    limit 8

    案例SQL执行分析

    select deptno ,avg(sal) from emp where ename is not null group by 
    deptno having avg(sal)>2000 order by deptno desc;
    
    1. 先确定从哪个表中取数据,所以最先执行from emp。如果存在多表连接,可以对表加别名,方便后面的引用。
    2. 执行 where子句, 筛选 emp 表中ename数据不为 null 的数据 。
    3. 执行 group by 子句, 把 emp 表按 “deptno” 进行分组。
    4. 执行 avg(sal) 分组函数, 按分组计算平均工资(sal)数值。 (常用的聚合函数有max,min, count,sum,聚合函数的执行在group by之后,having之前。如果在where中写聚合函数,就会出错。)
    5. 执行 having 子句, 筛选平均薪资大于2000的。
    6. 执行select选出要查找的字段,如果全选可以select *。这里选出部门编号,各部门平均工资。
    7. 执行order by 排序语句。order by语句在最后执行,只有select选出要查找的字段,才能进行排序。
    8. limit是SQL语句执行的最后一个环节。

    呜啦啦啦啦 看官喜欢的话点赞收藏或者关注一下吧

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

    千次阅读 2018-06-15 12:46:44
    【1】SQL执行语法顺序 --查询组合字段 (5)select (5-2) distinct(5-3) top(&lt;top_specification&gt;)(5-1)&lt;select_list&gt; --连表 (1)from (1-J)&lt;left_table&gt;&lt;join_...
  • 关于SQL语句执行顺序

    千次阅读 多人点赞 2022-04-22 00:11:02
    关于SQL语句执行顺序,from where group by having select order by limit
  • 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 表组装...
  • 目前还在查看,但是在查阅资料时发现了一些有益的知识,给大家分享一下,就是关于sql以及MySQL语句执行顺序sql和mysql执行顺序,发现内部机制是一样的。最大区别是在别名的引用上。 一、sql执行顺序 (1)from ...
  • sql 查询语句执行顺序

    千次阅读 2021-05-29 20:50:09
    了解 sql执行顺序是很必要的,执行顺序不同可能查询到的结果最后也会不一样。 select 语句的完整语法如下: SELECT    DISTINCT < select_field >   FROM < ...
  • 1、from子句组装来自不同数据源的数据; 2、where子句基于指定的条件对记录行进行筛选; 3、group by子句将数据... 标准顺序SQL 语句为: Select 考生姓名, max(总成绩) as max总成绩 from tb_Grade where 考生姓名
  • 关于Sql中Select语句执行顺序,一直很少注意这个问题,对于关键字的使用也很随意,至于效率问题,因为表中的数据量都不是很大,所以也不是很在意。
  • SQL语句执行顺序及MySQL中limit的用法

    千次阅读 2021-01-19 05:12:33
    一、 SQL语句执行顺序及MySQL中limit的用法执行顺序:from...where...group by... having.... select ... order by... limitlimit限制查询的结果序号limit off, n: 从off偏移取n个数据limit n: 取前n个数据,相当于...
  • SQL语句执行顺序说明

    2011-08-02 10:23:08
    关于SQL语句在进入oracle库缓存之后的执行顺序的简析~!
  • Oracle sql语句执行顺序

    千次阅读 2018-12-09 14:33:23
    一、sql语句执行步骤: 1)语法分析,分析语句的语法是否符合规范,衡量语句中各表达式的意义。 2)语义分析,检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限。 3)视图转换,将涉及视图的查询...
  • SQL执行顺序

    千次阅读 多人点赞 2021-03-23 10:26:36
    SQL语句执行顺序   结合上图,整理出如下伪SQL查询语句。   从这个顺序中我们可以发现,所有的查询语句都是从 FROM 开始执行的。在实际执行过程中,每个步骤都会为下一个步骤生成一个...
  • mysql sql语句执行顺序

    千次阅读 2016-02-19 14:33:11
    mysql sql语句执行顺序 引言:作为一个程序猿。要想优化sql,首先要明白sql语句的执行顺序、同时防止该死的面试官问一些数据库专业的问题有必要知道这些 sql语句select语句查询顺序 (7) SELECT (8) DISTINCT ...
  • Sql语句执行顺序Sql语句执行顺序Sql语句执行顺序Sql语句执行顺序Sql语句执行顺序Sql语句执行顺序Sql语句执行顺序
  • 熟练掌握sql语句执行顺序,才能避免编程中各种bug和错误。
  • SQL语句执行顺序

    千次阅读 2022-05-10 08:18:14
    SQL
  • 关于sql和MySQL的语句执行顺序(必看)

    万次阅读 多人点赞 2016-03-29 12:15:09
    目前还在查看,但是在查阅资料时发现了一些有益的知识,给大家分享一下,就是关于sql以及MySQL语句执行顺序sql和mysql执行顺序,发现内部机制是一样的。最大区别是在别名的引用上。 一、sql执行顺序 (1)from (3)...
  • hive sql 语句正确执行顺序

    千次阅读 2021-03-14 16:33:29
    执行顺序:from ..on .. join .. .. where .. select .. group by .. having .. order by... limit ... map阶段 from 加载,进行表的查找和加载 where过滤 select查询 Reduce阶段 group by :对map端发来的文件...
  • 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 查询执行顺序

    2021-12-20 16:33:00
    执行顺序: from > where(分组前的过滤) > group by > having(分组后的过滤) > order by > select(返回最后符合条件的数据); 1.where 子句优先执行于聚合语句(sum,min,max,avg,count)。 2.聚合...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 289,589
精华内容 115,835
关键字:

sql语句执行顺序