1、sql语句select的执行过程
(1)根据where字句的条件表达式,从from子句指定的基本表或视图中找到满足条件的元组。
(2)再按select子句中的目标列的表达式,选出元组的属性值形成结果表。
(3)如果有group子句,则将结果表按group中指定的列进行分组,该属性列值相等的元组为一组,通常会在每组中作用集函数。
(4)如果group子句带having短语,则只有满足having指定条件的组才输出。
(5)如果有order子句,则将结果表按order子句指定的列升序或降序排序。
2、group by 子句的将查询结果表按某一列或多列分组,值相等的为一组。对查询结果分组的目的是为了细化集函数的作用对象。如果未对查询结果分组,集函数将作用与整个查询结果。
(1)实验说明group的常见操作和错误
实验数据
SQL> select * from student;
ID CLASSNO NAME
---------- ---------- ------------------
1 1 张三
2 1 李四
3 1 王五
4 2 刘六
5 2 钱七
6 2 赵八
已选择6行。
问题1:查出一班的人数?
SQL> select count (*) from student where classno=1 group by classno;
COUNT(*)
----------
3
问题2:查人数的同时能不能把学生姓名也查出来呢?
SQL> select name ,count (*) from student where classno=1 group by classno;
select name ,count (*) from student where classno=1 group by classno
*
ERROR 位于第 1 行:
ORA-00979: 不是 GROUP BY 表达式
可见这个语句满足不了我们的目的,因为我们分组后,我们是对组进行操作,像学生姓名这列不是组能有的性质。
3、巧用 group 分组集函数
(1)问题的提出
SQL> select * from student1;
ID SID SNAME CLASSID D
---------- ---------- ---------- ---------- ----------
1 1 a 1 1
2 1 a 1 2
3 2 b 1 2
问题如下:
只是要生成excle表。只能对数据库做查询操作
想要的结果是:
ID SID SNAME CLASSID D
---------- ---------- ---------- ---------- ----------
1 1 a 1 1
3 2 b 1 2
这个问题怎么解决呢?
想到用distinct
select id ,distnict(sid ),sname , classid ,d from student1
可惜sql不支持distnict这中用法
sql中 只能select distnict id ,sid,sname ,classid ,d from student1
可这样不能满足我们的要求。
(2)巧用 group 分组集函数
SQL> select min(id),sid,sname,classid,min(d) from student1 group by sid,sname,classid;
MIN(ID) SID SNAME CLASSID MIN(D)
---------- ---------- ---------- ---------- ----------
1 1 a 1 1
3 2 b 1 1
分享到:
相关推荐
oracle深入oracle深入oracle深入oracle深入oracle深入oracle深入oracle深入oracle深入oracle深入oracle深入oracle深入
深入理解Oracle Exadata
深入理解Oracle数据库体系结构,大师之作,推荐阅读。
资源名称:深入理解Oracle RAC 12c内容简介:《深入理解Oracle RAC 12c》介绍了Oracle RAC 12c技术的方方面面,涵盖了与RAC技术相关的集群件知识、数据库知识、存储知识、网络知识,并在基于RAC的应用软件设计、优化...
Oracle数据块原理深入理解,带你了解ORACLE底层的知识
深入理解Oracle RAC 12c,数据库的知识,有需要的可以看一下
本文将详细介绍oracle group by语句,以实例进行测试,需要的朋友可以参考下
Oracle中group by用法 在select 语句中可以使用group by 子句将行划分成较小的组,一旦使用分组后select操作的对象变为各个分组后的数据,使用聚组函数返回的是每一个组的汇总信息。 使用having子句 限制返回的...
oracle_11gR2_08 分组查询GROUP BY,模糊查询LIKE
深入理解Oracle Exadata part.pdf
此文档目的帮助更加深入理解 AWR 报表,为 oracle 从业者与技术爱好做性能分析与性 能监控提供参考资料。 文档编写依据: 文档基于 oracle 包源码分析得出。 dbms_swrf_report_internal,test_dbms_workload_...
摘要: 我们知道Oracle通过数据字典来管理和展现数据库信息,...正确理解这部分内容有助于加强我们的oracle学习能力。 本文对Oracle数据字典的关系进行探讨。 接下来我们介绍一下怎样通过数据库本身来学习研究数据库。
书中深入分析了Oracle数据库体系结构,包括文件、内存结构以及构成Oracle数据库和实例的底层进程,利用具体示例讨论了一些重要的数据库主题,同时分析了数据库中的物理结构,如表、索引和数据类型,并介绍采用哪些...
深入理解Oracle RAC 12c(完整书签)深入理解Oracle RAC 12c(完整书签)深入理解Oracle RAC 12c(完整书签)
当我们刚开始学Oracle时,见到group by,常常会来个三连问:为什么要用group by?group by应该怎么用?为什么写了group by运行时会提示“不是单组分组函数;不符合group by语法”?面对这些问题,我都胆战心惊了...
Oracle数据库IO深入分析 Oracle数据库IO深入分析 Oracle数据库IO深入分析 Oracle数据库IO深入分析
想把oracle学好学精,此本书不可少。
开Oracle调优鹰眼,深入理解AWR性能报告1.part3
本文实例讲述了mysql使用GROUP BY分组实现取前N条记录的方法。分享给大家供大家参考,具体如下: MySQL中GROUP BY分组取前N条记录实现 mysql分组,取记录 GROUP BY之后如何取每组的前两位下面我来讲述mysql中GROUP BY...
order_by_、group_by_、having