본문으로 건너뛰기
실습하기

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

idnamemanager_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;

쿼리 결과

employeemanager
김지영NULL
이민수김지영
박수진김지영
최현우이민수

같은 테이블을 서로 다른 역할로 구분하기 위해 em이라는 별칭을 사용했습니다.


언제 사용할까

  • 일정, 대진표 등 모든 가능한 조합 생성: CROSS JOIN
  • 계층 구조, 상하 관계 등 자기 참조 관계 모델링: SELF JOIN
  • 같은 테이블 내부에서 행 간 비교가 필요한 경우

다음 내용이 궁금하다면?

코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!