INNER JOIN, LEFT JOIN, RIGHT JOIN 차이점이 헷갈리나요? 초보자도 쉽게 이해할 수 있도록 개념부터 실전 예제까지 쏙쏙 정리했습니다! 데이터베이스 활용 능력을 한 단계 업그레이드하세요. 🚀
SQL 왕초보 가이드 - 1단계: JOIN 완전 정복! 🎯
📢 SQL, 어렵지 않아요!
여러분, SQL의 세계에 오신 걸 환영합니다! 🏆
"데이터를 자유롭게 다루고 싶은데, SQL이 너무 어렵다!"고 생각하시나요? 걱정 마세요.
오늘은 JOIN(조인) 을 활용해 여러 테이블에서 데이터를 가져오는 방법을 쉽게 배워볼 거예요! 😎
1️⃣ INNER JOIN
- 가장 기본적인 조인
👉 직원(employees
)과 부서(departments
) 정보를 결합해 조회해볼까요?
✅ 목표:
- 직원(
employee_name
)과 해당 부서(department_name
) 정보를 가져오기
📌 예제 테이블 스키마
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
employee_name VARCHAR(50),
department_id INT
);
CREATE TABLE departments (
department_id INT PRIMARY KEY,
department_name VARCHAR(50)
);
📌 예제 데이터
INSERT INTO employees VALUES (1, 'Alice', 1), (2, 'Bob', 2), (3, 'Charlie', 3);
INSERT INTO departments VALUES (1, 'HR'), (2, 'IT'), (3, 'Sales');
📌 기대 결과
employee_name | department_name |
---|---|
Alice | HR |
Bob | IT |
Charlie | Sales |
📌 SQL 정답
SELECT employee_name, department_name
FROM employees e
INNER JOIN departments d
ON e.department_id = d.department_id;
✅ 설명
INNER JOIN
은 두 테이블에서 일치하는 데이터만 가져오는 조인이에요.ON
조건을 사용해 어떤 필드끼리 연결할지 지정해야 해요. 여기서는department_id
를 기준으로 조인했어요.
2️⃣ LEFT JOIN
- 부서가 없을 수도 있다?!
👉 직원은 있지만 부서가 없을 수도 있어요!
✅ 목표:
- 직원 정보는 무조건 포함하고, 부서 정보가 없으면
NULL
값 표시
📌 예제 데이터
INSERT INTO employees VALUES (4, 'David', NULL);
📌 기대 결과
employee_name | department_name |
---|---|
Alice | HR |
Bob | IT |
Charlie | Sales |
David | NULL |
📌 SQL 정답
SELECT employee_name, department_name
FROM employees e
LEFT JOIN departments d
ON e.department_id = d.department_id;
✅ 설명
LEFT JOIN
은 왼쪽(기준) 테이블의 모든 데이터를 가져오고, 오른쪽 테이블의 데이터가 없으면NULL
을 반환해요.- 즉, 부서가 없는 직원도 조회할 수 있어요!
📌 부서가 없는 직원만 조회하려면?
SELECT employee_name, department_name
FROM employees e
LEFT JOIN departments d
ON e.department_id = d.department_id
WHERE d.department_name IS NULL;
✅ 이렇게 하면 부서가 없는 직원만 출력됩니다! 🏆
3️⃣ RIGHT JOIN
- 부서 정보는 유지하면서 직원 데이터를 가져오기
👉 모든 부서를 포함하면서, 직원이 없는 부서도 조회해볼까요?
📌 예제 데이터
INSERT INTO departments VALUES (4, 'Marketing');
📌 기대 결과
employee_name | department_name |
---|---|
Alice | HR |
Bob | IT |
Charlie | Sales |
NULL | Marketing |
📌 SQL 정답
SELECT employee_name, department_name
FROM employees e
RIGHT JOIN departments d
ON e.department_id = d.department_id;
✅ 설명
RIGHT JOIN
은 오른쪽(기준) 테이블의 모든 데이터를 가져오고, 왼쪽 테이블에 없는 값은NULL
로 표시해요.- 즉, 직원이 없는 부서도 포함됩니다!
📌 직원이 없는 부서만 보고 싶다면?
SELECT employee_name, department_name
FROM employees e
RIGHT JOIN departments d
ON e.department_id = d.department_id
WHERE e.employee_name IS NULL;
✅ 이렇게 하면 직원이 없는 부서만 출력됩니다! 🎯
4️⃣ FULL JOIN
- 모든 데이터를 가져오기!
👉 직원과 부서를 모두 포함하는 SQL을 작성해볼까요?
(🚨 MySQL에서는 FULL JOIN
이 없으므로 UNION
을 활용해야 해요!)
📌 기대 결과
employee_name | department_name |
---|---|
Alice | HR |
Bob | IT |
Charlie | Sales |
David | NULL |
NULL | Marketing |
📌 SQL 정답 (MySQL)
SELECT employee_name, department_name
FROM employees e
LEFT JOIN departments d
ON e.department_id = d.department_id
UNION
SELECT employee_name, department_name
FROM employees e
RIGHT JOIN departments d
ON e.department_id = d.department_id;
✅ 설명
LEFT JOIN
+RIGHT JOIN
을UNION
으로 합쳐FULL JOIN
과 같은 효과를 낼 수 있어요!UNION
을 사용하면 중복이 제거되지만, 중복을 포함하려면UNION ALL
을 사용하면 됩니다.
📌 중복을 포함하는 SQL
SELECT employee_name, department_name
FROM employees e
LEFT JOIN departments d
ON e.department_id = d.department_id
UNION ALL
SELECT employee_name, department_name
FROM employees e
RIGHT JOIN departments d
ON e.department_id = d.department_id;
🎯 1단계 마무리!
오늘 배운 내용 기억하시나요? 🏆
✅ INNER JOIN - 공통 데이터만 조회
✅ LEFT JOIN - 왼쪽 테이블 데이터 유지, 오른쪽에 없는 데이터는 NULL
✅ RIGHT JOIN - 오른쪽 테이블 데이터 유지, 왼쪽에 없는 데이터는 NULL
✅ FULL JOIN - 두 테이블을 모두 포함 (UNION
으로 구현 가능)
📌 다음 단계에서는 더 복잡한 JOIN과 실전 문제를 다뤄볼 예정이에요! 🚀
SQL이 쉬워지는 그날까지, 함께해요! 😆
관련 시리즈 몰아보기
[SQL 02] GROUP BY & 집계 함수 완벽 가이드 | 데이터 분석을 위한 필수 SQL 📊
[SQL 03-1] 서브쿼리 최적화 | 성능을 10배 높이는 실전 가이드 🚀
'SQL 왕초보 가이드' 카테고리의 다른 글
[SQL 03-2] SQL 윈도우 함수 완벽 정리! 🚀 초보도 쉽게 배우는 순위 & 누적 합계 계산법! (0) | 2025.02.10 |
---|---|
[SQL 03-1] 서브쿼리 최적화 | 성능을 10배 높이는 실전 가이드 🚀 (0) | 2025.02.06 |
[SQL 02] GROUP BY & 집계 함수 완벽 가이드 | 데이터 분석을 위한 필수 SQL 📊 (0) | 2025.02.06 |