데이터베이스에서 조인은 데이터를 효율적으로 결합하는 핵심 기능입니다.
기본적인 INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN 외에도 성능과 최적화를 위한 다양한 고급 조인 기법이 존재합니다.
조인 기법 | 특징 | 주요 활용 사례 |
---|---|---|
Nested Loop Join | 작은 테이블과 인덱스 사용 시 효율적 | 인덱스 활용이 가능한 경우 |
Hash Join | 등가 조인(=)에 적합, 대용량 테이블에서 빠름 | 인덱스 없는 대용량 테이블 |
Sort Merge Join | 정렬된 데이터에서 효율적, 범위 조인(<, >, BETWEEN) 가능 | 데이터 정렬이 유리한 경우 |
Merge Join | 두 테이블이 정렬되어 있으면 빠름 | 정렬된 데이터 조인 |
Self Join | 동일한 테이블 내에서 조인 | 계층 구조 데이터 조회 |
Cross Join | 모든 조합을 생성(카테시안 곱) | 조합 생성 |
Anti Join | 특정 조건에 맞지 않는 행을 찾는 조인 | NOT IN, NOT EXISTS |
Semi Join | 서브쿼리 최적화, 부분 집합 반환 | EXISTS 연산 최적화 |
Lateral Join (PostgreSQL, Oracle 지원) | 서브쿼리 결과를 행별로 참조 | JSON, 배열 데이터 처리 |
SELECT e1.emp_id, e1.name AS employee, e2.name AS manager
FROM employees e1
LEFT JOIN employees e2 ON e1.manager_id = e2.emp_id;
✅ e1(직원)과 e2(관리자)를 같은 테이블에서 조인하여 계층 관계를 조회
SELECT e.name, p.project_name
FROM employees e
CROSS JOIN projects p;
✅ 모든 직원과 프로젝트를 조합하여 가능한 모든 경우의 수를 생
SELECT e.emp_id, e.name
FROM employees e
WHERE NOT EXISTS (
SELECT 1 FROM salaries s WHERE e.emp_id = s.emp_id
);
✅ salaries 테이블에 급여 정보가 없는 직원만 조회
SELECT e.emp_id, e.name
FROM employees e
WHERE EXISTS (
SELECT 1 FROM salaries s WHERE e.emp_id = s.emp_id
);
✅ 급여 정보가 존재하는 직원만 조회 (반환 행 수 감소로 성능 최적화)
SELECT e.emp_id, e.name, s.salary
FROM employees e
LEFT JOIN LATERAL (
SELECT salary FROM salaries s WHERE s.emp_id = e.emp_id ORDER BY s.date DESC LIMIT 1
) s ON true;
✅ 각 직원에 대해 최신 급여 정보만 가져옴
조인 기법 | 사용 목적 | 장점 | 단점 |
---|---|---|---|
Self Join | 계층 구조 조회 | 간단한 구현 | 대규모 데이터 시 비효율적 |
Cross Join | 모든 조합 생성 | 특정 경우 유용 | 필요 이상으로 많은 결과 생성 가능 |
Anti Join | 특정 데이터 제외 | 빠른 검색 가능 | NULL 처리 주의 필요 |
Semi Join | 부분 데이터 조회 | 서브쿼리 최적화 | 서브쿼리 최적화 필요 |
Lateral Join | 행별 서브쿼리 활용 | JSON, 배열 데이터 처리 유리 | PostgreSQL, Oracle에서만 지원 |
윈도우 운영체제의 노트북에서는 iPhone 유선 테더링이 잘 안되는 경우가 많습니다. 보통 iPhone의 드라이버가 설치가 안되있어서인…
안녕하세요, 혹시 이런 생각해 본 적 없으신가요? "내가 투자한 회사는 누가 감시하고, 어떻게 운영될까?" 오늘은…
1. Gemini CLI란 무엇인가요? Gemini CLI는 터미널 환경에서 직접 Gemini 모델과 상호작용할 수 있도록 만들어진…
과적합은 머신러닝에서 학습용데이터를 과하게 학습하여, 실제데이터를 예측하지 못하는 현상을 말합니다. 인공지능(AI)의 학습 방법은 우리가 시험공부를…