본문 바로가기

dev/DB23

[DB/ORACLE] PIVOT ( UNPIVOT절 예정 ) --PIVOT 절과 UNPIVOT절 -- PIVOT 절은 행을 열로 회전시키고 -- UNPIVOT절은 열을 행으로 회전 시킨다. -- 기본문법 -- PIVOT[XML] -- ( -- AGGREGATE_FUNCTION (EXPR) [ [AS] ALIAS ] [ , AGGREGATE_FUNCTION(EXPR) [ [AS] ALIAS]] -- FOR { COLUMN | (COLUMN [, COLUMN] ... ) } -- IN ({{{ EXPR | (EXPR [, EXPR]... )} [ [AS] ALIAS]}... | SUBQUERY | ANY [ ,ANY]... }) -- ) -- AGGREGATE_FUNCTION : 집계할 열을 지정 -- FOR절 PIVOT할 열을 지정 -- IN 절 PIVOT할 열값을.. 2022. 12. 2.
[DB/ORACLE] 계층 쿼리 고급 ( 노드제거, 다중 루트 노드, 다중 속성 순환관계, 계층 쿼리와 조인) -- 고급주제 -- 노드제거 : CONNECT BY 절이나 WHERE 절에 조건을 기술하면 조건을 만족하지 않는 노드를 제거할 수 있다. -- 아래 쿼리는 CONNECT BY 절에 EMPNO 7698 조건을 기술 했다 -- CONNECT BY 절에 조건을 기술하면 조건을 만족하지 않는 노드와 해당 노드의 모든 하위 노드가 제거된다. -- 계층 전개시점에 노드가 제거되기 때문에 하위 노드까지 제거되는 것이다. SELECT LEVEL AS LV , EMPNO , LPAD(' ', LEVEL -1, ' ') || ENAME AS ENAME , MGR FROM EMP START WITH MGR IS NULL CONNECT BY MGR = PRIOR EMPNO AND EMPNO 7698; -- 다음은 WHERE .. 2022. 12. 1.
[DB/ORACLE] 계층쿼리 -- 계층 쿼리 -- 계층 쿼리를 사용하면 순환 관계를 가진 데이터를 조회 할 수 있다. -- 순환 관계를 가진 데이터는 계층 구조로 표현할 수 있다. -- 부모 노드 : 현재 노드의 직전 상위 노드 -- 자식 노드 : 현재 노드의 직후 하위 노드 -- * 하나의 자식 노드는 하나의 부모 노드만 가질 수 있다. -- 노드는 부모노드와 자식노드의 존재 여부에 따라 -- 루트노드, 브랜치 노드, 리프노드 등으로 구분 된다 -- 루트노드 : 부모 노드가 존재하지 않는 노드 -- 브랜치 노드 : 부모 노드와 자식 노드가 존재하는 노드 -- 리프 노드 : 자식 노드가 존재하지 않는 노드 -- 순환 관계는 깊이에 따라 레벨이 부여 된다. 루트 노드의 레벨은 1이고, 계층이 전재 될수록 레벨이 1씩 증가한다. -- .. 2022. 11. 30.
[DB/ORACLE] TOP-N QUERY -- TOP-N QUERY : 상위 N 개의 행을 조회하는 쿼리이다. -- 3가지 방법으로, ROWNUM 방식, 분석함수 방식, ROW LIMITING 절을 알아보자 --ROWNUM 방식 : ORDER BY 절로 행을 정렬하고, 정렬된 행을 ROWNUM 슈도 칼럼으로 제한한다. SELECT EMPNO, SAL, ROWNUM AS RN FROM EMP; -- ROWNUM 슈도 칼럼은 1부터 시작하고 행이 반환될때 마다 순번이 증가하기 때문에 ROWNUM = 2는 항상 FALSE이다. SELECT EMPNO, SAL, ROWNUM AS RN FROM EMP WHERE ROWNUM = 2; -- ROWNUM 슈도 칼럼은 HAVING -> SELECT -> ORDER BY 순서.. 2022. 11. 29.
[DB/ORACLE] 분석함수 및 활용(선형 보간, 선분이력) --NTILE() 으로 나눈 그룹 SELECT C1, COUNT(*) AS C2, SUM(SAL) AS C3 FROM (SELECT SAL, NTILE(4) OVER (ORDER BY SAL) AS C1 FROM EMP WHERE DEPTNO = 30) GROUP BY C1; --CEIL() 으로 나눈 그룹 SELECT C1, COUNT(*) AS C2, SUM(SAL) AS C3 FROM (SELECT SAL, CEIL( ROW_NUMBER() OVER (ORDER BY SAL, EMPNO) / (COUNT(*) OVER() / 4 )) AS C1 FROM EMP WHERE DEPTNO = 30) GROUP BY C1; --ㅡMOD() 으로 나눈 그룹 SELECT C1, COUNT(*) AS C2, S.. 2022. 11. 28.
[DB/ORACLE] 분석함수 -- 분석함수 -- 집계 함수는 행 그룹으로 값을 집계하고 // 행 그룹별로 단일 행을 반환 하기 때문에 데이터 집합이 변경됨 -- 분석 함수는 파티션과 윈도우로 값을 집계한다. // 데이터 집합을 변경하지 않고 값을 집계하므로, 원본값과 집계 값을 함께 분석할수 있다. SELECT A.EMPNO, A.SAL, B.SAL AS C1, A.SAL / B.SAL AS C2 FROM EMP A , (SELECT DEPTNO, SUM(SAL) AS SAL FROM EMP GROUP BY DEPTNO ) B WHERE A.DEPTNO = 10 AND B.DEPTNO = A.DEPTNO ORDER BY 1; -- 분석 함수를 사용하면 EMP 테이블을 1번만 조회하면 된다. -- SUM(), RATIO_TO_REPO.. 2022. 11. 25.
[DB/Mysql] HAVING, GROUP BY select 절 5 from 절 1 where 절 2 group by 절 3 having 절 4 order by 절 6 >> GROUP BY 절을 기술하지 않거나 GROUP BY 절에 NULL 이나 ()을 기술하면 전체 행이 하나의 행그룹으로 처리된다. >> 위의 쿼리문을 잘 분석해보면 detpno job sal 행그룹 c1 10 MANAGER 2450 10 7459 10 PERSIDENT 5000 20 ANALYST 3000 20 8975 20 ANALYST 3000 20 MANAGER 2975 30 MANAGER 2850 30 2850 >> 위의 쿼리를 분석해보자면 detpno job sal 행그룹 c1 10 MANAGER 2450 10, MANAGER 2450 10 PERSIDENT 5000 10,.. 2022. 7. 5.
[DB/MySQL] 기타함수(Group_concat) Mysql : group_concat(colums, SEPARATOR 'delimeter') // group_concat(colums) 시 default 는 ' , ' 로 나온다 Oracle : LISTAGG(colums, 'delimiter') WITHIN GROUP(ORDER BY colum) 2022. 7. 5.
[DB/MySQL] 집계함수 count(*) 전체 행의 갯수를 반환 count(expr) 널이 아닌 expr의 갯수를 반환 count(distinct expr) 널이 아닌 expr의 고유한 갯수를 반환(중복없는) >> MIN( expr) / MAX( expr ) ==> expr의 최대 최솟값을 반환한다. >> 아래의 쿼리는 empno = 0 의 조건에 해당하는 결과가 없기 때문에 결과가 아무것도 반환되지 않는다. >> 하지만 집계함수를 사용한 쿼리는 where를 만족하는행이 없더라도 하나의 행을 반환한다. 즉 데이터 존재여부를 확인할 떄 사용할 수 있다. >> Mysql : ifnull() --> oracle : nvl() >> SUM( expr ) / expr 의 합계값을 반환 >> sum(expr) 일때 expr의 합이 null.. 2022. 7. 5.
[DB/ORACLE] WHERE 절 LNNVL (condition) ==> condition 이 FALSE, UNKNOWN일경우 TRUE, TRUE일경우 FALSE를 반환한다. ESCAPE ==> LIKE 연산자 사용시 %, _ 을 검색할 경우 ESCAPE를 사용하여 검색한다 ==> where ename LIKE '_\%_' ESCAPE '\'; ESCAPE를 사용하여 2번째 문자가 %인 행을 검색한다. 또한 'CHRISMAS' LIKE '%' || event || '%'; ||을 통해서 컬럼을 LIKE 에서 포함되어야 할 문자로 선택할 수 있다. 즉 event 컬럼에 저장된 값들중 CHISMAS가 포함된 행 들을 출력한다. 2022. 7. 4.