본문 바로가기
정보처리기사

<정보처리기사 실기> - JOIN의 종류와 차이점

by kaywalker 2025. 2. 6.

JOIN의 종류와 차이점

SQL의 JOIN은 두 개 이상의 테이블을 연결하여 데이터를 조회할 때 사용됩니다.

JOIN의 종류는 여러 가지가 있으며, 각각의 차이를 이해하는 것이 중요합니다.


1. INNER JOIN (내부 조인)

  • 설명: 두 테이블에서 공통된 값이 있는 행만 반환합니다.
  • 특징:
    • ON 절에 지정한 조건을 만족하는 데이터만 가져옴.
    • 일치하지 않는 행은 제외됨.
  • SQL 예제:
    SELECT A.emp_id, A.name, B.dept_name
    FROM Employee A
    INNER JOIN Department B
    ON A.dept_id = B.dept_id;
    
  • 결과: dept_id가 일치하는 데이터만 조회됨.

2. LEFT JOIN (LEFT OUTER JOIN, 왼쪽 외부 조인)

  • 설명: 왼쪽 테이블의 모든 행을 가져오고, 오른쪽 테이블에서 일치하는 데이터가 있으면 가져오며, 없으면 NULL로 표시됩니다.
  • 특징:
    • 왼쪽 테이블에 있는 모든 행을 포함.
    • 오른쪽 테이블에 대응되는 값이 없으면 NULL 값 반환.
  • SQL 예제:
    SELECT A.emp_id, A.name, B.dept_name
    FROM Employee A
    LEFT JOIN Department B
    ON A.dept_id = B.dept_id;
    
  • 결과: Employee 테이블의 모든 행을 포함하되, Department에 없는 경우 NULL 반환.

3. RIGHT JOIN (RIGHT OUTER JOIN, 오른쪽 외부 조인)

  • 설명: 오른쪽 테이블의 모든 행을 가져오고, 왼쪽 테이블에서 일치하는 데이터가 있으면 가져오며, 없으면 NULL로 표시됩니다.
  • 특징:
    • 오른쪽 테이블의 모든 데이터를 포함.
    • 왼쪽 테이블에 대응되는 값이 없으면 NULL 값 반환.
  • SQL 예제:
    SELECT A.emp_id, A.name, B.dept_name
    FROM Employee A
    RIGHT JOIN Department B
    ON A.dept_id = B.dept_id;
    
  • 결과: Department 테이블의 모든 행을 포함하며, Employee에 없는 경우 NULL 반환.

4. FULL JOIN (FULL OUTER JOIN, 완전 외부 조인)

  • 설명: 두 테이블에서 일치하는 데이터는 물론, 일치하지 않는 데이터까지 모두 반환합니다.
    일치하지 않는 값은 NULL로 채워집니다.
  • 특징:
    • INNER JOIN + LEFT JOIN + RIGHT JOIN을 포함하는 개념.
    • 두 테이블에서 모든 행을 가져오고, 일치하지 않는 값은 NULL 처리됨.
  • SQL 예제:
    SELECT A.emp_id, A.name, B.dept_name
    FROM Employee A
    FULL JOIN Department B
    ON A.dept_id = B.dept_id;
    
  • 결과:
    • Employee 또는 Department 중 한쪽에만 있는 데이터도 포함되며, 없는 값은 NULL.

5. CROSS JOIN (교차 조인)

  • 설명: 조인 조건 없이 두 테이블의 모든 행을 곱집합(Cartesian Product) 형태로 반환합니다.
  • 특징:
    • 모든 경우의 수를 조합하여 결과를 생성.
    • N x M 개의 결과가 출력됨.
  • SQL 예제:
    SELECT A.emp_id, A.name, B.dept_name
    FROM Employee A
    CROSS JOIN Department B;
    
  • 결과: Employee 테이블의 모든 행과 Department 테이블의 모든 행이 곱집합 형태로 조합됨.

🔹 JOIN의 차이점 요약

JOIN 종류 포함되는 데이터

INNER JOIN 두 테이블에서 일치하는 데이터만
LEFT JOIN 왼쪽 테이블의 모든 데이터 + 오른쪽 테이블에서 일치하는 데이터 (일치하지 않는 경우 NULL)
RIGHT JOIN 오른쪽 테이블의 모든 데이터 + 왼쪽 테이블에서 일치하는 데이터 (일치하지 않는 경우 NULL)
FULL JOIN 두 테이블의 모든 데이터 (일치하지 않는 경우 NULL)
CROSS JOIN 두 테이블의 모든 행을 곱집합(카테시안 곱) 형태로 반환

예제 데이터 예시

| Employee 테이블 |

emp_id name dept_id

1 김철수 101
2 이영희 102
3 박민수 NULL

| Department 테이블 |

dept_id dept_name

101 인사팀
102 개발팀
103 회계팀
  • INNER JOIN: (1, 김철수, 인사팀), (2, 이영희, 개발팀)
  • LEFT JOIN: (1, 김철수, 인사팀), (2, 이영희, 개발팀), (3, 박민수, NULL)
  • RIGHT JOIN: (1, 김철수, 인사팀), (2, 이영희, 개발팀), (NULL, NULL, 회계팀)
  • FULL JOIN: (1, 김철수, 인사팀), (2, 이영희, 개발팀), (3, 박민수, NULL), (NULL, NULL, 회계팀)
  • CROSS JOIN: 모든 행을 조합 (3 × 3 = 9개 행)

댓글