Database/Oracle 14

오라클 윈도우 절 (Oracle Windowing Clause)

스키마http://xprogrammer.tistory.com/333 쿼리 SELECT deptno, ename, hiredate, sal, SUM(sal) OVER ( PARTITION BY deptno -- 분석함수로 계산될 대상의 그룹을 지정 ORDER BY hiredate -- 파티션 안에서의 순서를 지정 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING -- 시작행과 끝행 ) AS first_end_salary, SUM(sal) OVER ( PARTITION BY deptno -- 분석함수로 계산될 대상의 그룹을 지정 ORDER BY hiredate -- 파티션 안에서의 순서를 지정 ROWS BETWEEN UNBOUNDED PRECEDING AN..

Database/Oracle 2018.03.27

오라클 LEAD() vs LAG()

스키마http://xprogrammer.tistory.com/333 쿼리 SELECT deptno, empno, sal , LAG (sal,2,0) OVER(ORDER BY deptno, empno) pre1 -- 현재행을 기준으로 이전 2번째 행, 값이 없으면 0 , LAG (sal,1,0) OVER(ORDER BY deptno, empno) pre2 -- 현재행을 기준으로 이전 1번째 행, 값이 없으면 0 , LEAD(sal,1,0) OVER(ORDER BY deptno, empno) nxt1 -- 현재행을 기준으로 다음 1번째 행, 값이 없으면 0 , LEAD(sal,2,0) OVER(ORDER BY deptno, empno) nxt2 -- 현재행을 기준으로 다음 2번째 행, 값이 없으면 0 FRO..

Database/Oracle 2018.03.27

오라클 RANK() vs DENSE_RANK() vs ROW_NUMBER()

스키마http://xprogrammer.tistory.com/333 쿼리 SELECT deptno, empno, ename, sal, RANK() OVER -- 순위를 부여한다.중복된 값이 있을 경우 다음 순서로 ( PARTITION BY deptno -- 분석함수로 계산될 대상의 그룹을 지정 ORDER BY sal desc -- 파티션 안에서의 순서를 지정 ) as rank1, DENSE_RANK() OVER -- 순위를 부여한다.중복된 순위를 무시하고 순서대로 부여 ( PARTITION BY deptno -- 분석함수로 계산될 대상의 그룹을 지정 ORDER BY sal desc -- 파티션 안에서의 순서를 지정 ) as rank2, ROW_NUMBER() OVER -- 순위를 부여한다.중복된 순위 없..

Database/Oracle 2018.03.27

Oracle 정규식

종류 함수명 설명 REGEXP_LIKE 정규식 패턴을 검색(Like) REGEXP_REPLACE 정규식 패턴을 검색하여 대체 문자열로 변경 REGEXP_INSTR 정규식 패턴을 검색하여 위치 반환 REGEXP_SUBSTR 정규식 패턴을 검색하여 부분 문자 추출 REGEXP_COUNT 정규식 패턴을 검색하여 발견된 횟수 반환 사용법 REGEXP_LIKE 문자열, 정규식, 비교방법 REGEXP_REPLACE 문자열, 정규식, 변경할문자열, 시작위치, 발생횟수, 비교방법 REGEXP_INSTR 문자열, 정규식, 시작위치, 발생횟수, 반환옵션, 비교방법 REGEXP_SUBSTR 문자열, 정규식, 시작위치, 발생횟수, 비교방법 REGEXP_COUNT 문자열, 정규식, 시작위치 참고https://docs.oracl..

Database/Oracle 2018.03.19

Oracle 날짜계산

스키마http://xprogrammer.tistory.com/333 쿼리 SELECT to_char(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS 현재시간, (SYSDATE + 1/24/60/60) as 일초후, SYSDATE + 1/24/60/60 as 일초전, ADD_MONTHS(SYSDATE, 1) as 한달후, ADD_MONTHS(SYSDATE, -1) as 한달전, LAST_DAY(SYSDATE) as 마지막날, -- 두 날짜 사이의 일수 차이 TRUNC(SYSDATE) - TO_DATE('20180301', 'YYYYMMDD') as 날짜계산1, -- 30 분 이후 to_char(SYSTIMESTAMP + INTERVAL '30' MINUTE, 'YYYY-MM-DD HH24..

Database/Oracle 2018.03.19

Oracle 계층구조쿼리

스키마http://xprogrammer.tistory.com/333 쿼리 SELECT LEVEL, CONNECT_BY_ISLEAF, LPAD('-', 4*(LEVEL-1),'-') || ename level_ename, ENAME, PRIOR ename mgrname, empno, mgr, job FROM emp -- 최상위로 사용될 행 지정 START WITH job='PRESIDENT' -- 상위계층과 하위계층의 관계를 정의 CONNECT BY PRIOR empno=mgr -- 같은 LEVEL 사이에서의 정렬 ORDER SIBLINGS BY ENAME 결과 쿼리 SELECT LEVEL, CONNECT_BY_ISLEAF, CONNECT_BY_ISCYCLE, LPAD('-', 4*(LEVEL-1),'-'..

Database/Oracle 2018.03.19