CROSS JOIN & SELF JOIN
SQL에는 특정 상황에서 유용하게 쓰이는 특수 Join 방식들이 있습니다.
CROSS JOIN
: 두 테이블의 가능한 모든 행 조합을 반환SELF JOIN
: 같은 테이블을 자기 자신과 Join해 내부 데이터를 비교하거나 연관 지음
CROSS JOIN
CROSS JOIN
은 두 테이블의 모든 행 조합을 생성합니다.
첫 번째 테이블의 각 행이 두 번째 테이블의 모든 행과 결합되며, 결과는 데카르트 곱(Cartesian Product)입니다.
CROSS JOIN
SELECT students.name, days.day
FROM students
CROSS JOIN days;
- 결과 행 수 =
students
행 개수 ×days
행 개수 - 테이블 크기에 따라 결과가 매우 커질 수 있으므로 주의 필요
사용 사례
- 가능한 모든 조합 생성 (예: 시간표, 대진표, 제품 옵션)
- 쌍별 비교(pairwise comparison)
- 격자(grid) 데이터나 테스트 케이스 생성
SELF JOIN
SELF JOIN
은 같은 테이블을 자 기 자신과 Join하는 방식으로, 테이블 내부 데이터를 서로 비교하거나 관계를 모델링할 때 활용합니다.
예시: 직원과 관리자 관계
아래 예시는 employees
테이블을 자기 자신과 Join해 각 직원의 관리자를 찾는 방법입니다.
employees
id | name | manager_id |
---|---|---|
1 | 김지영 | NULL |
2 | 이민수 | 1 |
3 | 박수진 | 1 |
4 | 최현우 | 2 |
SELF JOIN으로 관리자 찾기
SELECT e.name AS employee, m.name AS manager
FROM employees AS e
LEFT JOIN employees AS m
ON e.manager_id = m.id;
쿼리 결과
employee | manager |
---|---|
김지영 | NULL |
이민수 | 김지영 |
박수진 | 김지영 |
최현우 | 이민수 |
같은 테이블을 서로 다른 역할로 구분하기 위해 e
와 m
이라는 별칭을 사용했습니다.
언제 사용할까
- 일정, 대진표 등 모든 가능한 조합 생성:
CROSS JOIN
- 계층 구조, 상하 관계 등 자기 참조 관계 모델링:
SELF JOIN
- 같은 테이블 내부에서 행 간 비교가 필요한 경우
다음 내용이 궁금하다면?
코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!