2013년 7월 30일 화요일

[SQL 팁]CASE를 활용한 SQL문장의 통합(오엔제이프로그래밍,오라클,자바실무교육)

1.       개요
동일한 테이블을 사용하고 WHERE 조건이 비슷한 유형으로 전개되는 SQL 문은 하나로 통합될 수 있음을 유의하고 아래 예를 참고하자.


오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷  실무전문 강의)



[첫번째 SQL]
SQL> select max(empno) from emp3
  2  where deptno > 10;

MAX(EMPNO)
----------
      7902

[두번째 SQL]
SQL>  select count(empno) from emp3
  2   where deptno > 10
  3  and   sal > 2000;

COUNT(EMPNO)
------------
     2097152


동일한 테이블에서 비슷한 조건이면서 하나는 MAX 값, 하나는 COUNT 값을 구하는 것이다. 두 번째 SQL 문의 sal > 2000 을 제외하고 같은 조건 절을 갖고 있다는 것을 알 수 있다.

2) 문제점

하나의 SQL 문으로 통합할 수 있음에도 2 개로 SQL로 나누어 수행하였다.

3) 해결 방안

위의 경우 CASE를 사용하면 쓰면 두 개의 SQL을 하나로 만들어 테이블을 한 번 액세스 하게 할 수 있다.  다음과 같이 CASE를 쓰면 SAL>2000 인 경우 계속 1을 더해 줌으로서 전체에 SAL > 2000 값이 몇 개 있는지 COUNT 해주는 것과 전체 COUNT 값도 알 수 있다.  이와 같이 한 번에 테이블을 액세스 할 수 있는 SQL 문을 쓰면 테이블을 두 번에 걸쳐 읽을 것을 한 번 읽고도 처리할 수 있으므로 보다 더 효율적인 프로그램이 되는 것이다.


SQL>  select max(empno), sum(case when sal>2000 then 1 else 0 end)
  2   from emp3
  3  where deptno > 10;

MAX(EMPNO) SUM(CASEWHENSAL>2000THEN1ELSE0END)
---------- ----------------------------------
      7902                            2097152



[출처]오라클자바커뮤니티



댓글 없음:

댓글 쓰기