Notice
Recent Posts
Recent Comments
Link
변수의 기록
(데이터베이스)SQL 조인 정리 본문
SQL 조인의 의미와 종류: 깊이 있는 정리
1. 조인의 본질: 왜 필요한가?
SQL에서 조인(JOIN)은 둘 이상의 테이블을 논리적으로 연결하여 하나의 결과 집합을 만드는 연산입니다.
이는 정규화된 데이터 모델에서 분리된 정보를 결합할 때 필수적이며, 관계형 데이터베이스의 핵심 개념 중 하나입니다.
2. 조인 문법: Implicit vs Explicit
2.1 Implicit Join (암시적 조인, 구식 문법)
SELECT *
FROM employees e, departments d
WHERE e.dept_id = d.id
AND e.salary > 5000;
- FROM 절에 테이블 나열만 하고, WHERE 절에서 조인 조건을 명시
- 선택 조건과 조인 조건이 혼재되어 가독성이 떨어짐
- 조인 조건 빠뜨리는 실수가 잦아, 실수로 cross join이 발생할 수 있음
- Oracle 8i 이전 구버전에서 주로 사용 (오라클 조인)
실무에서는 가독성 및 유지보수 문제로 사용 지양
2.2 Explicit Join (명시적 조인)
SELECT *
FROM employees e
JOIN departments d ON e.dept_id = d.id
WHERE e.salary > 5000;
- JOIN 키워드를 이용해 조인 대상과 조인 조건을 명확히 구분
- ON 절에 조인 조건 명시 → 가독성과 안정성 향상
- 복잡한 다중 조인 시에도 구조가 명확히 드러남
- 안시 조인 (ANSI JOIN)
현재 대부분의 DBMS와 SQL 작성 스타일에서 권장되는 방식
3. 조인의 종류
3.1 INNER JOIN (내부 조인)
SELECT *
FROM employees e
INNER JOIN departments d ON e.dept_id = d.id;
- 조인 조건을 만족하는 행만 결과에 포함
- 조건을 만족하지 않는 행은 제외
- JOIN, INNER JOIN은 같은 의미 (INNER는 생략 가능)
- NULL 값을 포함한 조건 비교는 실패 → 해당 행은 포함되지 않음
3.2 OUTER JOIN (외부 조인)
- 조인 조건을 만족하지 않는 행도 포함시켜주는 방식
종류는 3가지:
3.2.1 LEFT OUTER JOIN
SELECT *
FROM employees e
LEFT JOIN departments d ON e.dept_id = d.id;
- 왼쪽 테이블의 모든 행 포함, 오른쪽이 없으면 NULL
3.2.2 RIGHT OUTER JOIN
SELECT *
FROM employees e
RIGHT JOIN departments d ON e.dept_id = d.id;
- 오른쪽 테이블의 모든 행 포함, 왼쪽이 없으면 NULL
3.2.3 FULL OUTER JOIN (PostgreSQL, Oracle 지원)
SELECT *
FROM employees e
FULL OUTER JOIN departments d ON e.dept_id = d.id;
- 양쪽 테이블 모두 포함. 없는 쪽은 NULL
3.3 EQUI JOIN
- 조인 조건에 동등 연산자(=) 를 사용하는 조인
SELECT *
FROM employees e
JOIN departments d ON e.dept_id = d.id;
두 가지 해석 방식이 있음:
- = 연산자가 쓰이면 무조건 EQUI JOIN (INNER/OUTER 관계 없음)
- INNER JOIN + = 연산 조합만 EQUI JOIN으로 한정하는 해석도 있음 (학문적 관점)
3.4 USING 절
SELECT *
FROM employees
JOIN departments USING (dept_id);
- 양쪽 테이블에 동일한 이름의 컬럼이 있을 경우
- 조인 후 해당 컬럼은 하나로 축약됨 (별칭 없이 사용 가능)
- INNER JOIN, OUTER JOIN 모두에서 사용 가능
단, 컬럼명이 같은 경우에만 사용 가능. 컬럼명이 다르면 ON 절 사용
3.5 NATURAL JOIN
SELECT *
FROM employees
NATURAL JOIN departments;
- 두 테이블 간 동일한 컬럼 이름을 기준으로 자동으로 EQUI JOIN 수행
- JOIN 조건을 명시하지 않음
- 내부적으로는 USING과 유사하게 작동
- 단점: 명시적이지 않아 예기치 않은 컬럼 조인 발생 위험
3.6 CROSS JOIN (카테시안 곱)
-- 명시적
SELECT *
FROM employees CROSS JOIN departments;
-- 암시적 (구식 문법)
SELECT *
FROM employees, departments;
- 모든 조합 반환 → n x m 개의 결과 생성
- 조인 조건 없음
- 실수로 발생하면 결과 폭발 가능
3.7 SELF JOIN
SELECT e1.name, e2.name AS manager
FROM employees e1
JOIN employees e2 ON e1.manager_id = e2.id;
- 같은 테이블을 자기 자신과 조인
- 별칭(alias)을 사용하여 두 개로 나누어 사용
- 조직도, 계층 구조 등에서 자주 사용
4. 정리 요약표
조인 유형 | 포함 행 | 조인 조건 | 키워드 예시 |
INNER JOIN | 조건 만족하는 양쪽 행만 포함 | 필수 | JOIN, INNER JOIN |
LEFT OUTER JOIN | 왼쪽 테이블 전체 + 오른쪽 조건 행 | 필수 | LEFT JOIN, LEFT OUTER JOIN |
RIGHT OUTER JOIN | 오른쪽 전체 + 왼쪽 조건 행 | 필수 | RIGHT JOIN |
FULL OUTER JOIN | 양쪽 전체 포함 | 필수 | FULL OUTER JOIN |
EQUI JOIN | = 조건 사용 조인 | = | JOIN ON A.id = B.id |
USING | 동일 컬럼 기준 조인 (축약형) | 자동 추론 | JOIN USING (id) |
NATURAL JOIN | 동일 컬럼명 자동 조인 | 자동 추론 | NATURAL JOIN |
CROSS JOIN | 모든 조합 반환 | 없음 | CROSS JOIN, A, B |
SELF JOIN | 자기 자신과 조인 | 필요 | FROM A a1 JOIN A a2 ON ... |
5. 마무리
SQL 조인은 단순한 테이블 결합을 넘어서, 데이터의 관계와 의미를 명확하게 구조화하는 도구입니다.
특히 JOIN의 종류와 문법적 차이를 정확히 이해하면, 복잡한 데이터 모델도 명확하고 실수 없이 다룰 수 있습니다.
실무에서는 explicit join, USING, SELF JOIN, OUTER JOIN 등 다양한 조인 패턴을 복합적으로 사용하므로, 각 개념의 특징을 정확히 이해하고 선택적으로 활용하는 것이 중요합니다.
'CS지식 > 데이터베이스 (Database)' 카테고리의 다른 글
(데이터베이스 DB)Stored Procedure와 Stored Function의 차이 (0) | 2025.05.17 |
---|---|
(데이터베이스)Three-tier Architecture와 Stored Function 활용법 (0) | 2025.05.17 |
(데이터베이스)SQL에서의 NULL과 Three-Valued Logic: 반드시 알아야 할 핵심 개념 정리 (0) | 2025.05.14 |
(데이터베이스) SQL 설명 기본 dml ,ddl ,vdl (0) | 2025.05.10 |
(데이터베이스)관계형 데이터 모델 (Relational Data Model) 정리 (0) | 2025.05.07 |