🚀 SQL 데이터 조인(JOIN) 완벽 가이드
SQL에서 두 개 이상의 테이블을 연결하여 하나의 결과 테이블처럼 출력하는 방법을 정리했습니다. 🎯
이 글을 통해 INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN의 개념과 차이점을 확실하게 익혀보세요!
📌 1. JOIN이란?
🔹 개념
- JOIN은 두 개 이상의 테이블을 연결하여 관련된 데이터를 조회하는 기능입니다.
- 각 테이블의 **공통 키(Primary Key, Foreign Key 등)**를 활용하여 데이터를 결합합니다.
📌 대표적인 JOIN의 종류
- INNER JOIN → 공통된 데이터만 조회
- LEFT JOIN → 왼쪽 테이블은 모두 포함, 오른쪽 테이블과 일치하는 데이터만 포함
- RIGHT JOIN → 오른쪽 테이블은 모두 포함, 왼쪽 테이블과 일치하는 데이터만 포함
- 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 |