Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
Tags
- doitandroid
- 알고리즘
- 안드로이드스튜디오
- 프로그래머스
- MySQL
- groupby
- SQL
- 티스토리챌린지
- 카카오코테
- 기술면접
- 인프런
- 오블완
- Til
- 코틀린
- java
- 자바
- 안드로이드
- 혼공파
- 혼공챌린지
- join
- Android
- 정처기
- 혼공단
- select
- 코테
- 자료구조
- CS
- 스터디
- Kotlin
- 정보처리기사
Archives
- Today
- Total
Welcome! Everything is fine.
[DB] 내부 조인, 외부조인, 셀프조인, 크로스조인 본문
728x90
인프런 <김영한의 실전 데이터베이스 - 기본편> 강의를 토대로 정리한 내용입니다.
만약 모든 정보를 한 테이블에 다 넣는다면 조회할 때는 좀 더 편리할 수도 있겠지만, 다음과 같은 문제가 발생할 수 있다.
- 데이터 중복
- 갱신 이상
- 삽입 이상
- 삭제 이상
이러한 문제들 때문에 데이터베이스를 설계할 때는 정규화(Normalization)라는 과정을 거친다.
- 정규화(Normalization) : 데이터의 중복을 최소화하고, 데이터의 일관성을 해치는 '이상 현상'들을 방지하기 위해 데이터를 논리적인 단위로 분리하는 과정.
그런데 이렇게 정규화를 거쳐서 쪼개진 테이블들에서 의미 있는 정보를 얻으려면 이 흩어진 데이터 조각들을 다시 합쳐야 한다. 이때 사용하는 기술이 바로 조인(JOIN) 이다. 조인의 종류에는 내부 조인, 외부 조인, 셀프 조인, 크로스 조인이 있다.
- 조인(JOIN) : 두 개 이상의 테이블을 특정 컬럼을 기준으로 연결하여, 마치 처음부터 하나의 테이블이었던 것처럼 보여주는 기능.
내부 조인
양쪽 테이블에 모두 공통으로 존재하는 데이터만을 보고싶을 때 사용하는 기술.
SELECT 컬럼1, 컬럼2, ...
FROM 테이블A
INNER JOIN 테이블B -- INNER 생략 가능
ON 테이블A.연결컬럼 = 테이블B.연결컬럼;
- 논리적 처리 순서 : FROM/JOIN (테이블 결합) → WHERE (조건 필터링) → SELECT (컬럼 선택)
외부 조인
한 쪽에는 데이터가 있지만, 다른 한 쪽에는 없는 데이터까지 모두 포함해서 보고싶을 때 사용하는 기술.


- LEFT (OUTER) JOIN은 왼쪽 테이블을, RIGHT (OUTER) JOIN은 오른쪽 테이블을 기준으로 삼는다.
- 기준으로 되는 테이블의 모든 데이터를 결과에 포함시킨다.
- 그 다음, ON 조건에 맞는 데이터를 반대 테이블에서 찾아 옆에 붙여준다.
- 만약 반대 테이블에 짝이 맞는 데이터가 없다면, 그 자리는 NULL 값으로 채워진다.
셀프 조인
자기 참조 관계의 데이터를 한 번의 쿼리로 조회하기 위해 사용하는 기술.
- 자기 참조 관계란 한 테이블 안에서 자신의 컬럼이 같은 테이블의 다른 컬럼을 참조하는 구조를 말한다.
- INNER JOIN → NULL이면 안나온다.
- LEFT JOIN → NULL인 것까지 다 나온다.
크로스 조인
애초에 짝이나 관계가 없는 두 집단을 가지고 가능한 모든 조합을 만들어내야 할 때 사용하는 기술.
- 조인 조건 없이 한쪽 테이블의 모든 행을 다른 쪽 테이블의 모든 행과 하나씩 전부 연결하는 가장 단순한 조인 방식이다. 그러나, 크로스 조인은 결과의 행 수가 기하급수적으로 늘어날 수 있기 때문에 가급적 사용하지 않는 것이 좋다.
- 크로스 조인의 결과는 수학 용어로 카테시안 곱 또는 데카르트 곱이라고 한다.
'TIL' 카테고리의 다른 글
| [DB] 인덱스 생성 · 조회 · 삭제 및 실행 계획 보기(+ 인덱스로 정렬 작업 성능 개선하기) (1) | 2026.01.24 |
|---|---|
| [DB] UNION, UNION ALL, UNION 정렬 (0) | 2026.01.03 |
| [CS] 디자인 패턴 종류와 간단한 개념 정리 (0) | 2025.10.22 |
| [STUDY] '향로' 와 함께하는 추석 완강 챌린지 회고 🌕🏃🏻 (0) | 2025.10.14 |
| [TIL] 멀티 스레드 - 스레드와 스레드 풀 이해하기 (0) | 2025.09.11 |