SQL 왕초보 가이드

[SQL 01] JOIN 쉽게 이해하기 | 초보자를 위한 SQL 기초 강좌 📊

devnewsletter 2025. 2. 6. 09:14
반응형

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 JOINUNION으로 합쳐 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배 높이는 실전 가이드 🚀

 

반응형