對Oracle中group語句的淺顯理解

來源:互聯網
上載者:User

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行資料。這樣的思路下,我們就可以明白,查詢到的資料必須有分組的意義。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.