HOME
[종료]대용량 데이터베이스 스터디
2009년 상반기 대용량데이터베이스 스터디
대용량 데이터베이스 솔루션 2
2. UNION,GROUP BY 데이터 연결
2. 양쪽 outer join의 해결
특정 부서(AA)의 모든 입출금 내역 검색전제 ⓐ 예적금원장(ACCOUNT)을 기준으로 입금내역(INPUT)과 출금내역(OUTPUT)이 방사형으로 연결 전제 ⓑ 입금과 출금 내역을 월별로 집계하여 비교 전제 ⓒ 방사형 구조 특징 - "M:M"조인이 발생하므로 각각의 집합을 먼저 group by 하여 "1:1"로 조인의 범위를 줄임 조인 이용한 입출금내역 조회인출일과 입금일이 연결되지 않을 경우를 위해 outer join을 수행 - 한쪽 outer join을 수행하였으므로 수행결과는 잘못 되었음 outer join query 정상적인 결과를 얻기 위해서 양쪽 outer join을 수행 : 임시 집합 추가해서 해결month_dual 테이블 생성 : 일자만 모은 dummy테이블. ⇒ date type column + varchar type column으로 구성하여 향후 몇 십년 정도의 데이터를 모아서 관리하며 인덱스 필요함 임시 집합(x) 추가 union & outer join query union과 group by 이용한 입출금내역 조회outer join사용하지 않음 "to_number(null) out_amt / to_number(null) inp_amt"에서 "0"대신 null 사용 ⇒ null을 사용하면 sum 연산 대상에서 제외되므로 그만큼 연산 처리 감소 ⇒ "0"이 있으면 0의 개수만큼 연산 처리함 ⇒ null은 문자 타입으로 간주 되므로 to_number 함수를 사용하여 데이터 타입을 맞춤 union 주의 사항 반드시 상호간의 컬럼 개수와 타입 일치 각각의 select 문에 구분값을 둠 - group by시 decode로 분리 할 필요가 없으며 decode함수를 제공하지 않는 DBMS에서도 활용가능한 쿼리임 union & group by query 잘못된 사례1. 쿼리문을 단순하게 하기 위해서 where절의 공통조건을 인라인뷰 밖으로 보낸 경우전제 : 인라인뷰 밖에서 부여한 조건이 각각의 select문 안으로 파고들어가 수행 문제점 : 공통 컬럼인 'yyyymm'이 substr로 가공된 컬럼이므로 인덱스 사용 불가 주의 : 인라인뷰 내의 컬럼을 가공시키지 않는다. 잘못된 사례1 query 잘못된 사례2. 형태가 다른 컬럼을 공통화시키기 위해 가공화전제 : 입금내역 테이블의 컬럼은 "년원" 형식, 출금내역 테이블의 컬럼은 "일자" 형식으로 되어 있을 경우 이 두 컬럼을 공통화 시키기 문제점 : "일자" 컬럼을 "년월"에 ?추기 위해 substr로 가공 해결 만약 두 컬럼을 맞춰야 한다면 "년월"컬럼을 "일자"컬럼에 맞춤 between 조건에 의해 두 컬럼은 처리되므로 group by에서 substr로 가공해서 공통화하는 것 권장 group by 절에서 컬럼 가공 : 인덱스 사용과는 무관 자세한 내용은 "3장 인라인 뷰의 활용 9. 상이한 집합의 통일" 참고 잘못된 사례2 query
HOME
[종료]대용량 데이터베이스 스터디
2009년 상반기 대용량데이터베이스 스터디
대용량 데이터베이스 솔루션 2
2. UNION,GROUP BY 데이터 연결
2. 양쪽 outer join의 해결