티스토리 뷰

반응형

SQL에서 JOIN은 여러 테이블의 데이터를 서로 연결해서 조회하는 핵심 기능입니다.
실무에서는 단순 조회보다 JOIN이 훨씬 많이 사용되며, 성능 문제도 대부분 JOIN 구조에서 발생합니다.

대표적인 JOIN 종류는 아래와 같습니다.

  • INNER JOIN
  • LEFT OUTER JOIN
  • RIGHT OUTER JOIN
  • FULL OUTER JOIN
  • CROSS JOIN
  • SELF JOIN

JOIN 기본 개념

예시 테이블

회원 테이블 (member)

1 김철수
2 이영희
3 박민수

주문 테이블 (orders)

100 1 노트북
101 1 키보드
102 2 마우스

관계:

member.member_id = orders.member_id

즉 회원 번호 기준으로 연결됩니다.


1. INNER JOIN

가장 많이 사용하는 JOIN.

두 테이블에서 조건이 일치하는 데이터만 조회합니다.

SELECT
    M.name,
    O.product
FROM member M
INNER JOIN orders O
    ON M.member_id = O.member_id;

결과:

김철수 노트북
김철수 키보드
이영희 마우스

박민수는 주문 내역이 없으므로 제외됩니다.


2. LEFT OUTER JOIN

왼쪽 테이블 기준으로 모두 조회합니다.

오른쪽 테이블에 데이터가 없어도 NULL로 표시됩니다.

SELECT
    M.name,
    O.product
FROM member M
LEFT JOIN orders O
    ON M.member_id = O.member_id;

결과:

김철수 노트북
김철수 키보드
이영희 마우스
박민수 NULL

3. RIGHT OUTER JOIN

오른쪽 테이블 기준으로 모두 조회합니다.

SELECT
    M.name,
    O.product
FROM member M
RIGHT JOIN orders O
    ON M.member_id = O.member_id;

실무에서는 LEFT JOIN으로 대부분 대체 가능해서 사용 빈도가 낮습니다.


4. FULL OUTER JOIN

양쪽 테이블 데이터를 모두 조회합니다.

한쪽에만 존재하는 데이터도 포함됩니다.

SELECT
    M.name,
    O.product
FROM member M
FULL OUTER JOIN orders O
    ON M.member_id = O.member_id;

 

MySQL 방식:

SELECT ...
FROM A
LEFT JOIN B ...

UNION

SELECT ...
FROM A
RIGHT JOIN B ...

5. CROSS JOIN

모든 경우의 수를 조합합니다.

카테시안 곱(Cartesian Product)이라고도 합니다.

SELECT *
FROM member
CROSS JOIN orders;

결과 개수:

member 건수 × orders 건수

3명 × 3주문 = 9건


 

6. SELF JOIN

자기 자신 테이블을 JOIN.

주로 조직도 구조에서 사용합니다.

직원 테이블

1 대표  
2 팀장 1
3 사원 2

SELECT
    E.name AS 직원명,
    M.name AS 관리자명
FROM employee E
LEFT JOIN employee M
    ON E.manager_id = M.emp_id;

JOIN 실행 순서 이해

SELECT *
FROM A
JOIN B
ON A.id = B.id
WHERE A.status = 'Y';

실행 개념:

1. FROM
2. JOIN
3. ON 조건
4. WHERE
5. GROUP BY
6. HAVING
7. ORDER BY

즉 JOIN 후 WHERE 필터링.


ON vs WHERE 차이

매우 중요합니다.

잘못된 예

SELECT *
FROM member M
LEFT JOIN orders O
    ON M.member_id = O.member_id
WHERE O.product = '노트북';

이렇게 하면 NULL 제거되어 INNER JOIN처럼 동작합니다.


올바른 방식

SELECT *
FROM member M
LEFT JOIN orders O
    ON M.member_id = O.member_id
   AND O.product = '노트북';

LEFT JOIN 유지 가능.


JOIN 성능 핵심

 

1. JOIN 컬럼 인덱스 필수

ON A.user_id = B.user_id

이면 둘 중 최소 한쪽은 인덱스 필요.

보통 FK 컬럼에 생성.


2. 데이터 건수 적은 것부터 필터

좋은 예:

WHERE order_date >= SYSDATE - 1

먼저 대상 줄이기.


3. SELECT * 지양

불필요 컬럼 조회는 성능 저하.

SELECT id, name

처럼 필요한 컬럼만.


INNER JOIN 일치 데이터만
LEFT JOIN 왼쪽 전체 유지
RIGHT JOIN 오른쪽 전체 유지
FULL OUTER JOIN 양쪽 전체 유지
CROSS JOIN 모든 조합
SELF JOIN 자기 자신 연결
INNER JOIN  = 교집합
LEFT JOIN   = 왼쪽 기준 전체
RIGHT JOIN  = 오른쪽 기준 전체
FULL JOIN   = 합집합
CROSS JOIN  = 모든 경우의 수
SELF JOIN   = 자기 자신 연결

 

#SQLJOIN
#INNERJOIN
#LEFTJOIN
#OUTERJOIN
#DBJOIN
#SQL튜닝
#SQL성능
#오라클JOIN
#MYSQLJOIN
#MARIADBJOIN
#ANSIJOIN
#데이터베이스
#SQL기초
#SQL실무
#개발자

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/07   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함
반응형