Database

Database - Chapter 3-20. SQL (DML) 심화(데이터 조인)

Chansman 2025. 3. 20. 15:49

 

🚀 SQL 데이터 조인(JOIN) 완벽 가이드

SQL에서 두 개 이상의 테이블을 연결하여 하나의 결과 테이블처럼 출력하는 방법을 정리했습니다. 🎯
이 글을 통해 INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN의 개념과 차이점을 확실하게 익혀보세요!


📌 1. JOIN이란?

🔹 개념

  • JOIN은 두 개 이상의 테이블을 연결하여 관련된 데이터를 조회하는 기능입니다.
  • 각 테이블의 **공통 키(Primary Key, Foreign Key 등)**를 활용하여 데이터를 결합합니다.

📌 대표적인 JOIN의 종류

  1. INNER JOIN공통된 데이터만 조회
  2. LEFT JOIN왼쪽 테이블은 모두 포함, 오른쪽 테이블과 일치하는 데이터만 포함
  3. RIGHT JOIN오른쪽 테이블은 모두 포함, 왼쪽 테이블과 일치하는 데이터만 포함
  4. FULL JOIN두 테이블의 모든 데이터 포함, 매칭되지 않으면 NULL 처리

📌 2. INNER JOIN (내부 조인)

🔹 개념

  • INNER JOIN은 양쪽 테이블에서 공통되는 데이터만 조회하는 조인 방식입니다.
  • 매칭되지 않는 데이터는 포함되지 않습니다.

INNER JOIN 기본 구조

sql
 
 
SELECT * FROM TABLE_A
INNER JOIN TABLE_B 
ON TABLE_A.key = TABLE_B.key;

설명

  • ON TABLE_A.key = TABLE_B.key → 두 테이블을 연결하는 기준(공통 키)

사용자와 주문 정보를 INNER JOIN으로 조회

sql
 
SELECT * FROM users
INNER JOIN orders ON users.user_id = orders.user_id;

설명

  • users 테이블과 orders 테이블을 user_id를 기준으로 연결
  • 주문이 있는 사용자만 조회됨 (주문이 없는 사용자는 제외됨)

📌 3. LEFT JOIN (왼쪽 조인)

🔹 개념

  • LEFT JOIN은 왼쪽 테이블(users)의 모든 데이터를 포함하며,
    오른쪽 테이블(orders)과 일치하는 데이터가 있으면 함께 조회합니다.
  • 매칭되지 않는 오른쪽 테이블의 값은 NULL로 표시됩니다.

LEFT JOIN 기본 구조

sql
 
SELECT * FROM TABLE_A
LEFT JOIN TABLE_B 
ON TABLE_A.key = TABLE_B.key;

설명

  • TABLE_A의 모든 데이터가 유지됨
  • TABLE_B에 매칭되는 데이터가 없으면 NULL 표시

사용자 정보와 주문 정보를 LEFT JOIN으로 조회

sql
 
SELECT * FROM users
LEFT JOIN orders ON users.user_id = orders.user_id;

설명

  • users 테이블의 모든 데이터를 유지하면서,
    orders 테이블에서 user_id가 일치하는 경우에만 데이터를 포함
  • 주문을 한 사용자 정보와 주문을 하지 않은 사용자 정보까지 포함

📌 4. RIGHT JOIN (오른쪽 조인)

🔹 개념

  • RIGHT JOIN은 오른쪽 테이블(orders)의 모든 데이터를 포함하며,
    왼쪽 테이블(users)과 일치하는 데이터가 있으면 함께 조회합니다.
  • 매칭되지 않는 왼쪽 테이블의 값은 NULL로 표시됩니다.

RIGHT JOIN 기본 구조

sql
 
SELECT * FROM TABLE_A
RIGHT JOIN TABLE_B 
ON TABLE_A.key = TABLE_B.key;

설명

  • TABLE_B의 모든 데이터가 유지됨
  • TABLE_A에 매칭되는 데이터가 없으면 NULL 표시

주문 정보를 기준으로 사용자 정보 조회

sql
 
SELECT * FROM users
RIGHT JOIN orders ON users.user_id = orders.user_id;

설명

  • orders 테이블의 모든 데이터를 유지하면서,
    users 테이블에서 user_id가 일치하는 경우에만 데이터를 포함
  • 주문한 사용자 정보만 표시되며, 주문이 없는 사용자는 표시되지 않음

📌 5. FULL JOIN (전체 조인)

🔹 개념

  • FULL JOIN은 두 테이블의 모든 데이터를 포함하며,
    매칭되지 않는 경우 NULL로 표시됩니다.
  • MySQL에서는 FULL JOIN을 기본적으로 지원하지 않으므로 UNION을 사용하여 구현합니다.

FULL JOIN 기본 구조

sql
 
SELECT * FROM TABLE_A
LEFT JOIN TABLE_B ON TABLE_A.key = TABLE_B.key
UNION
SELECT * FROM TABLE_A
RIGHT JOIN TABLE_B ON TABLE_A.key = TABLE_B.key;

설명

  • LEFT JOIN과 RIGHT JOIN을 결합(UNION)하여 두 테이블의 모든 데이터를 포함

사용자와 주문 데이터를 FULL JOIN으로 조회

sql
 
SELECT * FROM users
LEFT JOIN orders ON users.user_id = orders.user_id
UNION
SELECT * FROM users
RIGHT JOIN orders ON users.user_id = orders.user_id;

설명

  • 모든 사용자와 주문 정보를 포함
  • 매칭되지 않는 데이터는 NULL로 표시됨

📌 6. 테이블의 데이터만 삭제 - TRUNCATE

🔹 개념

  • TRUNCATE는 테이블의 모든 데이터를 빠르게 삭제하는 SQL 명령어입니다.
  • DELETE FROM과 달리 각 행을 개별적으로 삭제하는 것이 아니라, 테이블을 한 번에 초기화합니다.

테이블 초기화

sql
 
TRUNCATE TABLE users;

설명

  • users 테이블의 모든 데이터를 삭제하지만 테이블 구조는 유지됨
  • AUTO_INCREMENT 값도 초기화됨 (새로운 데이터 삽입 시 ID가 1부터 시작)

💡 DELETE FROM과의 차이점

비교 항목DELETE FROMTRUNCATE TABLE
삭제 방식 한 행씩 삭제 테이블 전체 초기화
WHERE 사용 가능 여부 가능 불가능
속도 느림 (트랜잭션 지원) 빠름
AUTO_INCREMENT 초기화 유지됨 초기화됨

✅ 마무리 및 정리

이제 SQL에서 INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN을 활용하는 방법을 익혔습니다! 🚀
또한 TRUNCATE를 사용하여 테이블을 초기화하는 방법도 배웠습니다.

📌 정리

JOIN 유형포함 데이터설명
INNER JOIN 공통 데이터만 포함 두 테이블에서 일치하는 데이터만 반환
LEFT JOIN 왼쪽 테이블 모두 포함, 오른쪽 매칭 데이터만 포함 왼쪽 데이터 유지, 매칭되지 않으면 NULL
RIGHT JOIN 오른쪽 테이블 모두 포함, 왼쪽 매칭 데이터만 포함 오른쪽 데이터 유지, 매칭되지 않으면 NULL
FULL JOIN 두 테이블 모두 포함 매칭되지 않는 데이터는 NULL