Welcome 微信登录

首页 / 数据库 / MySQL / 对Oracle中group语句的浅显理解

Oracle为我们设置了一个非常好的参考,那就是scott用户和其中的员工表。今天就从emp表入手,共同研究研究group分组的用法。
 SQL> select * from emp
 2  ;
 
EMPNO ENAME      JOB       MGR HIREDATE          SAL      COMM DEPTNO
 ----- ---------- --------- ----- ----------- --------- --------- ------
  7369 SMITH      CLERK      7902 1980-12-17   800.00             20
  7499 ALLEN      SALESMAN 7698 1981-2-20   1600.00    300.00   30
  7521 WARD     SALESMAN 7698 1981-2-22   1250.00    500.00   30
  7566 JONES      MANAGER    7839 1981-4-2      2975.00             20
  7654 MARTIN   SALESMAN 7698 1981-9-28   1250.00 1400.00   30
  7698 BLAKE      MANAGER    7839 1981-5-1      2850.00             30
  7782 CLARK      MANAGER    7839 1981-6-9      2450.00             10
  7788 SCOTT      ANALYST    7566 1987-4-19   3000.00             20
  7839 KING     PRESIDENT     1981-11-17    5000.00             10
  7844 TURNER   SALESMAN 7698 1981-9-8      1500.00      0.00   30
  7876 ADAMS      CLERK      7788 1987-5-23   1100.00             20
  7900 JAMES      CLERK      7698 1981-12-3      950.00             30
  7902 FORD     ANALYST    7566 1981-12-3   3000.00             20
  7934 MILLER   CLERK      7782 1982-1-23   1300.00             10
 
14 rows selected
 
这里我们先对group by 函数进行少许的测试。SQL>
SQL> select deptno from emp;
 
DEPTNO
 ------
   20
   30
   30
   20
   30
   30
   10
   20
   10
   30
   20
   30
   20
   10
 
14 rows selected
 
SQL>
SQL>
SQL> select deptno from emp group by deptno;
 
DEPTNO
 ------
   30
   20
   10
 
SQL>
SQL> select job from emp group by job;
 
JOB
 ---------
 CLERK
 SALESMAN
 PRESIDENT
 MANAGER
 ANALYST
 
SQL> select deptno,job from emp
  2  group by deptno,job;
 
DEPTNO JOB
 ------ ---------
   20 CLERK
   30 SALESMAN
   20 MANAGER
   30 CLERK
   10 PRESIDENT
   30 MANAGER
   10 CLERK
   10 MANAGER
   20 ANALYST
 
9 rows selected
 
从道理上来讲,(1式)select detpno from emp; 该语句的意思是找到emp 这张表,但是只显示detpno这个列,所以,结果集全是表中原封不动的数据,但是只不过隐藏了一些列而已。但是加入group by语句之后,即(2式)elect deptno from emp group by deptno; 同样是找到emp这张表,同样是列出detpno这个列,出结果后再被group by 即对1式进行了后续操作,操作便是对1式的结果集按deptno进行分组,分组的结果是取消了很多重复的数据。用这样的思路,select job ,deptno from emp gorup by job ,deptno。意味着先从emp中找到job 和 deptno列。如图,找到14行数据,之后按job和deptno进行分组。即意味着 以 {job,deptno} 的二元关系进行匹配。这样便会取消几个2元关系完全一样的数据,所以出现了9行数据。这样的思路下,我们就可以明白,查询到的数据必须有分组的意义。Oracle归档空间不足导致 imp 大数据假死Linux操作系统中Oracle 11g数据库安装过程图文详解相关资讯      Oracle语句  Oracle入门基础教程  group语句 
  • Oracle数据库的基本操作语句  (02/09/2015 10:29:04)
  • 查询Oracle 中死事务的语句  (08/01/2014 11:05:37)
  • 获取Oracle SQL语句中绑定变量值的  (07/17/2014 08:07:40)
  • Linux x86 and x86-64 系统中的  (08/05/2014 10:12:29)
  • Oracle 中极易混淆的几个 NAME 的  (07/29/2014 21:04:17)
  • Oracle用户信息查询操作语句  (08/10/2013 10:27:01)
本文评论 查看全部评论 (0)
表情: 姓名: 字数