SQL에서 JOIN은 두 개 이상의 테이블을 연결하여 관련된 데이터를 함께 조회할 수 있는 강력한 도구입니다.
데이터베이스에서는 연관된 정보가 다른 테이블에 나뉘어 저장되는 경우가 많습니다.
JOIN을 사용하면 이러한 분리된 데이터들을 하나로 묶어 조회할 수 있습니다.
🧩 예제 시나리오:
employees(직원) 테이블과 departments(부서) 테이블이 있습니다.
employees 테이블:| id | department_id | name |
|---|---|---|
| 1 | 101 | 르탄이 |
| 2 | 102 | 배캠이 |
| 3 | 103 | 구구이 |
| 4 | 101 | 이션이 |
departments 테이블:| id | name |
|---|---|
| 101 | 인사팀 |
| 102 | 마케팅팀 |
| 103 | 기술팀 |
💡 이 두 테이블에서 '직원 이름'과 '부서 이름'을 함께 조회하려면? 👉 JOIN을 사용해야 합니다!
SQL에는 여러 JOIN이 있습니다. 아래에서 기본적인 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_id와 id를 기준으로 연결
3. 일치하는 데이터만 반환
⚠️ 주의사항:
왼쪽 테이블(첫 번째 테이블)의 모든 행을 반환하며, 오른쪽 테이블에 일치하는 데이터가 없으면 NULL을 반환합니다.
✅ SQL 코드:
SELECT employees.name, departments.name AS department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id;
📊 결과: (만약 employees.department_id에 104가 있었다면)
| name | department_name |
|--------|------------------|
| 르탄이 | 인사팀 |
| 배캠이 | 마케팅팀 |
| 구구이 | 기술팀 |
| 이션이 | 인사팀 |
| ??? | NULL |
🔍 실행 흐름:
1. 왼쪽 테이블(employees)의 모든 데이터 조회
2. 일치하는 경우 오른쪽 테이블(departments)의 데이터 연결
3. 일치하지 않는 행은 NULL 반환
💡 사용 사례:
오른쪽 테이블(두 번째 테이블)의 모든 행을 반환하며, 왼쪽 테이블에 일치하는 데이터가 없으면 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 | ??? |
💡 사용 사례:
양쪽 테이블의 모든 행을 반환하며, 일치하지 않는 경우 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;
💡 사용 사례:
SELECT employees.name, departments.name AS department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id;
SELECT employees.name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id
WHERE departments.name = '기술팀';
SELECT departments.name, COUNT(employees.id) AS employee_count
FROM departments
LEFT JOIN employees ON departments.id = employees.department_id
GROUP BY departments.name;
SELECT departments.name
FROM departments
LEFT JOIN employees ON departments.id = employees.department_id
WHERE employees.id IS NULL;
💡 기억하세요:
🚀 이제 SQL JOIN 구문이 두렵지 않을 거예요! 😊🔥")