IT 꿈나무의 일상

[ORACLE] where절과 having절 실습 본문

DB

[ORACLE] where절과 having절 실습

viera 2021. 8. 8. 16:18
반응형

# 실습을 위하여 DEPT와 EMP 테이블을 사용하였습니다.

 

# 테이블 정보

# DEPT TABLE
SQL> SELECT * FROM DEPT;
    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

# EMP TABLE
SQL> select * from emp;
     EMPNO ENAME      JOB              MGR HIREDATE                  SAL       COMM     DEPTNO
---------- ---------- --------- ---------- ------------------ ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80                 800                    20
      7499 ALLEN      SALESMAN        7698 20-FEB-81                1600        300         30
      7521 WARD       SALESMAN        7698 22-FEB-81                1250        500         30
      7566 JONES      MANAGER         7839 02-APR-81                2975                    20
      7654 MARTIN     SALESMAN        7698 28-SEP-81                1250       1400         30
      7698 BLAKE      MANAGER         7839 01-MAY-81                2850                    30
      7782 CLARK      MANAGER         7839 09-JUN-81                2450                    10
      7788 SCOTT      ANALYST         7566 13-JUL-87                3000                    20
      7839 KING       PRESIDENT            17-NOV-81                5000                    10
      7844 TURNER     SALESMAN        7698 08-SEP-81                1500          0         30
      7876 ADAMS      CLERK           7788 13-JUL-87                1100                    20
      7900 JAMES      CLERK           7698 03-DEC-81                 950                    30
      7902 FORD       ANALYST         7566 03-DEC-81                3000                    20
      7934 MILLER     CLERK           7782 23-JAN-82                1300                    10

 

 

# Having 절

- having 절은 그룹함수에 의해 적용된 결과값중에 원하는 조건에 부합하는 자료를 검색할때 사용됩니다.

- 다음은 emp 테이블에서 deptno컬럼으로 그룹지어진 데이터 중

  그룹함수가 사용된 salary 컬럼에 1500이상 데이터를 출력하는 쿼리와 결과문 입니다.

SQL> select deptno, round(avg(sal),1) salary
  2  from emp
  3  group by deptno
  4  having avg(sal) >1500;

    DEPTNO     SALARY
---------- ----------
        30     1566.7
        20       2175
        10     2916.7

 

# Where 절

- where절은 SQL Query문에 대하여 조건을 설정하여 특정 조건에 부합하는 결과값을 얻어낼때 사용됩니다.

- 다음은 emp 테이블에서 Job컬럼 데이터가 SALESMAN 또는 MANAGER인 데이터를 추출하고,

  이를 deptno 컬럼으로 그룹화 시킨 후 Salary가 1500 이상인 데이터에 대한 쿼리 결과입니다.

SQL> select deptno, round(avg(sal),1) salary
  2  from emp
  3  where job='SALESMAN' or job='MANAGER'
  4  group by deptno
  5  having avg(sal) >1500;
  
      DEPTNO     SALARY
---------- ----------
        30       1690
        20       2975
        10       2450

 

# SQL Query 동작 순서

- oracle에서 쿼리를 처리하는 순서는 다음과 같습니다.

- 쿼리 실행시 orcle은 from table절을 통하여 해당 데이터베이스내에 테이블이 존재하는지 확인합니다.

- 그 다음 where절(조건절)을 통하여 해당 테이블의 데이터를 조건에 맞게 필터링을 걸게됩니다.

- 이렇게 필터링된 데이터에 select절을 통하여 보고자 하는 컬럼데이터를 추출합니다

- 간소화된 데이터에 group by절을 통하여 해당 데이터를 그룹화하고

- having절에서 select절에서 그룹함수를 사용한 컬럼에 대하여 필터링을 걸게됩니다. 

SQL> select deptno, round(avg(sal),1) salary       -- 3
  2  from emp                                      -- 1
  3  where job='SALESMAN' or job='MANAGER'         -- 2
  4  group by deptno                               -- 4
  5  having avg(sal) >1500;                        -- 5
반응형
Comments