SQL 조인 및 윈도우 함수
Source: Dev.to
Joins
조인은 두 개 이상의 테이블에서 관련된 열(보통 기본 키와 외래 키)을 기준으로 행을 결합할 수 있게 해줍니다.
Inner Join
두 테이블 모두에서 일치하는 값이 있는 행만 반환합니다.
SELECT *
FROM sales s
INNER JOIN products p
ON s.product_id = p.product_id;Left Join
왼쪽 테이블의 모든 행과 오른쪽 테이블에서 일치하는 행을 반환합니다. 오른쪽 테이블에 일치하지 않는 행은 NULL 값을 가집니다.
SELECT *
FROM sales s
LEFT JOIN products p
ON s.product_id = p.product_id;Right Join
오른쪽 테이블의 모든 행과 왼쪽 테이블에서 일치하는 행을 반환합니다. 왼쪽 테이블에 일치하지 않는 행은 NULL 값을 가집니다.
SELECT *
FROM sales s
RIGHT JOIN products p
ON s.product_id = p.product_id;Other Join Types
- Full Join – 두 테이블의 모든 행을 반환하며, 일치하지 않는 부분은
NULL로 표시됩니다. - Self‑Join – 서로 다른 별칭을 사용해 테이블 자체와 조인합니다.
가장 일반적으로 사용되는 조인은 inner join과 left join입니다.
Window Functions
윈도우 함수는 현재 행과 관련된 행 집합(이를 윈도우라고 함) 전체에 걸쳐 계산을 수행합니다. 집계 함수와 달리 윈도우 함수는 행을 축소하지 않으며, 각 행마다 값을 반환합니다.
General Syntax
function_name() OVER (
PARTITION BY column
ORDER BY column
)function_name()– 계산식(예:ROW_NUMBER,RANK,SUM,DENSE_RANK,LAG,LEAD).OVER ()– 윈도우를 정의합니다.PARTITION BY– 데이터를 그룹으로 나눕니다.ORDER BY– 각 그룹 내 행의 순서를 지정합니다.
Common Window Functions
- ROW_NUMBER() – 행에 고유한 순차 정수를 할당합니다.
- RANK() – 동점이 있을 경우 간격을 두고 순위를 할당합니다.
- DENSE_RANK() – 간격 없이 순위를 할당합니다.
- SUM() – 누적 합계를 계산합니다.
- LAG() – 이전 행의 데이터를 가져옵니다.
- LEAD() – 다음 행의 데이터를 가져옵니다.
윈도우 함수는 단순 집계를 넘어 순위 매기기, 누적 합계, 행별 비교와 같은 작업을 가능하게 하며, 원본 데이터 세트 구조를 유지합니다.