精华内容
下载资源
问答
  • SQL关键字执行顺序

    2020-03-16 08:42:33
    首先给出SQL关键字执行顺序,最后再给出说明; (8)SELECT(9)DISTINCT <select_list> (1)FROM <left_table> (3)<join_type> JOIN <right_table> (2)ON <join_condition&...

    首先给出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 <grout_by_list>
    (6)WITH {CUTE|ROLLUP}
    (7)HAVING <having_condition>
    (10)ORDER BY <order_by_list>
    (11)LIMIT <limit_number>

    每步关键字执行的结果都会形成一个虚表,编号大的关键字执行的动作都是在编号小的关键字执行结果所得的虚表上进行(或者说编号大的关键字处理的对象是编号小的关键执行过后得到的虚表),以此类推。

    展开全文
  • sql 关键字执行顺序

    2020-05-15 09:41:07
    结论 结论先行,顺序如下展示: (1)from ...在sql执行过程中,每一关键字执行都会产出一个【虚拟表】,虚拟表作为下一级处理的输入。 验证方法 关键字AS 推理 关键字 AS 就是在 执行的...

    结论

    结论先行,顺序如下展示:

    (1)from 
    (2) join 
    (3)on 
    (4)where 
    (5)group by
    (6)avg,sum.... 
    (7)having 
    (8)select 
    (9)distinct 
    (10)order by
    (11)top 

    背景

    一条sql 脚本为什么会有顺序的问题?其实就是大家看待问题的粒度不同。在sql的执行过程中,每一关键字的执行都会产出一个【虚拟表】,虚拟表作为下一级处理的输入。

    验证方法

    • 关键字AS
    • 推理

    关键字 AS 就是在 执行的关键字后加 AS 如 FROM XX AS T 或者 SELECT  XX  AS T ,定义 AS后的别名可以在下一阶段使用,可以说明关键字的调用顺序。

    推理是指当出现像  where 、group by等这种不能使用 as关键字的时候,在用as 确认出来大框架的情况,简单推理就可以定出位置。  

    展开全文
  • SQL关键字执行顺序

    万次阅读 2018-04-23 15:36:54
    纸上得来终觉浅1.这样一个问题,作为一个开发人员需要掌握数据库的哪些东西? 在开发中涉及到数据库,基本上...学习下面几点:1)Mysql的执行顺序,这个是写sql的核心,之前遇到的一些错误就是因为对其不了解;2)如何...

    纸上得来终觉浅

    1.这样一个问题,作为一个开发人员需要掌握数据库的哪些东西?  在开发中涉及到数据库,基本上只用到了sql语句,如何写sql以及对其进行优化就比较重要,那些mysql的厚本书籍针对的是DBA,我们只需要学习其中的sql就可以了。

    2.既然会写sql是目标,那么怎么才能写好sql.学习下面几点:

    1)Mysql的执行顺序,这个是写sql的核心,之前遇到的一些错误就是因为对其不了解;

    2)如何进行多表查询,优化,这个是很重要的部分;

    3)sql语句的函数,sql提供的函数方便了很多操作;

    3.这篇对Mysql语句执行顺序的学习做了总结:

    1)Mysql语法顺序,即当sql中存在下面的关键字时,它们要保持这样的顺序:

    [html]  view plain  copy
    1. select[distinct]  
    2. from  
    3. join(如left join)  
    4. on  
    5. where  
    6. group by  
    7. having  
    8. union  
    9. order by  
    10. limit  

    
    

    2)Mysql执行顺序,即在执行时sql按照下面的顺序进行执行:

    [html]  view plain  copy
    1. from  
    2. on  
    3. join  
    4. where  
    5. group by  
    6. having  
    7. select  
    8. distinct  
    9. union  
    10. order by  
    3)针对上面的Mysql语法顺序和执行顺序,循序渐进进行学习:

    建立如下表格orders:


    注:下面所有语句符合语法顺序(也不可能不符合,因为会报错^_^),只分析其执行顺序:(join和on属于多表查询,放在最后展示)

    语句一:

    [html]  view plain  copy
    1. select a.Customer  
    2. from orders a  
    3. where a.Customer='Bush' or a.Customer = 'Adams'  
    分析一:首先是from语句找到表格,然后根据where得到符合条件的记录,最后select出需要的字段,结果如下:


    语句二groupby:groupby要和聚合函数一起使用

    [html]  view plain  copy
    1. select a.Customer,sum(a.OrderPrice)  
    2. from orders a  
    3. where a.Customer='Bush' or a.Customer = 'Adams'  
    4. group by a.Customer  
    分析二:在from,where执行后,执行group by,同时也根据group by的字段,执行sum这个聚合函数。这样的话得到的记录对group by的字段来说是不重复的,结果如下:

    语句三having:

    [html]  view plain  copy
    1. select a.Customer,sum(a.OrderPrice)  
    2. from orders a  
    3. where a.Customer='Bush' or a.Customer = 'Adams'  
    4. group by a.Customer  
    5. having sum(a.OrderPrice) > 2000  
    分析三:由于where是在group之前执行,那么如何对group by的结果进行筛选,就用到了having,结果如下:


    语句四distinct: (为测试,先把数据库中Adams那条记录的OrderPrice改为3000)

    [html]  view plain  copy
    1. select distinct sum(a.OrderPrice)  
    2. from orders a  
    3. where a.Customer='Bush' or a.Customer = 'Adams' or a.Customer = 'Carter'  
    4. group by a.Customer  
    5. having sum(a.OrderPrice) > 1700  
    分析四:将得到一条记录(没有distinct,将会是两条同样的记录):


    语句五union:完全是对select的结果进行合并(默认去掉重复的记录):

    [html]  view plain  copy
    1. select distinct sum(a.OrderPrice) As Order1  
    2. from orders a  
    3. where a.Customer='Bush' or a.Customer = 'Adams' or a.Customer = 'Carter'  
    4. group by a.Customer  
    5. having sum(a.OrderPrice) > 1500  
    6. union  
    7. select distinct sum(a.OrderPrice) As Order1  
    8. from orders a  
    9. where a.Customer='Bush' or a.Customer = 'Adams' or a.Customer = 'Carter'  
    10. group by a.Customer  
    11. having sum(a.OrderPrice) > 2000  
    分析五:默认去掉重复记录(想保留重复记录使用union all),结果如下:


    语句六order by:

    [html]  view plain  copy
    1. select distinct sum(a.OrderPrice) As order1  
    2. from orders a  
    3. where a.Customer='Bush' or a.Customer = 'Adams' or a.Customer = 'Carter'  
    4. group by a.Customer  
    5. having sum(a.OrderPrice) > 1500  
    6. union  
    7. select distinct sum(a.OrderPrice) As order1  
    8. from orders a  
    9. where a.Customer='Bush' or a.Customer = 'Adams' or a.Customer = 'Carter'  
    10. group by a.Customer  
    11. having sum(a.OrderPrice) > 2000  
    12. order by order1  
    分析:升序排序,结果如下:


    语句七limit:

    [html]  view plain  copy
    1. select distinct sum(a.OrderPrice) As order1  
    2. from orders a  
    3. where a.Customer='Bush' or a.Customer = 'Adams' or a.Customer = 'Carter'  
    4. group by a.Customer  
    5. having sum(a.OrderPrice) > 1500  
    6. union  
    7. select distinct sum(a.OrderPrice) As order1  
    8. from orders a  
    9. where a.Customer='Bush' or a.Customer = 'Adams' or a.Customer = 'Carter'  
    10. group by a.Customer  
    11. having sum(a.OrderPrice) > 2000  
    12. order by order1  
    13. limit 1  
    分析七:取出结果中的前1条记录,结果如下:


    语句八(上面基本讲完,下面是join 和 on):

    [html]  view plain  copy
    1. select distinct sum(a.OrderPrice) As order1,sum(d.OrderPrice) As order2  
    2. from orders a  
    3. left join (select c.* from Orders c) d   
    4. on a.O_Id = d.O_Id  
    5. where a.Customer='Bush' or a.Customer = 'Adams' or a.Customer = 'Carter'  
    6. group by a.Customer  
    7. having sum(a.OrderPrice) > 1500  
    8. union  
    9. select distinct sum(a.OrderPrice) As order1,sum(e.OrderPrice) As order2  
    10. from orders a  
    11. left join (select c.* from Orders c) e   
    12. on a.O_Id = e.O_Id  
    13. where a.Customer='Bush' or a.Customer = 'Adams' or a.Customer = 'Carter'  
    14. group by a.Customer  
    15. having sum(a.OrderPrice) > 2000  
    16. order by order1  
    17. limit 1  
    分析八:上述语句其实join on就是多连接了一张表,而且是两张一样的表,都是Orders。 执行过程是,在执行from关键字之后根据on指定的条件,把left join指定的表格数据附在from指定的表格后面,然后再执行where字句。

    注:

    1)使用distinct要写在所有要查询字段的前面,后面有几个字段,就代表修饰几个字段,而不是紧随distinct的字段;

    2)group by执行后(有聚合函数),group by后面的字段在结果中一定是唯一的,也就不需要针对这个字段用distinct;

    展开全文
  • 随后我去百度了一下sql关键字执行顺序,似乎就有了答案。(引用:https://blog.csdn.net/qq_36381855/article/details/80051265) 原来where是在select之前执行的,意思就是where后面的条件,那些字段必须是前面...

    起因是学习群里有朋友提了一个问题,大概意思是这样子的:

     

    首先用时间函数对于表中的ARRIVE_TIME进行相减操作,然后再获得需要的与之对应的数据

    比如,我想查找表中ARRIVE_TIME距离今天2天的数据

    我的第一反应就是

    select *,DATEDIFF(now(),bbd.ARRIVE_TIME  ) days from mappertest.bs_business_details bbd where bbd.days  = 2

    很遗憾的是反馈出来的是Unknown column

    那么这是为什么呢?不是已经查出了days嘛?为什么不能用where去判断?

    随后我去百度了一下sql关键字的执行顺序,似乎就有了答案。(引用:https://blog.csdn.net/qq_36381855/article/details/80051265

    原来where是在select之前执行的,意思就是where后面的条件,那些字段必须是前面表中已经有的字段,或者是联表中的字段,而不能是通过某些函数、方法计算出来的字段,where是查找不到的;

    如果非要使用where进行查询那么我个人的理解是先将查询到的数据搭建为一张临时表,再在临时表中进行查找,代码如下:

    select
    	*
    from
    	(
    	select
    		*, DATEDIFF(now(), bbd.ARRIVE_TIME ) days
    	from
    		mappertest.bs_business_details bbd ) t
    where
    	t.days = 628

    结果:

    但是这种方法看起来难免有点笨重,群友提供了一种新的解决办法:

    select
    	*,
    	DATEDIFF(now(), bbd.ARRIVE_TIME ) days
    from
    	mappertest.bs_business_details bbd
    having
    	days = 628


    结果又正常了,但是由上图我们可知having的执行顺序也是在select之前的,按理来说会跟where关键字一样报找不到对应列的错误,那么为什么可以呢?

    MySQL额外提供了这种场景的解决方案,详细方案可以看官方文档:https://dev.mysql.com/doc/refman/5.7/en/select.html

     

     

    展开全文
  • SQL各个关键字执行顺序: (8)SELECT(9)DISTINCT <select_list> (1)FROM <left_table> (3)<join_type> JOIN <right_table> (2)ON <join_condition> (4)WHERE <where_...
  • 一、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 二....
  • 但是,在实际当中,数据库不一定会按照 JOIN、WHERE、GROUP BY 的顺序来执行查询,因为它们会进行一系列优化,把执行顺序打乱,从而让查询执行得更快,只要不改变查询结果。
  • 原因:性能低,执行时间太长,等待时间太长,sql语句欠佳,连接查询,索引失效,服务器参数设置不对 编写过程: select...dinstinct .. from ..join ..on ..where..group by ...having ..order by ..limit .. ...
  • 书写顺序和执行顺序 书写sql语句时各关键字的顺序: select from where group by having order by 执行顺序: from where group by having select order by 参考:
  • sql关键字的解释执行顺序

    万次阅读 2013-03-17 14:49:53
    有一次笔试考到了关于SQL关键字执行顺序的知识点。 我们做软件开发的,大部分人都离不开跟数据库打交道,特别是erp开发的,跟数据库打交道更是频繁,存储过程动不动就是上千行,如果数据量大,人员流动大,那么我么...
  • 一、SQL语句关键字的定义顺序 1 SELECT DISTINCT <select_list> 2 FROM <left_table> 3 <join_type> JOIN <right_table> 4 ON <join_condition> 5 WHERE <where_condition> 6...
  • SQL 关键字执行优先级

    2021-08-13 16:24:19
    一、SQL执行顺序 FORM JOIN ON WHERE GROUP BY AVG( ),SUN( ) HAVING SELECT DISTINCT ORDER BY LIMIT
  • 详细请看: https://www.cnblogs.com/solvit/p/9977952.html
  • 上代码 SELECT DISTINCT player_id, player_name, count(*) as num #顺序5 FROM player JOIN team ON player.team_id = team.team_id #顺序1 WHERE height > 1.80 #顺序2 ...上面这段SQL有很多个关键字
  • MySQL 关键字执行顺序

    千次阅读 2018-06-03 19:15:04
    SQL语句中每个关键字都会按照顺序往下执行,而每一步操作,会生成一个虚拟表,最后的虚拟表就是最终结果。 基本sql 语句如下 : (8)SELECT (9)DISTINCT &lt;select_list&gt; (1)FROM &lt;left_...
  • 一个SQL语句往往会产生多个临时视图,那么这些关键字执行顺序就非常重要了,因为你必须了解这个关键字是在对应视图形成前的 字段进行操作还是对形成的临时视图进行操作,这个问题在使用了别名的视图尤其重要。...
  • sql语句关键字执行顺序 关于sql关键字的执行顺序 Select,where,group by,order by四个关键字的先后顺序 Where > select Group by > select Select > order by Where> group by 最终结论: ...
  • 一个完整的SQL查询如下: SELECT DISTINCT column, AGG_FUNC(column_or_expression), … FROM mytable JOIN another_table ON mytable.column = another_table.column WHERE constraint_expression GROUP BY ...
  • sql语句关键字顺序

    2020-05-06 15:53:45
    sql语句关键字顺序: select——from——join on——where——group by——order by——having——limit sql语句执行顺序: from——join on——where——group by——select | having——order by——limit ...
  • sql关键字执行顺序

    千次阅读 2018-08-07 13:55:41
    sql语句关键词的执行顺序:from —&amp;amp;gt; on —&amp;amp;gt; outer(join) —&amp;amp;gt; where —&amp;amp;gt; group by —&amp;amp;gt; cube|rollup —&amp;amp;gt; having —&...
  • SQL查询语句关键字执行顺序 总结 关键字 SELECT 列名,此时可以为列名起别名,列名之间用逗号隔开 FROM from子句返回初始结果集 WHERE 记录筛选条件,子句排除不满足搜索条件的行 GROUP BY 分组字段列表,...
  • Spark SQL执行流程解析之 sql执行顺序

    千次阅读 2019-08-11 22:57:32
    Spark Sql 关键字执行顺序Sql执行顺序类似: 1.先将from前两表做笛卡尔积加载进来形成虚拟表vt1, 2.on条件后为真的插入虚拟表形成vt2, 如果包含多个表,重复操作, 完成所有数据加载后, 开始对形成的大虚拟表vt2...
  • SQL关键字查询顺序

    2015-04-07 09:30:28
    有一次笔试考到了关于SQL关键字执行顺序的知识点。 我们做软件开发的,大部分人都离不开跟数据库打交道,特别是erp开发的,跟数据库打交道更是频繁,存储过程动不动就是上千行,如果数据量大,人员流动大,那么我...
  • 写在前面:最近的工作主要是写SQL脚本,在编写过程中对SQL执行和解析过程特别混乱不清,造成了想优化却无从下手。为此专门在网上找博文学习,并做了如下总结。 1、查询中常用到的关键词有: SELECT、FROM、...
  • sql关键字_SQL关键字

    2020-07-13 08:14:52
    sql关键字SQL keywords are the reserved words for SQL operations. These Keywords are used across SQL version for different functionalities. SQL关键字是SQL操作的保留字。 这些关键字在SQL版本中用于不同的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 97,909
精华内容 39,163
关键字:

sql关键字执行顺序