Education/신한투자증권 프로 디지털 아카데미

실무에서는 주로 어떤 SQL 문법을 사용하게 될까요 ?

마이캣호두 2025. 8. 10. 17:28
반응형

 
 
 
 

6. 윈도우 함수

 
1) 윈도우 함수

 
window 는 말 그대로 창을 의미한다, 계산을 적용할 데이터의 범위를 의미한다
 
 
2) 순위 함수

 
RANK 와 DENSE_RANK 의 차이를 알아둬야 한다 !
ROW_NUMBER 의 경우 값이 같아도 무조건 고유한 번호가 매겨지는데, 이는 DBMS 실행 계획에 따라 달라진다
 
 
7) 윈도우 집계 함수 기본 문법

 
이걸 잘 알아둬야 한다 !!!
 
 
8) SUM 함수 예제

 
 
 
SUM(SALARY) OVER (PARTITION BY DEPARTMENT_ID)
: DEPARTMENT_ID별로 합계는 그룹별로 계산하지만, 행은 그대로 유지한다 = 하나로 축약되지 않는다
 
차이

  • GROUP BY 를 사용할 경우, 같은 DEPARTMENT_ID를 가진 행들을 하나로 묶어 집계해서 행 수가 줄어든다
  • PARTITION BY 를 사용할 경우, 같은 DEPARTMENT_ID를 가진 행들을 계산 범위만 그룹화 
    → 행 수는 그대로, 해당 그룹의 합계가 각 행에 표시된다 = DEPARTMENT_ID 가 같은 행들의 total이 모두 같게 나온다

 
장점
 

  • 같은 레벨에서 SALARY와 SUM(SALARY)를 동시에 비교할 수 있다
  • 추가적인 서브쿼리나 FROM 절에 다른 집계 테이블을 넣지 않아도 된다
  • AVG(SALARY), SUM(SALARY) 등 다양한 집계 결과를 원본 행과 함께 조회 가능하다

 
 
13) PARTITION BY 와 ORDER BY

 
 
14) 누적 합계 예제

 
 
 
GROUP BY와 달리 행이 그대로 유지되며, 계산 결과를 추가 컬럼처럼 붙인다
ORDER BY 절을 넣으면, 그 순서대로 누적 계산이 수행된다
부서별 합계와는 달리, 각 행마다 그 시점까지의 합이 표시된다
 
 
25) Quiz

 
OVER() 가 비어 있으면 전 행을 대상으로 윈도우 함수가 적용된다
→ 전체 테이블의 LOAN_ID 개수를 세어서 모든 행에 동일한 값이 표시된다
 
 

6. 실습

 
1) SQL 작성

 

SELECT ACCOUNT_ID, 
	SUM(AMOUNT) OVER (PARTITION BY ACCOUNT_ID ORDER BY TRANSACTION_DATE)
FROM TRANSACTIONS;

SELECT ACCOUNT_ID, AMOUNT, AMOUNT / MAX(AMOUNT) OVER (PARTITION BY ACCOUNT_ID) AS RATIO
FROM TRANSACTIONS;

SELECT BRANCH_ID, LOAN_ID, AMOUNT, SUM(AMOUNT) OVER (PARTITION BY BRANCH_ID ORDER BY LOAN_DATE)
FROM LOANS;

SELECT ACCOUNT_ID, CUSTOMER_ID, ROUND(AVG(BALANCE) OVER (PARTITION BY CUSTOMER_ID), 2) AS AVG_BALANCE
FROM ACCOUNTS;

 
 
 

7. 페이징 쿼리

 
1~4) 페이징(Paging)

 
페이징 쿼리는 웹·앱 목록 화면에서 페이지 번호를 누를 때 해당 페이지의 데이터만 가져오는 것을 말한다
예를 들어, 한 페이지에 10건씩 보여줄 때 1페이지: 1~10행, 2페이지: 11~20행 이렇게 !
 

  • LIMIT: 가져올 행 수
  • OFFSET: 건너뛸 행 수

 
 
 

8. ROLLUP

 
1) ROLLUP

 
ROLLUP 은 그룹별 집계뿐만 아니라 그룹 간의 소계와 총계까지 한 번에 계산해 주는 기능이다
 

SELECT JOB_ID,
DEPARTMENT_ID,
COUNT(*) AS CNT
FROM EMPLOYEES
WHERE DEPARTMENT_ID IS NOT NULL
GROUP BY JOB_ID, DEPARTMENT_ID;

                                             ...

 
마지막에는 이렇게 총계가 나온다 !
 
 

4. 트랜잭션과 RESTful API

2. 트랜잭션 고급
 

4) MVCC (Multi-Version Concurrency Control)

 
Undo Log 역할

  1. 과거 버전 조회
    • SELECT나 트랜잭션 격리 수준에 따라, 현재 커밋되지 않은 변경 대신 Undo Log를 보고 과거 값을 읽음
    • 이렇게 하면 락 없이 읽기 가능 → 읽기 성능 향상 + 동시성 유지
  2. 롤백(Rollback)
    • 변경이 취소될 때, Undo Log에 저장된 이전 값을 이용해 원래 상태로 복구
    • 일종의 형상 관리처럼, 이전 상태를 기억하고 있다가 필요할 때 되돌림

→ 즉, Undo Log 가 이전 값을 가지고 있다가 우리가 ROLLBACK 을 하게 되면 그 이전값을 가져와서 다시 덮어쓰는 과정인 것임! this is like 형상관리 ~
 
 
 

3. RESTful API 기초

늘 사용하던 건데 막상 설명을 하려고 하면 잘 못하겠어서 이번 기회에 정리를 해보려고 한다 !
 
1) REST 란?

 
REST : HTTP 프로토콜 위에서 자원(Resource)을 URI로 식별하고, GET·POST·PUT·DELETE 같은 표준 메서드로 상태를 주고받는 아키텍처 스타일
RESTful API : REST 원칙을 지켜서 설계한 API. 즉, 리소스 중심 + HTTP 메서드 의미에 맞는 동작 + 일관된 URI 구조를 가진 API
 
 
2) REST vs RESTful 의 차이

 
 
3) 멱등성

 
멱등성 중요한 이유는 클라이언트가 요청을 늘 한 번만 보내는 것이 아니기 때문이다
예를 들어, 사용자가 결제 버튼을 잘못해서 2번 누르게 될 경우 POST /pay 로 요청을 2번 하게 된다. 이때 만약 API 가 멱등하지 않게 되면, 데이터 중복, 결제 중복, 주문 중복 등이 발생할 수 있기 때문에 늘 API 를 멱등하게 동작하도록 설계해야 한다

반응형