SQL JOIN 구문

습토리·2025년 2월 15일

SQL

목록 보기
8/12
post-thumbnail

1. JOIN이란 무엇인가요? 🤔

SQL에서 JOIN두 개 이상의 테이블을 연결하여 관련된 데이터를 함께 조회할 수 있는 강력한 도구입니다.
데이터베이스에서는 연관된 정보가 다른 테이블에 나뉘어 저장되는 경우가 많습니다.
JOIN을 사용하면 이러한 분리된 데이터들을 하나로 묶어 조회할 수 있습니다.

🧩 예제 시나리오:
employees(직원) 테이블departments(부서) 테이블이 있습니다.

👨‍💼 employees 테이블:

iddepartment_idname
1101르탄이
2102배캠이
3103구구이
4101이션이

🏢 departments 테이블:

idname
101인사팀
102마케팅팀
103기술팀

💡 이 두 테이블에서 '직원 이름'과 '부서 이름'을 함께 조회하려면? 👉 JOIN을 사용해야 합니다!


2. JOIN의 종류와 차이점 🔍

SQL에는 여러 JOIN이 있습니다. 아래에서 기본적인 JOIN 종류와 특징을 알아보겠습니다.


1️⃣ INNER JOIN (내부 조인)

두 테이블 모두에 존재하는 데이터만 반환합니다. 🎯

✅ SQL 코드:

SELECT employees.name, departments.name AS department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id;

📊 결과:
| name | department_name |
|--------|------------------|
| 르탄이 | 인사팀 |
| 배캠이 | 마케팅팀 |
| 구구이 | 기술팀 |
| 이션이 | 인사팀 |

🔍 실행 흐름:
1. employees 테이블에서 데이터 조회
2. departments 테이블과 department_idid를 기준으로 연결
3. 일치하는 데이터만 반환

⚠️ 주의사항:

  • INNER JOIN은 양쪽 테이블에 일치하는 데이터만 가져오기 때문에 일치하지 않는 행은 제외됩니다.

2️⃣ LEFT JOIN (LEFT OUTER JOIN)

왼쪽 테이블(첫 번째 테이블)의 모든 행을 반환하며, 오른쪽 테이블에 일치하는 데이터가 없으면 NULL을 반환합니다.

✅ SQL 코드:

SELECT employees.name, departments.name AS department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id;

📊 결과: (만약 employees.department_id104가 있었다면)
| name | department_name |
|--------|------------------|
| 르탄이 | 인사팀 |
| 배캠이 | 마케팅팀 |
| 구구이 | 기술팀 |
| 이션이 | 인사팀 |
| ??? | NULL |

🔍 실행 흐름:
1. 왼쪽 테이블(employees)의 모든 데이터 조회
2. 일치하는 경우 오른쪽 테이블(departments)의 데이터 연결
3. 일치하지 않는 행은 NULL 반환

💡 사용 사례:

  • 직원이 아직 부서에 배정되지 않은 경우 확인할 때 유용합니다.

3️⃣ RIGHT JOIN (RIGHT OUTER JOIN)

오른쪽 테이블(두 번째 테이블)의 모든 행을 반환하며, 왼쪽 테이블에 일치하는 데이터가 없으면 NULL을 반환합니다.

✅ SQL 코드:

SELECT employees.name, departments.name AS department_name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.id;

📊 결과: (만약 부서 중에 직원이 없는 경우가 있다면)
| name | department_name |
|--------|------------------|
| 르탄이 | 인사팀 |
| 배캠이 | 마케팅팀 |
| 구구이 | 기술팀 |
| NULL | ??? |

💡 사용 사례:

  • 부서별로 직원을 파악할 때 사용합니다.
  • 특히 '직원이 없는 부서'를 찾을 때 유용합니다.

4️⃣ FULL OUTER JOIN (전체 외부 조인) (MySQL 미지원)

양쪽 테이블의 모든 행을 반환하며, 일치하지 않는 경우 NULL을 반환합니다.

✅ SQL 코드: (MySQL에서는 UNION으로 구현)

SELECT employees.name, departments.name AS department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id
UNION
SELECT employees.name, departments.name AS department_name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.id;

💡 사용 사례:

  • 두 테이블의 모든 데이터를 비교할 때 사용합니다.

3. JOIN 실전 문제 풀이 🛠️

1️⃣ 모든 직원과 부서 이름 조회 (INNER JOIN)

SELECT employees.name, departments.name AS department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id;

2️⃣ 기술팀 소속 직원 조회

SELECT employees.name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id
WHERE departments.name = '기술팀';

3️⃣ 부서별 직원 수 계산

SELECT departments.name, COUNT(employees.id) AS employee_count
FROM departments
LEFT JOIN employees ON departments.id = employees.department_id
GROUP BY departments.name;

4️⃣ 직원이 없는 부서 찾기

SELECT departments.name
FROM departments
LEFT JOIN employees ON departments.id = employees.department_id
WHERE employees.id IS NULL;

4. 마무리 🎯

  • JOIN은 SQL에서 서로 다른 테이블 간의 관계를 연결해주는 핵심 도구입니다.
  • INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN차이점과 사용 사례를 이해하는 것이 중요합니다.
  • Spring Java를 다룰 때도 JPA에서 JOIN 전략을 설계할 때 꼭 필요한 개념입니다.

💡 기억하세요:

  • JOIN = 데이터의 관계를 하나로 연결하는 다리 🌉
  • JOIN 없이는 SQL 데이터베이스는 반쪽짜리! 😎

🚀 이제 SQL JOIN 구문이 두렵지 않을 거예요! 😊🔥")

profile
재미난 삶을 살다

0개의 댓글