精华内容
下载资源
问答
  • 这里只列出SQL书写顺序,至于执行顺序,可参考SQL语句执行顺序-萌小Q-博客 SQL调优 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN &...

    在使用MyBatis的时候,经常需要自己手写SQL,多条件查询的时候很容易只关注条件的拼接,而不注意limit或者group by 的顺序。这里只列出SQL书写顺序,至于执行顺序,可参考SQL语句执行顺序-萌小Q-博客
    SQL调优

    SELECT DISTINCT <select_list>
    FROM <left_table>
    <join_type> JOIN <right_table>
    ON <join_condition>
    WHERE <where_condition>
    GROUP BY <group_by_list>
    HAVING <having_condition>
    ORDER BY <order_by_condition>
    LIMIT <limit_number>
    

    group by 存在是,select中除了聚集函数,所有的基本列必须是group by里存在的;
    having 基本上同group by 一起使用,类似于where,只是having过滤是基于group by分组后的数据,having一般通过select里的聚集函数过滤。

    执行顺序:

    ​ (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

    展开全文
  • 1.书写顺序 (8)SELECT (6) avg,sum (9)DISTINCT <select_list> (1)FROM <table> (3)<join_type> JOIN <join_table> (2)ON <join_condition> (4)WHERE <where_condition> (5)...

    1.书写顺序

    (8)SELECT
    (6) avg,sum
    (9)DISTINCT <select_list>
    (1)FROM <table>
    (3)<join_type> JOIN <join_table>
    (2)ON <join_condition>
    (4)WHERE <where_condition>
    (5)GROUP BY <group_by_list>
    (7)HAVING <having_condition>
    (10)ORDER BY <order_by_condition>
    (11)LIMIT <limit_number>

    2.执行顺序

    每个语句前面的数字代表执行的顺序

    具体流程如下:

    第一步:首先对from子句中的前两个表执行一个笛卡尔乘积,此时生成虚拟表 vt1(选择相对小的表做基础表)。 
    第二步:接下来便是应用on筛选器,on 中的逻辑表达式将应用到 vt1 中的各个行,筛选出满足on逻辑表达式的行,生成虚拟表 vt2 。
    第三步:如果是outer join 那么这一步就将添加外部行,left outer jion 就把左表在第二步中过滤的添加进来,如果是right outer join 那么就将右表在第二步中过滤掉的行添加进来,这样生成虚拟表 vt3 。

    第四步:如果 from 子句中的表数目多余两个表,那么就将vt3和第三个表连接从而计算笛卡尔乘积,生成虚拟表,该过程就是一个重复1-3的步骤,最终得到一个新的虚拟表 vt3。 

    第五步:应用where筛选器,对上一步生产的虚拟表引用where筛选器,生成虚拟表vt4,在这有个比较重要的细节不得不说一下,对于包含outer join子句的查询,就有一个让人感到困惑的问题,到底在on筛选器还是用where筛选器指定逻辑表达式呢?on和where的最大区别在于,如果在on应用逻辑表达式那么在第三步outer join中还可以把移除的行再次添加回来,而where的移除的最终的。举个简单的例子,有一个学生表(班级,姓名)和一个成绩表(姓名,成绩),我现在需要返回一个x班级的全体同学的成绩,但是这个班级有几个学生缺考,也就是说在成绩表中没有记录。为了得到我们预期的结果我们就需要在on子句指定学生和成绩表的关系(学生.姓名=成绩.姓名)那么我们是否发现在执行第二步的时候,对于没有参加考试的学生记录就不会出现在vt2中,因为他们被on的逻辑表达式过滤掉了,但是我们用left outer join就可以把左表(学生)中没有参加考试的学生找回来,因为我们想返回的是x班级的所有学生,如果在on中应用学生.班级='x'的话,left outer join会把x班级的所有学生记录找回(感谢网友康钦谋__康钦苗的指正),所以只能在where筛选器中应用学生.班级='x' 因为它的过滤是最终的。 

    第六步:group by 子句将中的唯一的值组合成为一组,得到虚拟表vt5。如果应用了group by,那么后面的所有步骤都只能得到的vt5的列或者是聚合函数(count、sum、avg等)。原因在于最终的结果集中只为每个组包含一行。这一点请牢记。 

    第七步:应用cube或者rollup选项,为vt5生成超组,生成vt6. 
    第八步:应用having筛选器,生成vt7。having筛选器是第一个也是为唯一一个应用到已分组数据的筛选器。 
    第九步:处理select子句。将vt7中的在select中出现的列筛选出来。生成vt8. 

    第十步:应用distinct子句,vt8中移除相同的行,生成vt9。事实上如果应用了group by子句那么distinct是多余的,原因同样在于,分组的时候是将列中唯一的值分成一组,同时只为每一组返回一行记录,那么所以的记录都将是不相同的。 

    第十一步:应用order by子句。按照order_by_condition排序vt9,此时返回的一个游标,而不是虚拟表。sql是基于集合的理论的,集合不会预先对他的行排序,它只是成员的逻辑集合,成员的顺序是无关紧要的。对表进行排序的查询可以返回一个对象,这个对象包含特定的物理顺序的逻辑组织。这个对象就叫游标。正因为返回值是游标,那么使用order by 子句查询不能应用于表表达式。排序是很需要成本的,除非你必须要排序,否则最好不要指定order by,最后,在这一步中是第一个也是唯一一个可以使用select列表中别名的步骤。 

    第十二步:应用top选项。此时才返回结果给请求者即用户。 


     

    展开全文
  • sql语句的书写顺序: select >> from >> where >> group by >> having >> order by 注意: 1. select和from是必须的; 2. where和having不能同时使用; 3. having和group by联合使用; ...
    sql语句的书写顺序:

    select >> from >> where >> group by >> having >> order by >> limit
    注意:
    1. select和from是必须的;
    2. where和having不能同时使用;
    3. having和group by联合使用;

    sql语句的解析顺序 :

    from >> on>> join >> where >> group by >> having >> select >> distinct >> order by >> limit
    注意:虽然select在having后执行,但是mysql中仍然可以在having中使用select语句定义的别名

    select [ALL | DISTINCT | DISTINCTROW | TOP] 字段
    from[inner join  right join | left join2]
    [on 连接条件]
    [where 条件]
    [group by 分组规则]
    [having 分组条件]
    [order by 排序规则]
    [limit 分页规则]
    
    展开全文
  • ORCALE数据库SQL书写格式 1、大小文字及空格的统一 数据库对象名(表、索引等)和变量全半角小写,其他的SQL文全半角大写,避免不要的空格,如果使用空格只使用半角空格,既保持SQL文的可读性,又尽可能的减少SQL的...
  • SQL查询语句的书写顺序和执行顺序

    千次阅读 2019-12-13 21:59:54
    1、一个完整SQL查询语句的书写顺序 -- "mysql语句编写顺序" 1 select distinct * 2 from 表(或结果集) 3 where … 4 group by …having… 5 order by … 6 limit start,count -- 注:1、2属于最基本语句,必须含有。...
  • SQL书写规范

    千次阅读 2018-05-19 16:25:54
    来源:https://www.cnblogs.com/yangkunlisi/archive/2011/09/14/2176773.html一、SQL书写规范1、 语句中出现的所有表名、字段名全部小写,系统保留字、内置函数名、SQL保留字大写(SQL不区分大小写)。 2、 连接符...
  • 书写优先顺序: (1) SELECT (2) FROM (3) WHERE (4) GROUP BY (5) HAVING (6) ORDER BY (7) LIMIT 例如: SELECT * FROM student WHERE sex = “女” HAVING birthday > ‘2016-12-05’ ORDERBY stuid LIMIT 10; ...
  • 查询语句中select from where group by having order by的执行顺序 1.查询中用到的关键词主要包含六个,并且他们的顺序依次为  select--from--where--group by--having-...与sql语句的书写顺序并不是一样的,而是...
  • SQL书写规范(通用)

    2019-05-27 18:19:40
    SQL语句是访问DB中数据的主要途径和方式,所以SQL书写对访问数据库时的速度和性能起着至关重要的作用。 本文针对SQL日常书写中遇到的一些常见问题和注意事项做说明。 注...
  • sql书写规范

    2020-12-01 10:11:57
    写完SQL先explain查看执行计划(SQL性能优化) 日常开发写SQL的时候,尽量养成这个好习惯呀:写完SQL后,用explain分析一下,尤其注意走不走索引。 explain select userid,name,age from user where userid =10086 ...
  • sql书写顺序

    2019-05-25 17:41:00
    例:select t.* from (select * from t_user where isDelete = 1 limit 0,10) t order by t.qq select from where group by having limit order by  转载于:...
  • sql脚本书写规范

    2019-08-07 01:27:14
    NULL 博文链接:https://beee.iteye.com/blog/2106218
  • 一、sql编写顺序 1、SELECT DISTINCT <select list> 2、FROM <left_table><join_type> 3、JOIN <right_table> ON <join_condition> 4、WHERE <where_condition> 5、...
  • sql书写的执行顺序

    2020-06-06 10:40:59
    SQL书写的执行顺序
  • 1. 书写顺序 按以下的顺序书写sql语句 SELECT 查询列表. FROM 表 1 【连接类型】 JOIN 表2 ON 连接条件 WHERE 筛选条件 GROUP BY 分组列表 HAVING 分组后的筛选条件 ORDER BY 排序的字段 LIMIT 起始的条目索引,...
  • PL/SQL Developer -> tools -> Preferences -> plsql beautifier -> rules file 点击 edit,在打开的窗口中,依次修改各项, 修改后,点击 save 。 保存的位置自己选, 我存的位置是在 PLSQL ...
  • 书写顺序: select 某个字段 from 某个表 where group by having order by (最好养成关键字用大写, 具体数据字段等等用小写的习惯) 查询顺序: from(从哪个表) where(操作哪些符合条件的行) group by(怎么...
  • sql存储过程书写规范例子,可以从本文中参考一些基本的存储过程书写格式.
  • 书写顺序 select -->查询字段–>from–>表名–>where条件–>group by字段–>having条件–>order by 字段 执行顺序 from表–>where条件–>group by 字段 -->having 条件–>select *...
  • SQL语句规范

    2013-05-31 08:47:46
    SQL语句优化指南、写SQL语句时,注意SQL语句的格式、基于DBLINK的查询,要考虑尽量减少网络TRIP。
  • SQL语句书写格式

    千次阅读 2011-12-19 22:33:03
    微软完全可以解析SQL语句并使之成为更有利于开发的格式。  如果有两个表进行连接,INNER(LEFT/RIGHT) JOIN等语句也应该写在一行。另外,建议使用更简单的英文别名代替中文表名。  呵呵,很简单吧?如果有...
  • 设置plsql developer 的sql 书写格式

    千次阅读 2011-06-13 15:41:00
    设置plsql developer 的sql 书写格式 我使用plsql版本是7.1.4 设置方法:PL/SQL Developer -> tools -> Preferences -> plsql beautifier -> rules file点击 edit,在打开的窗口中,依次修改各项, 修改后,点击 ...
  • SQL查询语句的书写顺序、执行顺序和注意事项 1,SQL查询语句常用关键字 select 、from、where、group by、having、order by select :指定查看结果集中的那个列或列的计算结果 from :从哪张表查询数据 where :...
  • SQL语句的书写顺序和解析顺序

    千次阅读 2018-02-06 17:32:52
    sql语句的书写顺序:select ---> from --->where ---> group by ---> having ---> order by 其中where和having是不能同时使用的,并且having和group by 是联合使用的 sql语句的解析顺序 : from --->where --
  • sql书写格式 以及优化! 谁用谁知道,用了都说好!
  • 1.书写顺序 执行顺序

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 41,260
精华内容 16,504
关键字:

sql书写顺序