본문 바로가기
IT

업무에 바로 쓰는 SQL 쿼리 예제 정리

by 니똣 2025. 6. 24.
반응형

 

실무에서 자주 사용하게 되는 쿼리에 대해서 정리했으니 업무에 참고해주세요.

 

아래는 예시 테이블 tt 입니다.

t_year t_no t_item t_amt t_dt t_insdt
2025 1 아이템1 5000 20250201 20250601
2024 2 아이템2 12000 20250305 20250520
1. 조건 분기
SELECT t_no, t_item, t_amt,
	   CASE WHEN t_amt >= 10000 THEN '고액'
	        WHEN t_amt >= 3000 THEN '중간'
	        ELSE '소액'
	   END AS amt_level
  FROM tt;

2. 문자열 포함 갯수 구하기( 문자열에서 "happy"를 포함하는 수 )
SELECT REGEXP_COUNT("I am happy, are you happy too?", 'happy') AS happy_count
  FROM dual;
-- 결과 2

3. 새로운 순번 생성 (MAX + 1)
SELECT NVL(MAX(t_no), 0) + 1 AS next_t_no
  FROM tt;

4. 시퀀스 생성 ( 동시 처리에 안전 )
CREATE SEQUENCE tt_seq
START WITH 1
INCREMENT BY 1
NOCACHE;

-- INSERT 시 사용
INSERT INTO tt (t_year, t_no, t_item) VALUES ('2025', tt_seq.NEXTVAL, '아이템');

5. 문서 번호 형식 출력 ( 연도-순번 ####-#### 형식으로 출력 )
SELECT t_year || '-' || LPAD(t_no, 4, '0') AS formatted_no
  FROM tt;
--t_year	t_no	formatted_no
--2025		1	2025-0001

6. yyyymmdd 형식에서 yymm 형식으로 출력 (ex> '20250624' → '2506')
-- t_dt가 VARCHAR2 타입
SELECT SUBSTR(t_dt, 3, 4) AS yymm
  FROM tt;

-- t_dt가 DATE 타입
SELECT TO_CHAR(t_dt, 'YYMM') AS yymm
  FROM tt;

7. NULL 처리 ( 금액이 없을 때 0으로 처리 )
SELECT NVL(t_amt, 0) AS amt
  FROM tt;
  
8. 무결성 제약조건 ( 제약조건 중 중복된 값 확인 쿼리 (PK나 UNIQUE) )
  SELECT t_year, t_no, COUNT(*) AS cnt
    FROM tt
GROUP BY t_year, t_no
  HAVING COUNT(*) > 1;
  
9. 데이터 존재 여부 확인 ( IN, EXISTS 사용 )
-- IN
SELECT * FROM tt WHERE t_year IN ('2024', '2025');

-- EXISTS
SELECT a.* 
  FROM tt a
 WHERE EXISTS (SELECT 1 
                 FROM tt sa
                WHERE sa.t_year = sa.t_year);
                
10. 최신 등록 순으로 순번 매기기
SELECT ROW_NUMBER() OVER (ORDER BY insert_dt DESC) AS rn
  FROM tt;

 

반응형