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
[출처]오라클자바커뮤니티
댓글 없음:
댓글 쓰기