본문 바로가기

oracle23

[Oracle] LISTAGG 데이터를 가지고 올 때 여러 행을 하나의 컬럼으로 가져와야할 경우가 있습니다. 이때 사용하는 것이 LISTAGG 함수입니다. 사용방법은 다음과 같습니다. SELECT LISTAGG(가져올컬럼, 구분자) WITHIN GROUP (ORDER BY 순서컬럼) 예를 들어 보겠습니다. 먼저 다음과 같이 데이터를 삽입하겠습니다. INSERT INTO USER (USER_NAME, FAVORITE_FOOD) VALUES('홍길동', '마라샹궈'); INSERT INTO USER (USER_NAME, FAVORITE_FOOD) VALUES('홍길동', '라면'); INSERT INTO USER (USER_NAME, FAVORITE_FOOD) VALUES('홍길동', '햄버거'); INSERT INTO USER (USE.. 2019. 8. 4.
[Oracle] Merge문 사용 UPDATE와 INSERT를 동시에 처리하고 싶은 경우 MERGE문을 사용하면 원하는 조건에 맞는 행은 UPDATE를, 조건에 맞지 않는 행은 INSERT를 할 수 있습니다. 즉, 이미 존재하는값은 UPDATE, 신규로 입력된 값은 INSERT합니다. MERGE INTO CUSTOMER C USING ( SELECT USERNO , USERNAME , ADDRESS , PHONE FROM NEW_JOIN WHERE INPUT_DATE = '20170724' ) N ON ( C.USERNO = N.USERNO) WHEN MATCHED THEN UPDATE SET C.USERNAME = N.USERNAME , C.ADDRESS = N.ADDRESS , C.PHONE = N.PHONE WHEN NOT MATC.. 2019. 7. 18.
[Oracle] 조인 방법 (use_nl, use_hash, use_merge) 만약 각각의 결합 알고리즘에 대해서 숙지를 하지 않으셨다면 이 앞절의 결합알고리즘과 성능을 참고해주세요. 이번 포스팅에서는 어떻게 힌트절에 테이블 조인 방법을 지정하는지에 대해서 간단한 예제만 첨부하겠습니다. SELECT /*+ ordered use_nl(D E)*/ E.DEPTNO , E.EMPNO , D.DNAME FROM DEPT D , EMP E WHERE D.DEPTNO = E.DEPTNO ; SELECT /*+ ordered use_hash(D E)*/ E.DEPTNO , E.EMPNO , D.DNAME FROM DEPT D , EMP E WHERE D.DEPTNO = E.DEPTNO ; SELECT /*+ ordered use_merge(D E)*/ E.DEPTNO , E.EMPNO , D... 2019. 6. 24.
[Oracle] 테이블 조인 튜닝 (ordered, leading) 1.ordered ordered 힌트는 FROM 절에서 기술한 테이블 순서대로 조인합니다. 조인 순서에 따라 실행 계획이 달라지는 것을 볼 수 있습니다. SELECT /*+ ordered */ E.DEPTNO , E.EMPNO , D.DNAME FROM DEPT D , EMP E WHERE D.DEPTNO = E.DEPTNO ; SELECT /*+ ordered */ E.DEPTNO , E.EMPNO , D.DNAME FROM EMP E , DEPT D WHERE D.DEPTNO = E.DEPTNO ; 2. leading leading 힌트 안에 쓴 테이블 순서대로 조인합니다. leading도 위와 마찬가지로 실행 계획을 정할 수 있습니다. SELECT /*+ leading(D E) */ E.DEPTNO.. 2019. 6. 24.
[Oracle] 결합알고리즘과 성능 1. Nested Loops SQL에서 결합 연산을 수행할 때 내부적으로 선택되는 알고리즘을 바탕으로 결합에 대해서 알아보겠습니다. 결합 알고리즘의 가장 기본이되는 Nested Loops는 이름 그대로 중첩 반복을 사용하는 알고리즘입니다. SQL에서 결합은 한 번에 두 개 의 테이블만 결합하므로 본질적으로 이중 반복과 같은 의미입니다. ● 결합 대상 테이블에서 레코드를 하나씩 반복해가며 스캔합니다. 이 테이블을 구동테이블 또는 외부 테이블이라고 부릅니다. 다른 테이블은 내부 테이블이라고 합니다. ● 구동 테이블의 레코드 하나마다 내부 테이블의 레코드를 하나씩 스캔해서 결합 조건에 맞으면 리턴합니다. ● 이러한 작동을 구동 테이블의 모든 레코드에 반복합니다. ● 한 번의 단계에서 처리하는 레코드 수가 적으.. 2019. 6. 24.
[Oracle] 집계와 조건 분기 1. 집계와 조건 분기 집계를 수행하는 쿼리를 작성할 때, 쓸데없이 길어지는 경우를 자주 볼 수 있습니다. 다음과 같은 Population 테이블을 생각해 봅시다. 성별 1은 남자, 2는 여성을 의미한다고 가정하겠습니다. prefecture(지역 이름) sex(성별) pop(인구) 성남 1 60 성남 2 40 수원 1 90 수원 2 100 광명 1 100 광명 2 50 일산 1 100 일산 2 100 용인 1 20 용인 2 200 다음이 우리가 원하는 결과 입니다. 2. UNION을 사용한 집계 절차 지향적으로 문제를 풀 때 남성의 인구를 지역별로 구하고, 여성의 인구를 지역별로 구한 뒤 합치는 방법을 생각할 것 입니다. 남성과 여성의 인구가 별도의 레코드로 나오게 됩니다. 그리고 GROUP BY를 사용.. 2019. 6. 10.