A 테이블 (회원)
id name
1 철수
2 영희
3 민수
B 테이블 (주문)
id item
1 사과
3 바나나
4 포도
INNER JOIN은 두 테이블에 모두 존재하는 데이터만 결과로 보여준다.
SELECT A.id, A.name, B.item
FROM A
INNER JOIN B ON A.id = B.id;
id name item
1 철수 사과
3 민수 바나나
📌 id가 A에도 있고 B에도 있는 값(1,3)만 출력된다.
LEFT JOIN은 왼쪽 테이블(A)의 데이터는 전부 유지한다.
오른쪽(B)에 매칭되는 값이 없으면 B 컬럼은 NULL이 된다.
SELECT A.id, A.name, B.item
FROM A
LEFT JOIN B ON A.id = B.id;
id name item
1 철수 사과
2 영희 NULL
3 민수 바나나
📌 A 테이블의 id=2는 주문이 없지만 A 기준으로 유지되므로 출력되고, 주문 컬럼(item)은 NULL이 된다.
RIGHT JOIN은 오른쪽 테이블(B)의 데이터는 전부 유지한다.
왼쪽(A)에 매칭되는 값이 없으면 A 컬럼이 NULL이 된다.
SELECT A.id, A.name, B.item
FROM A
RIGHT JOIN B ON A.id = B.id;
id name item
1 철수 사과
3 민수 바나나
4 NULL 포도
📌 id=4는 주문은 있지만 회원이 없기 때문에 name이 NULL로 출력된다.
실무에서는 RIGHT JOIN은 잘 안 쓰고, 보통 테이블 위치만 바꿔서 LEFT JOIN으로 처리한다.
예: A RIGHT JOIN B == B LEFT JOIN A
FULL OUTER JOIN은 A든 B든 한쪽이라도 존재하면 전부 출력한다.
매칭이 안 되는 쪽은 NULL 처리된다.
SELECT A.id, A.name, B.item
FROM A
FULL OUTER JOIN B ON A.id = B.id;
id name item
1 철수 사과
2 영희 NULL
3 민수 바나나
4 NULL 포도
📌 A에만 있는 id=2, B에만 있는 id=4도 모두 출력된다.
⚠️ MySQL은 기본적으로 FULL OUTER JOIN을 지원하지 않아 UNION으로 구현해야 한다.
🔥 JOIN 한 줄 요약
JOIN 종류 의미
INNER JOIN A와 B 둘 다 있는 데이터만
LEFT JOIN A 전체 유지, B는 있으면 붙임
RIGHT JOIN B 전체 유지, A는 있으면 붙임
FULL OUTER JOIN A+B 전체 출력 (한쪽만 있어도 출력)