在sql中select的执行顺序

<select{[distinct |all] columns |*}>

[into table_name]

<from {tables |views | other select}>

[where conditions]

[group by columns]

[having conditions]

[order by columns]

[fetch first class]

[union<select query clause>]

在上面的语法中共有九个句子,他们的功能分别如下:

select子句:用于选择数据表,视图中的列;

into 子句:用于将原表的结构和数据插入到新表中;

from子句:用于指定数据来源,包括表,视图和其他的select语句;

where子句:用于对检索的数据进行筛选;

group by:用于对检索的结果进行分组显示;

having子句:用于从使用group by子句分组后的查询结果中筛选数据行;

order by:用于对结果集进行排序(包括升序和降序)

fetch first:用于返回结果集的行数;

union:用于连接两条select查询语句。

说明:1.union all对两张表中的数据进行合并,它和union的不同之处在于,union all显示的是所有合并的数据包括重复的,而union只显示不重复的数据

2.group by 子句经常和聚集函数一起使用,如果select子句中包含聚集函数,则计每组的总值,当用户指定order by 时,选择列中任一非聚集表达式内的

所有列都应包含在group by 中

例如:select 学号,avg(成绩) 平均成绩 from 成绩表

where 学号 in(select 学号 from 学生表 where 专业=‘学前教育’)

group by 学号

having avg(成绩)>=62

以上的sql的执行顺序如下:

1.首先执行where查询条件中的select,得到学前教育专业所有学生的学号集合

2.然后对‘成绩表’中的每条记录,判断‘学号’字段值是否在前面所求的‘学号’的集合中,不在,跳过该记录,继续处理下一条记录,若在,加入where的结果集

3.对成绩表筛选完后,按‘学号’进行分组,再在各分组记录中选出‘平均成绩大于等于62’的记录,从而形成最后的结果集。

带with rollup 关键字的group by子句,使用此关键字包含汇总总行

带with cube关键字的group by子句中的各列的所有可能组合均产生汇总行

转载于:https://www.cnblogs.com/yinghuanan/p/10037955.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值