SQL 조인 및 윈도우 함수

발행: (2026년 3월 2일 오후 09:19 GMT+9)
6 분 소요
원문: Dev.to

Source: Dev.to

소개

SQL 조인은 공통 식별자(예: 외래 키)를 사용하여 두 개 이상의 테이블을 결합할 수 있게 해줍니다. 정규화 때문에 단일 테이블에 필요한 모든 열이 없을 수 있으므로, 조인은 테이블 간에 데이터를 “전송”하여 결과 집합에 두 테이블의 열을 포함할 수 있게 합니다.

샘플 테이블 (예시용)

학생 테이블

student_idnamecourse_id
1Willis Kip001
2Edwin Sifuna002
3Tonny OtiNULL

강좌 테이블

course_idcourse_name
001Botany
002Political_sci
004English

Source:

SQL 조인의 종류

1️⃣ INNER JOIN

두 테이블 모두에 존재하는 행만 반환합니다.

내부 조인 다이어그램

SELECT name, course_name
FROM Student
INNER JOIN Course
  ON Student.course_id = Course.course_id;

Output

이름과목명
Willis KipBotany
Edwin SifunaPolitical_sci

2️⃣ LEFT JOIN

왼쪽 테이블의 모든 행과 오른쪽 테이블에서 일치하는 행을 반환합니다.

왼쪽 조인 다이어그램

SELECT name, course_name
FROM Student
LEFT JOIN Course
  ON Student.course_id = Course.course_id;

Output

이름과목명
Willis KipBotany
Edwin SifunaPolitical_sci
Tonny OtiNULL

3️⃣ RIGHT JOIN

오른쪽 테이블의 모든 행과 왼쪽 테이블에서 일치하는 행을 반환합니다.

오른쪽 조인 다이어그램

SELECT name, course_name
FROM Student
RIGHT JOIN Course
  ON Student.course_id = Course.course_id;

Output

이름과목명
Willis KipBotany
Edwin SifunaPolitical_sci
NULLEnglish

4️⃣ FULL JOIN

두 테이블의 모든 행을 반환하고, 가능한 경우 일치시킵니다.

전체 조인 다이어그램

SELECT name, course_name
FROM Student
FULL JOIN Course
  ON Student.course_id = Course.course_id;

Output

이름과목명
Willis KipBotany
Edwin SifunaPolitical_sci
Tonny OtiNULL
NULLEnglish

윈도우 함수

윈도우 함수OVER () 절로 정의된 특정 행 집합(“윈도우”)에 걸쳐 계산을 수행합니다. 전통적인 집계 함수가 행들을 하나의 결과로 압축하는 것과 달리, 윈도우 함수는 정의된 윈도우 내의 다른 행에 접근하면서도 각 행마다 값을 반환합니다.

구문

SELECT column_1,
       column_2,
       function() OVER (
           PARTITION BY partition_expression
           ORDER BY order_expression
       ) AS output_column_name
FROM table_name;

설명

구성 요소설명
SELECT결과 집합에 포함시키려는 열을 나열합니다.
function()적용하려는 윈도우 함수(예: ROW_NUMBER(), AVG()).
OVER()함수가 작동할 윈도우를 정의합니다.
PARTITION BY행을 파티션으로 나눕니다; 생략하면 전체 결과 집합이 하나의 파티션이 됩니다.
ORDER BY각 파티션 내에서 행의 순서를 결정합니다.
output_column_name계산된 열에 대한 별칭입니다.

예시

SELECT dem.first_name,
       dem.last_name,
       gender,
       AVG(salary) OVER (PARTITION BY gender) AS avg_salary_by_gender
FROM employee_demographics dem
JOIN employee_salary sal
  ON dem.employee_id = sal.employee_id;

이 쿼리는 각 성별별 평균 급여를 계산하면서도 개별 직원 레코드를 그대로 표시합니다.

흔히 사용되는 윈도우 함수

  • ROW_NUMBER()
  • RANK()
  • DENSE_RANK()
  • LAG(expression, offset)
  • FIRST_VALUE()
  • LAST_VALUE()

윈도우 함수로 사용되는 집계 함수

  • SUM()
  • AVG()
  • MAX()
  • MIN()
  • COUNT()

결론

  • 여러 테이블의 관련 데이터를 결합해야 할 때 JOIN을 사용합니다.
  • 유지하고 싶은 행에 따라 적절한 조인 유형(INNER, LEFT, RIGHT, FULL)을 선택합니다.
  • 관련 행 집합에 의존하는 행‑레벨 계산(예: 누적 합계, 순위, 이동 평균)이 필요할 때 윈도우 함수를 사용합니다.
  • PARTITION BYORDER BY를 함께 사용하여 윈도우 범위와 정렬을 미세 조정합니다.

이 도구들을 함께 사용하면 SQL은 데이터 검색과 분석 계산 모두에 강력한 언어가 됩니다.

0 조회
Back to Blog

관련 글

더 보기 »

SQL 조인 및 윈도우 함수

markdown !Musungu Ruth Ambogohttps://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws...

PostgreSQL 조인 및 윈도우 함수

PostgreSQL에서 JOINS 이해하기 JOINS는 관련된 컬럼을 통해 여러 테이블이나 뷰의 데이터를 병합할 수 있게 해줍니다. 조인 유형의 선택은 …