오라클에서는 자동 증가 컬럼을 사용할 수가 없다. 다른 DB에서는 컬럼 자체에 옵션이 있으나, 오라클에서는 컬럼의 값을 증가시키기 위해서는 MAX(컬럼) + 1 또는 시퀀스를 사용하여 일련번호를 부여해야 한다. INCREMENT BY : 시퀀스 실행 시 증가시킬 값 START WITH : 시퀀스의 시작값이다. (MINVALUE과 같거나 커야 한다) MINVALUE : 시퀀스가 시작되는 최솟값이다. MAXVALUE : 시퀀스가 끝나는 최댓값이다. NOCYCLE | CYCLE : NOCYCLE (반복안함), CYCLE(시퀀스의 최댓값에 도달 시 최솟값 1부터 다시시작) NOCACHE | CACHE : NOCACHE(사용안함), CACHE(캐시를 사용하여 미리 값을 할당해 놓아서 속도가 빠르며, 동시 사용자가..
오라클에서 LNNVL 함수는 간단한 함수 같지만, 함수의 기능을 제대로 이해하지 않으면 아주 복잡하게 느껴지는 함수이다. LNNVL 함수는 해당 컬럼에 NULL이 존재할 경우 NULL 처리와 조건문을 한 번에 연산하기 위해서 사용한다. LNNVL 함수는 아래의 상황일 때 조건이 TRUE이다. 컬럼이 NULL인 경우 = TRUE 함수 내부 조건이 FALSE인 경우 = TRUE 오라클의 NULL 처리를 정확히 이해하고 있지 않으면 아래를 먼저 읽어보기 바란다. [Oracle] 오라클 NULL 사용시 주의사항 정리 사용 예시 - 1 SELECT ename , job , comm FROM emp WHERE deptno = 30 AND LNNVL(comm = 0) LNNVL(comm = 0) - comm is n..
오라클의 GROUPING, GROUPING_ID 함수는 소계와 합계를 집계할 때 사용하는 ROLLUP, CUBE, GROUPING SETS 함수와 함계 사용된다. 소계와 합계로 집계되어 출력된 행을 구분할 때 사용한다. 기본 사용법 GROUPING 함수는 1개의 매개변수만 있으며, GROUPING_ID 함수는 여러개의 매개변수를 입력할 수 있다. GROUPING 함수 SELECT job , deptno , SUM(sal) , GROUPING(job) , GROUPING(deptno) FROM emp WHERE job IN ('ANALYST', 'MANAGER') GROUP BY ROLLUP(job, deptno) GROUPING 함수는 소계, 합계로 집계된 행의 컬럼 NULL을 구분할 수있다. NULL인..
오라클에서 합계와 소계를 구하기 위해서는 ROLLUP 함수를 많이 사용한다. ROLLUP 함수는 소계와 합계를 순서에 맞게 반환하지만 CUBE 함수는 계산 가능한 모든 소계와 합계를 반환한다. 기본사용법 SELECT job , SUM(sal) FROM emp GROUP BY CUBE(job) ROLLUP 함수와 다르게 합계를 먼저 표시한다. 그룹 컬럼이 여러개인 경우 SELECT job , deptno , SUM(sal) FROM emp GROUP BY CUBE(job, deptno) 그룹 컬럼으로 산출할 수 있는 모든 소계와 합계를 반환한다. 원하는 소계, 합계 추출하기 - 1 SELECT job , deptno , SUM(sal) FROM emp GROUP BY CUBE(job, deptno) HAV..
오라클에서 전체 합계 대비 비율 또는 백분율을 구하기 위해서는 RATIO_TO_REPORT 함수를 이용하면 된다. RATIO_TO_REPORT 이용하면 비율이 반환되는데, 여기에 100을 곱하면 백분율(%)로 바꿀 수 있다. 비율 구하기 SELECT ename , sal , RATIO_TO_REPORT(sal) OVER() AS sal_ratio FROM emp WHERE job = 'MANAGER' 조회된 전체 급여(sal) 합계 대비 해당 행의 비율이 반환된다. 백분율 구하기 SELECT ename , sal , ROUND(RATIO_TO_REPORT(sal) OVER(), 2) * 100 || '%' AS sal_rate FROM emp WHERE job = 'MANAGER' 비율에서 소수점 둘째자..
오라클에서 여러 개의 SELECT 문 결과를 합치기 위해서는 UNION, UNION ALL을 사용하면 된다. UNION을 사용할 경우 합쳐진 결과에서 중복을 제거한 결과를 반환하고, UNION ALL을 사용하면 중복을 제거하지 않고 합쳐진 결과를 그대로를 반환한다. UNION : 각 쿼리의 결과 합을 반환하는 합집합 (중복제거) UNION ALL : 각 쿼리의 모든 결과를 포함한 합집합 (중복제거 안함) 기본 사용법 UNION 사용법 (중복 제거) SELECT job , deptno FROM emp WHERE sal >= 3000 UNION SELECT job , deptno FROM emp WHERE deptno = 10 PRESEIDENT, ANALYST의 중복된 데이터는 제거되고, 중복되지 않은 데..
오라클 11g부터 PIVOT과 UNPIVOT 기능을 사용할 수 있다. PIVOT은 행을 열로 변환하는 기능이며, UNPIVOT은 열을 행으로 변환하는 기능이다. 아래는 UNPIVOT을 설명한 예제이다. [Oracle] 오라클 PIVOT 사용법 (행을 열로 변환) UNPIVOT을 처음 사용할 때는 많이 헷갈릴 수 있으니, 아래의 예제를 차근차근 따라 해 보면서 이해하면 된다. SELECT * FROM ( 피벗 대상 쿼리문 ) UNPIVOT ( 컬럼별칭(값) FOR 컬럼별칭(열) IN (피벗열명 AS '별칭', ... ) 컬럼별칭(값) : UNPIVOT을 할 때 열의 값을 표시할 컬럼명을 지정하는 부분이다. 위에 예제에서 HIRE_CNT에 해당된다. 사용자가 임의로 별칭을 지정하면 된다. 컬럼별칭(열) : ..
SQL Server에서 날짜 형식에서 년, 월, 일을 분리하거나 해당 날짜의 요일(weekday), 분기 등을 구하기 위해서는 DATENAME 함수를 사용하면 된다. 그리고 올해로부터 며칠째 인지 또는 몇 주째 인지도 구할 수 있다. DATENAME 함수는 DATEPART 함수와 거의 유사하다. 차이라고 하면 DATENAME 함수는 결과를 문자로 반환하고, DATEPART 함수는 정수로 반환한다. 월(month)과 요일(weekday) 부분을 제외하면 두 함수 모두 동일하다. 목차 날짜 분리 하기 시간 분리 하기 요일 구하기 (WEEKDAY) 분기 구하기 (QUARTER) 일 년 기준으로 며칠(일수) 구하기 일 년 기준으로 몇 주인지 구하기 [MSSQL] DATEPART 함수 사용법 SQL Server에..
SQL Server 2012 버전부터 FORMAT 함수가 추가되었다. 오라클에서는 TO_CHAR 함수를 사용하여 날짜 형식을 문자열로 쉽게 변환을 할 수 있고, MSSQL에서는 CONVER 함수를 사용하여 변환이 가능하지만 조금 아쉬운 면이 있었다. FORMAT 함수를 사용하여 오라클의 TO_CHAR 함수에서 가능했던 3가지 사용법을 소개한다. 날짜 문자열 변환 수치값 천단위 콤마 찍기 수치값 소수점 표시 날짜 문자열 변환 SELECT FORMAT(GETDATE(), 'yyyy-MM-dd') AS result1 , FORMAT(GETDATE(), 'yyyy-MM-dd HH:mm:ss') AS result2 오라클에서 날짜를 문자열로 변환하던 비슷한 형식으로 사용이 가능하다. SELECT FORMAT(..
SQL Server에서는 오라클에서 사용하는 ROWNUM은 사용할 수 없다. 그러나 TOP과 ROW_NUMBER 함수를 사용하여 비슷한 결과를 만들 수 있다. ROWNUM은 주로 아래의 2가지 경우에 많이 사용한다. 조회 개수를 제한하는 경우 조회 순번을 매기는 경우 조회 개수를 제한하는 경우 SELECT TOP(5) ename , job , sal FROM emp SELECT 절에 TOP(개수)를 사용하여 조회 개수를 제한할 수 있다. 오라클의 ROWNUM은 ORDER BY가 수행되기 전에 개수를 제한하므로 정렬이 적용되지 않지만, TOP은 SELECT 절에 있기 때문에 ORDER BY가 있을 경우 정렬 후 개수를 제한한다. 오라클 예시 : WHERE ROWNUM 2000 ROW_NUMBER 함수를..