group by及相关拓展

本文讲述了SQL中的GROUPBY功能,包括其与WHERE和HAVING子句的配合,Oracle和MySQL之间的区别,以及SQL语句的执行顺序。强调了在不同数据库系统中正确使用GROUPBY的关键性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这两天嘎嘎写sql啊,然后嘎嘎载跟头,特别是那个group by,谁让咱没正儿八经实践过oracle呢,参考链接在末尾哈

group by

分组函数,对by后面的字段进行一个分组,即后面一个字段就按照该字段分组,两个字段就把两个字段当成一组进行分组,查询出来的数据不会重复(自带去重效果,但是论执行时间还是distinct函数更加快速)

是和聚合函数搭配的

当在一个SQL中同时使用where和group by和having子句时,其执行顺序为:where>group by>having。

同时where子句作用于表或者视图,having子句作用于组,having子句必须作用在group by之后。

而group by子句必须放在where子句之前

一般情况下where,group by,having三者并不会连用,而是group by和另两个进行一个搭配,因为

group by子句用于分组数据,where子句用于筛选行级数据,而having子句用于筛选分组数据

oracle和mysql在该函数上的区别

select * from table group by id;

这条sql语句可以用在mysql中而无法用在oracle中,因为**select子句后的任一非聚合函数字段都应来源于group by 分组语句后,否则语法会编译不通过。**简单点理解就是没有使用聚合函数的列都得出现在group by之后。问就是今天在这里猛猛栽跟头

拓展

where

条件查询,后跟筛选条件,筛选条件可以分为以下三类:

  1. 按条件表达式筛选,>,=这些条件运算符
  2. 按照逻辑表达式筛选,and,or这些逻辑运算符
  3. 模糊查询,like,in这些模糊查询关键字

where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。

having

在oracle中一定要结合group by使用,在mysql中没有强制要求一定

having函数后面可以接聚合条件参数,也就是聚合函数+一些运算符和字段,用来弥补where语句不能搭配聚合函数的缺陷

having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。

sql语句执行顺序

这个就很重要了,毕竟是写sql逻辑顺序的一个关键点

  1. from子句:从数据库中选择要查询的表,并进行必要的连接操作。

  2. join子句:如果在 from子句中使用了连接操作(如 inner join、left join等),则执行连接操作并获取匹配的行。

  3. where子句:根据指定的条件筛选行级数据。

  4. group by子句:按照指定的列进行分组。

  5. having子句:对分组后的结果进行筛选。

  6. select子句:选择要返回的列或表达式。

  7. distinct:如果有使用distinct关键字,则对结果进行去重操作,保留唯一值。

  8. order by子句:按照指定的列对结果进行排序。

  9. limit(或类似的操作):如果有使用限制或分页等操作,根据指定的条件限制结果集的大小。

  10. offset(或类似的操作):如果有使用偏移量操作,跳过指定数量的结果行。

    我这边比较简短,想要更详细的可以参考这个链接(图解 SQL 执行顺序,通俗易懂! (qq.com)),并且人家带图,更加容易理解,我的这个主要好记

参考链接

Oracle分组查询group by的用法及讲解 (baidu.com)

oracle group by 的各种用法_M_Jack的博客-优快云博客

一文讲懂SQL条件子句WHERE - 知乎 (zhihu.com)

SQL的having函数用法以及与where函数的区别_sql对查询结果进行条件限制having_小白修炼晋级中的博客-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值