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

2025. 3. 20. 15:49·Database
목차
  1. 📌 1. JOIN이란?
  2. 📌 2. INNER JOIN (내부 조인)
  3. ✅ INNER JOIN 기본 구조
  4. ✅ 사용자와 주문 정보를 INNER JOIN으로 조회
  5. 📌 3. LEFT JOIN (왼쪽 조인)
  6. ✅ LEFT JOIN 기본 구조
  7. ✅ 사용자 정보와 주문 정보를 LEFT JOIN으로 조회
  8. 📌 4. RIGHT JOIN (오른쪽 조인)
  9. ✅ RIGHT JOIN 기본 구조
  10. ✅ 주문 정보를 기준으로 사용자 정보 조회
  11. 📌 5. FULL JOIN (전체 조인)
  12. ✅ FULL JOIN 기본 구조
  13. ✅ 사용자와 주문 데이터를 FULL JOIN으로 조회
  14. 📌 6. 테이블의 데이터만 삭제 - TRUNCATE
  15. ✅ 테이블 초기화
  16. ✅ 마무리 및 정리

 

🚀 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

'Database' 카테고리의 다른 글

Database - Chapter 4-22. 2) 실습 - mysqlsample data 분석(1/2)  (0) 2025.03.21
Database - Chapter 3-21 실습 -간단한 스키마 설계하기  (0) 2025.03.20
Database - Chapter 3-19. SQL (DML) 심화(파이썬으로 데이터 랜덤 생성)  (0) 2025.03.20
Database - Chapter 3-18. SQL (DML) 심화(테이블 생성)  (0) 2025.03.20
Database - Chapter 3-17. SQL (DML) 기초(데이터 제거)  (0) 2025.03.20
  1. 📌 1. JOIN이란?
  2. 📌 2. INNER JOIN (내부 조인)
  3. ✅ INNER JOIN 기본 구조
  4. ✅ 사용자와 주문 정보를 INNER JOIN으로 조회
  5. 📌 3. LEFT JOIN (왼쪽 조인)
  6. ✅ LEFT JOIN 기본 구조
  7. ✅ 사용자 정보와 주문 정보를 LEFT JOIN으로 조회
  8. 📌 4. RIGHT JOIN (오른쪽 조인)
  9. ✅ RIGHT JOIN 기본 구조
  10. ✅ 주문 정보를 기준으로 사용자 정보 조회
  11. 📌 5. FULL JOIN (전체 조인)
  12. ✅ FULL JOIN 기본 구조
  13. ✅ 사용자와 주문 데이터를 FULL JOIN으로 조회
  14. 📌 6. 테이블의 데이터만 삭제 - TRUNCATE
  15. ✅ 테이블 초기화
  16. ✅ 마무리 및 정리
'Database' 카테고리의 다른 글
  • Database - Chapter 4-22. 2) 실습 - mysqlsample data 분석(1/2)
  • Database - Chapter 3-21 실습 -간단한 스키마 설계하기
  • Database - Chapter 3-19. SQL (DML) 심화(파이썬으로 데이터 랜덤 생성)
  • Database - Chapter 3-18. SQL (DML) 심화(테이블 생성)
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (597) N
      • Python (32)
      • 프로젝트 (43)
      • 과제 (25)
      • Database (40)
      • 멘토링 (10)
      • 특강 (29)
      • 기술블로그 (32)
      • 기술블로그-Django편 (136) N
      • 기술블로그-Flask편 (35)
      • AI 분석 (4) N
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (61)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
Database - Chapter 3-20. SQL (DML) 심화(데이터 조인)

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.