오라클 SQL에서 일별, 월별, 시간대별 등 증감률을 계산하기 위해서는 LAG 분석함수를 사용하면 된다. LAG 함수는 OVER 절과 함께 사용하며, OVER 절 내부의 ORDER BY 절 기준으로 데이터를 정렬 후 증감률을 계산하며, 정렬 기준이 잘못되면 결과가 부정확해질 수 있으니 주의해야 한다. 또한 칼럼에 NULL 값이 존재할 경우 증감률 연산이 안되기 때문에, NULL 값이 존재할 경우 NVL 함수를 사용하여 0으로 치환 후 증감률을 계산하는 것이 좋다. 목차일별 매출 증감률 계산 방법월별 매출 증감률 계산 방법시간대별 매출 증감률 계산 방법 일별 매출 증감률 계산 방법WITH sales_data AS ( SELECT DATE '2024-01-01' AS sale_date, 1500 AS ..
오라클 SQL에서 연속된 값 사이의 차를 계산할 때는 LAG 분석함수를 사용하면 된다. 이러한 쿼리를 작성할 때는 LAG 또는 LEAD 함수와 같은 분석 함수를 사용하여 이전 또는 다음 행의 값을 참조할 수 있다. 분석함수는 OVER 절과 함께 사용하며, OVER 절 내부의 ORDER BY 조건으로 데이터를 정렬 후 연속된 값의 차이를 계산한다. 칼럼 값에 NULL이 포함되어 있을 경우 차이를 계산하지 못한다. 이를 방지하기 위해 NVL 함수 등을 사용하여 NULL 값을 0으로 치환하여 계산하는 것이 좋다. 목차연속된 값 사이의 차이 계산 방법연속된 값 사이의 차이 계산 시 주의할 점 연속된 값 사이의 차이 계산 방법SELECT empno , ename , job , hiredate..
오라클 SQL에서 두 날짜 사이의 차이를 계산할 때는 빼기(-) 연산자를 사용하여 두 날짜를 빼 주면 된다. 날짜에 시간이 포함되어 있다면 소수점이 포함된 일수로 반환될 수 있으므로 주의해야 한다. 이를 해결하기 위해 TRUNC 함수를 사용하여 날짜의 시간을 미리 제거하거나, 소수점을 반올림하거나 제거하는 방법이 필요하다. 두 날짜의 차이를 일수뿐만 아니라 시, 분, 초까지 계산하려면 적절한 함수와 계산 공식을 사용하면 된다. 아래의 예시 쿼리를 참고하면 된다. 목차두 날짜 사이 일수 계산하기일수 계산시 시간이 포함되어 있을 경우일수 뿐만 아니라 시, 분, 초 까지 계산하기 두 날짜 사이 일수 계산하기SELECT TO_DATE('2024-06-03', 'YYYY-MM-DD') - TO_DATE..
오라클 SQL에서 주말과 공휴일을 제외하고 평일만 구하기 위해서는, TO_CHAR 함수를 사용하여 일요일과 토요일을 제외하고, 공휴일 마스터 테이블과 조인하여 공휴일을 제외하면 된다. CONNECT BY 절을 사용하여 시작일자와 종료일자를 입력하면 해당 기간 동안의 모든 날짜를 조회할 수 있는 날짜 뷰를 만들 수 있다. 공휴일 마스터는 실무에서는 실제 테이블로 생성하여 연도 별로 공휴일을 입력하여 사용하고 있다. 목차지정된 기간에 공휴일 표시하기지정된 기간에 주말, 공휴일 제외하기 지정된 기간에 공휴일 표시하기WITH date_list AS ( SELECT TO_DATE('2024-05-01', 'YYYY-MM-DD') + LEVEL - 1 AS work_date FROM dual CO..
오라클 SQL에서 CONNECT BY 절은 부서 조직도, 메뉴 트리 등 계층적 구조를 만들 때 주로 사용하는 방법이다. 그리고 CONNECT BY 절과 LEVEL을 사용하면 순차적인 데이터를 생성할 수가 있어서, 특정 값만큼 행을 늘리거나 시작일자와 종료일자 사이의 날짜를 채워서 행을 늘리는 등의 가상의 데이터를 만들 때 유용하게 사용할 수 있다. CONNECT BY 절의 사용법은 광범위하기 때문에, 아래는 실무에서 자주 사용하는 예시 몇 가지를 사용하여 설명하였다. 목차계층형 쿼리 조회 하는 법컬럼의 수치값만큼 행을 늘리는 방법시작일자와 종료일자 사이 날짜 가져오기 계층형 쿼리 조회 하는 법SELECT empno , ename , mgr , job , LEVEL FROM ..
오라클 SQL에서 SYSDATE 함수를 사용하여 서버의 현재 날짜와 시간을 조회할 수 있다. 반면, SYSTIMESTAMP 함수는 나노초 단위까지 더 정밀한 시간을 반환하고 타임존 정보도 포함한다. SYSDATE는 DATE 타입을 반환하고, SYSTIMESTAMP는 TIMESTAMP WITH TIME ZONE 타입을 반환한다. SYSDATE는 간단한 현재 시각이 필요할 때 주로 사용되며, SYSTIMESTAMP는 더 높은 정밀도와 타임존 정보가 필요할 때 유용하다. 이 두 함수 모두 서버의 시스템 시간을 기준으로 동작한다. 목차SYSDATE로 현재 날짜, 시간 구하기SYSTIMESTAMP로 현재 날짜, 시간 구하기CURRENT_DATE, CURRENT_TIMESTAMP로 구하기 SYSDATE로 현재 날..
오라클 SQL에서 SELECT 된 값에서 이전 행의 값과 동일한 경우 중복된 값(반복값)을 NULL로 숨김처리하여 제거를 해야 하는 상황이 종종 발생한다. 대부분 애플리케이션 단에서 처리하면 쉽게 해결되지만, 쿼리문에서 여러 행의 중복된 값을 한 번만 표시하기 위해서는 분석함수(LAG, ROW_NUMBER)를 사용하면 해결할 수 있다. 이 외에도 다양한 방법이 있을 수 있지만 아래의 예시를 이해하면 많은 도움이 될 것이다. 목차LAG 함수를 사용하여 중복 제거ROW_NUMBER 함수를 사용하여 중복 제거 LAG 함수를 사용하여 중복 제거SELECT NULLIF(job, LAG(job) OVER(ORDER BY job)) AS job , empno , ename FROM emp WHERE ..
오라클 SQL에서 COUNT 함수와 OVER 절을 함께 사용하면 COUNT 함수는 분석 함수라고 부른다. COUNT 함수와 GROUP BY 절과 함께 사용하면 COUNT 함수는 집계함수라고 한다. COUNT 함수를 OVER 절과 함께 사용하면 GROUP BY 절을 사용하지 않고 전체 건수, 그룹별 건수를 집계해서 각 행에 표시할 수 있다. 실무에서 유용하게 사용할 수 있는 구분이니 익혀두면 많은 도움이 될 것이다. 목차전체 총 건수 구하기순차적 누적 건수 구하기그룹별 총 건수 구하기그룹별 건수 + 총 건수 구하기 전체 총 건수 구하기SELECT empno , ename , job , COUNT(*) OVER() AS total_cnt FROM emp WHERE job IN ('AN..
오라클 SQL에서 합산 값을 가로로 표시할 때 SUM(CASE WHEN) 구문을 사용할 수 있다. SUM 함수 내부에서 CASE 연산자로 조건을 부여하여 해당 조건에 맞는 값만 합산을 하는 방식이다. SUM(CASE WHEN)은 SUM(DECODE)와 유사한 방식으로 실무에서 많이 사용하는 쿼리문이니 잘 익혀두면 두루두루 사용할 수 있다. 목차기본 사용법세로의 합산 값을 가로로 표시하기합산 조건을 여러개 부여하기특정 조건의 건수 합산하기연월별 집계표 만들기 (고급예제) 기본 사용법SELECT SUM(CASE WHEN job = 'SALESMAN' THEN sal END) AS salesman_sal FROM emp SUM (CASE WHEN) 구문은 특정 조건일 때 합산을 하기 위해서 사용하는 방법이..
오라클에서 테이블의 PK(Primary Key)를 추가, 변경 또는 삭제를 하기 위해서는 ALTER TABLE CONSTRAINT 명령어를 사용하면 된다. PK로 추가할 칼럼은 NULL 값이 존재하면 안 되며, PK로 추가할 칼럼 조합은 해당 테이블에서 유일한 값이어야 한다. 이미 생성된 PK에 칼럼을 추가하거나 뺄 때는 기존 PK를 삭제 후 다시 생성하는 방법을 사용한다. 목차테이블 PK 추가 방법테이블 PK 변경 방법테이블 PK 제거 방법테이블 생성 시 PK 설정 방법 테이블 PK 추가 방법ALTER TABLE scott.emp ADD CONSTRAINT emp_pk PRIMARY KEY (empno); ALTER TABLE [스키마명].[테이블명] ADD CONSTRAINT [PK명] PRIMAR..