SQL 中 SELECT 语句的执行顺序

好像自已在书写 SQL 语句时由于不清楚各个关键字的执行顺序, 往往组织的 SQL 语句缺少很好的逻辑, 凭感觉 “拼凑” ( 不好意思, 如果您的 SQL 语句也经常 “拼凑”, 那您是不是得好好反省一下呢?, 呵呵). 确实是爽了自己, 可苦了机器, 服务器还需要在我们的杂乱

     好像自已在书写 sql 语句时由于不清楚各个关键字的执行顺序, 往往组织的 sql 语句缺少很好的逻辑, 凭感觉 “拼凑” ( 不好意思, 如果您的 sql 语句也经常 “拼凑”, 那您是不是得好好反省一下呢?, 呵呵). 确实是爽了自己, 可苦了机器, 服务器还需要在我们的杂乱无章的 sql 语句中寻找它下一句需要执行的关键字在哪里. 效率嘛, 由于我们的感觉神经对秒以下的变化实在不敏感, 暂且就认为自已写的 sql 顺序无关紧要, “反正没什么变化!”, 呵呵.其实服务器对每句 sql 解析时间都会有详细记录的, 大家可以看一下自已按习惯写的 sql 和按标准顺序写的sql解析时间差别有多大.
   因此, 建议大家在平时工作中 sql 语句按标准顺序写, 一是专业, 二是实用, 呵呵, 不过我觉得最主要的是心里感觉舒服.
   标准的 sql 的解析顺序为:
   (1).from 子句, 组装来自不同数据源的数据
   (2).where 子句, 基于指定的条件对记录进行筛选
   (3).group by 子句, 将数据划分为多个分组
   (4).使用聚合函数进行计算
   (5).使用 having 子句筛选分组
   (6).计算所有的表达式
   (7).使用 order by 对结果集进行排序

   举例说明: 在学生成绩表中 (暂记为 tb_Grade), 把 “考生姓名”内容不为空的记录按照 “考生姓名” 分组, 并且筛选分组结果, 选出 “总成绩” 大于 600 分的.
   标准顺序的 SQL 语句为:
   select 考生姓名, max(总成绩) as max总成绩
   from tb_Grade
   where 考生姓名 is not null
   group by 考生姓名
   having max(总成绩) > 600
   order by max总成绩
  
   在上面的示例中 SQL 语句的执行顺序如下:
   (1). 首先执行 FROM 子句, 从 tb_Grade 表组装数据源的数据
   (2). 执行 WHERE 子句, 筛选 tb_Grade 表中所有数据不为 NULL 的数据
   (3). 执行 GROUP BY 子句, 把 tb_Grade 表按 “学生姓名” 列进行分组
   (4). 计算 max() 聚集函数, 按 “总成绩” 求出总成绩中最大的一些数值
   (5). 执行 HAVING 子句, 筛选课程的总成绩大于 600 分的.
   (7). 执行 ORDER BY 子句, 把最后的结果按 “Max 成绩” 进行排序.

————————————————————————————–

我想请哪位高人分析一下以下几种SQL语句类型的执行顺序.SQL语句原型为;
1.select 列列表 from 表列表名/视图列表名 where 条件.
2.select 列列表 from 表列表名/视图列表名 where 条件 group by (列列表) having 条件
3.select 列列表 from 表列表名/视图列表名 where 条件 group by (列列表) having 条件 order by 列列表
4.select 列列表 from 表1 join 表2 on 表1.列1=表2.列1…join 表n on 表n.列1=表(n-1).列1 where 表1.条件 and 表2.条件…表n.条件
请问他们执行的时候顺序是怎样的呢?比如说第1条的意思是说:是先根据where条件从from表列表中选出满足条件的结果集,然后在从结果集中选出列列表中的列记录集

 ,虚拟主机,香港服务器,美国空间

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/1841474.html

(0)
上一篇 2025年2月21日 23:39:03
下一篇 2025年2月21日 23:42:34

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 浅谈mysql配置优化和sql语句优化

    做优化,我在这里引用淘宝系统分析师蒋江伟的一句话:只有勇于承担,才能让人有勇气,有承担自己的错误的勇气。有承担错误的勇气,就有去做事得勇气。无论做什么     做优化,我在这里引用淘宝系统分析师蒋江伟的一句话:只有勇于承担,才能让人有勇气,…

    数据库 2025年2月22日
    100
  • Oracle使用select语句复制表

    Oracle使用select语句复制表,要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以 1.INSERT INTO SELECT语句 语句形式为:Insert into Ta…

    数据库 2025年2月22日
    100
  • 求SQL语句递归的算法

    表结构是这样的 部门 上级部门 A B B C C D A A B B C C 求一条SQL语句,根据A查其上级部门,查询结果为 上级部门 B C D ============================================…

    数据库 2025年2月22日
    100
  • 基于游标的定位DELETE/UPDATE语句

    如果游标是可更新的(也就是说,在定义游标语句中不包括Read Only 参数),就可以用游标从游标数据的源表中DELETE/UPDATE行,即DELETE/UPDATE基于游标指针的当前位置的操作; 举例: –删除当前行的记录 …

    数据库 2025年2月22日
    100
  • sql语句优化及后一条减前一条

    sql语句优化: 1。表加索引 2。少用like,直接用=所有值 3. where语句把能大量筛查的条件写在前面 4.数据量大时,参与计算的值相同时只取一条 后一条减前一条, select houec,[houdate],houtimes …

    数据库 2025年2月22日
    100
  • SQL语句一之建库

    SQL语句一之建库 USE master –转到系统表 go IF EXISTS(SELECT * FROM sysdatabases WHERE name =’Test’) –查询是否存在T…

    数据库 2025年2月22日
    100
  • 利用SQL语句给字段加注释

    1 EXEC sys.sp_addextendedproperty N , N,N , N , N , N, N , N 1 EXEC sys.sp_addextendedpropertyN,N,N,N,N,N, N,N,

    数据库 2025年2月22日
    100
  • Sql Server 语句

    SELECT stock.IdStock,stock.Descr .. stock WHERE stock.IdStock NOT IN ( ..) SELECT stock.IdStock,stock.Descr.. stockWHERE…

    数据库 2025年2月22日
    100
  • like语句百分号前置会使用到索引吗?

    like语句百分号前置会使用到索引吗? 前几天看了这篇文章: 看完了之后,我很想知道这篇文章是不是临时工写的?还是网站的主人写的,网站的主人的微博我都有关注(在微博里私信过) 是某个公司的DBA,这里先不管他是不是临时工写的,今天我也研究一…

    数据库 2025年2月22日
    100
  • SELECT COUNT(1) 和SELECT COUNT(*)哪个性能好?

    SELECT COUNT(1) 和SELECT COUNT(*)哪个性能好? 今天遇到某人在我以前写的一篇文章里问到 如果统计信息没来得及更新的话,那岂不是统计出来的数据时错误的了 这篇文章的地址: 之前我以为SELECT COUNT(*)…

    数据库 2025年2月22日
    100

发表回复

登录后才能评论