Heim >Datenbank >MySQL-Tutorial >对Oracle中group语句的浅显理解

对Oracle中group语句的浅显理解

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-06-07 17:24:45962Durchsuche

Oracle为我们设置了一个非常好的参考,那就是scott用户和其中的员工表。今天就从emp表入手,共同研究研究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行数据。这样的思路下,我们就可以明白,查询到的数据必须有分组的意义。

linux

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn