SQL Server/개인 공부

< INNER, LEFT, RIGHT, FULL, CROSS > JOIN 의 간단한 사용 방법과 응용 사용 방법

코딩하는냥이 2025. 6. 5. 16:35
반응형

SQL Server에서 자주 사용되는 조인(Join) 문법인 INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN, CROSS JOIN은 두 개 이상의 테이블에서 관련 데이터를 결합할 때 사용됩니다. 각각의 조인은 어떤 데이터를 포함시킬 것인지에 따라 동작 방식이 다릅니다.


📌 1. INNER JOIN

🔹 의미

  • 두 테이블 간 조건을 만족하는 공통된 값이 있을 때만 결과에 포함.
  • 가장 많이 사용되는 조인 방식.

🔹 기본 사용법

SELECT A.*, B.*
FROM TableA AS A
INNER JOIN TableB AS B ON A.id = B.id;

🔹 예시

두 테이블에 공통된 id가 있는 행만 출력.


📌 2. LEFT OUTER JOIN

🔹 의미

  • 왼쪽 테이블의 모든 행을 포함하며, 오른쪽 테이블에 일치하는 값이 있으면 가져오고, 없으면 NULL로 표시.

🔹 기본 사용법

SELECT A.*, B.*
FROM TableA AS A
LEFT OUTER JOIN TableB AS B ON A.id = B.id;

🔹 예시

왼쪽 테이블은 모두 표시되고, 오른쪽 테이블에 일치하는 값이 없으면 NULL.


📌 3. RIGHT OUTER JOIN

🔹 의미

  • 오른쪽 테이블의 모든 행을 포함하고, 왼쪽 테이블에 일치하는 값이 있으면 가져오고, 없으면 NULL.

🔹 기본 사용법

SELECT A.*, B.*
FROM TableA AS A
RIGHT OUTER JOIN TableB AS B ON A.id = B.id;

🔹 예시

LEFT JOIN의 반대. 오른쪽 기준으로 모두 보여줌.


📌 4. FULL OUTER JOIN

🔹 의미

  • 양쪽 테이블의 모든 행을 포함하고, 일치하는 값이 없으면 NULL.
  • 공통값이 있는 행은 합쳐지고, 없는 건 NULL.

🔹 기본 사용법

SELECT A.*, B.*
FROM TableA AS A
FULL OUTER JOIN TableB AS B ON A.id = B.id;

📌 5. CROSS JOIN

🔹 의미

  • 모든 조합(Cartesian Product)을 반환.
  • A 테이블의 행 수 × B 테이블의 행 수 만큼 결과가 나옴.
  • 조인 조건을 쓰지 않음.

🔹 기본 사용법

SELECT A.*, B.*
FROM TableA AS A
CROSS JOIN TableB AS B;

💡 실전 예제 (응용 조합)

🔸 예제 테이블

  • employees(emp_id, name, dept_id)
  • departments(dept_id, dept_name)

🔸 INNER JOIN: 직원이 속한 부서 표시

SELECT e.name, d.dept_name
FROM employees AS e
INNER JOIN departments AS d ON e.dept_id = d.dept_id;

🔸 LEFT OUTER JOIN: 모든 직원과 소속 부서 (없는 경우 NULL)

SELECT e.name, d.dept_name
FROM employees AS e
LEFT OUTER JOIN departments AS d ON e.dept_id = d.dept_id;

🔸 RIGHT OUTER JOIN: 모든 부서와 그에 속한 직원 (없는 경우 NULL)

SELECT e.name, d.dept_name
FROM employees AS e
RIGHT OUTER JOIN departments AS d ON e.dept_id = d.dept_id;

🔸 FULL OUTER JOIN: 부서 또는 직원 중 어느 쪽이든 존재하면 표시

SELECT e.name, d.dept_name
FROM employees AS e
FULL OUTER JOIN departments AS d ON e.dept_id = d.dept_id;

🔸 CROSS JOIN: 직원 × 부서 조합 (모든 경우의 수)

SELECT e.name, d.dept_name
FROM employees AS e
CROSS JOIN departments AS d;

🔧 활용 팁 및 주의 사항

조인 종류 주로 사용되는 상황 주의사항
INNER JOIN 일치하는 데이터만 필요한 경우 데이터 누락 가능성 있음
LEFT JOIN 기준 테이블의 데이터는 무조건 필요할 때 NULL 처리 필요
RIGHT JOIN 상대 테이블의 모든 데이터를 보존해야 할 때 사용 빈도 낮음
FULL JOIN 양쪽의 전체 데이터를 다 확인하고 싶을 때 결과가 많아질 수 있음
CROSS JOIN 테스트용 조합, 드물게 사용 데이터량 폭발 위험

✅ 마무리 요약

  • INNER JOIN: 공통된 값이 있는 경우만
  • LEFT JOIN: 왼쪽 테이블 기준, 없는 건 NULL
  • RIGHT JOIN: 오른쪽 테이블 기준, 없는 건 NULL
  • FULL JOIN: 양쪽 모두 보존, 없는 건 NULL
  • CROSS JOIN: 모든 조합 (A×B)