JOIN 이란
JOIN
은 데이터베이스에서 여러개의 테이블의 레코드를 조합하여 하나의 새로운 테이블을 표현하는 방법
- 테이블을 조합할 때는 가로로 테이블을 붙이게 됨
데이터 예시
- 각 JOIN의 결과 값을 확인하기 위해서 테스트 데이터 생성
- user 테이블
id | user_name | product_id |
---|
1 | 김철수 | aa |
2 | 이영희 | bb |
3 | 박아무개 | cc |
4 | 최아무개 | dd |
5 | 정아무개 | NULL |
6 | 홍길동 | NULL |
id | product_id | product_name | price |
---|
1 | aa | 샴푸 | 10000 |
2 | bb | 린스 | 10000 |
3 | cc | 바디샴푸 | 10000 |
4 | dd | 치약 | 5000 |
5 | ee | 칫솔 | 2000 |
6 | ff | 세제 | 10000 |
JOIN의 종류 및 설명
INNER JOIN (JOIN)

- 두 테이블의 교집합을 나타냄
INNER JOIN
은 JOIN
이라고도 표시
example
SELECT u.user_name,p.product_id, p.product_name, p.price
FROM user u
JOIN product p ON u.product_id = p.product_id;
user_name | product_id | product_name | price |
---|
김철수 | aa | 샴푸 | 10000 |
이영희 | bb | 린스 | 10000 |
박아무개 | cc | 바디샴푸 | 10000 |
최아무개 | dd | 치약 | 5000 |
LEFT OUTER JOIN (LEFT JOIN)

- 두 테이블 중, 왼쪽에 있는 테이블에 오른쪽 테이블을 붙이는 개념
- A테이블에는 값이 있고 해당 레코드의 B테이블의 값이
NULL
이라도 NULL
값으로 조합이 됨
example
SELECT u.user_name,p.product_id, p.product_name, p.price
FROM user u
LEFT JOIN product p ON u.product_id = p.product_id;
user_name | product_id | product_name | price |
---|
김철수 | aa | 샴푸 | 10000 |
이영희 | bb | 린스 | 10000 |
박아무개 | cc | 바디샴푸 | 10000 |
최아무개 | dd | 치약 | 5000 |
정아무개 | NULL | NULL | NULL |
홍길동 | NULL | NULL | NULL |
교집합을 빼는 경우

- 이런 경우는 B테이블의 JOIN key가 NULL인 경우만 조회하면 됨
SELECT * FROM A
LEFT B ON A.key = B.key
WHERE B.key IS NULL
RIGHT OUTER JOIN (RIGHT JOIN)

- 두 테이블 중, 오른쪽에 있는 테이블에 왼쪽 테이블을 붙이는 개념
- B테이블에는 값이 있고 해당 레코드의 A테이블의 값이
NULL
이라도 NULL
값으로 조합이 됨
example
SELECT u.user_name,p.product_id, p.product_name, p.price
FROM user u
LEFT JOIN product p ON u.product_id = p.product_id;
user_name | product_id | product_name | price |
---|
김철수 | aa | 샴푸 | 10000 |
이영희 | bb | 린스 | 10000 |
박아무개 | cc | 바디샴푸 | 10000 |
최아무개 | dd | 치약 | 5000 |
NULL | ee | 칫솔 | 2000 |
NULL | ff | 세제 | 10000 |
교집합을 빼는 경우

SELECT * FROM A
LEFT B ON A.key = B.key
WHERE A.key IS NULL
FULL OUTER JOIN

- JOIN하는 테이블의 모든 레코드를 조회
- MySQL에는 해당 기능을 지원하지 않으므로
LEFT JOIN
과 RIGHT JOIN
을 UNION
을 해야 함
example
SELECT u.user_name,p.product_id, p.product_name, p.price
FROM user u
FULL OUTER JOIN product p ON u.product_id = p.product_id;
(SELECT u.user_name,p.product_id, p.product_name, p.price
FROM user u
LEFT JOIN product p ON u.product_id = p.product_id)
UNION
(SELECT u.user_name,p.product_id, p.product_name, p.price
FROM user u
RIGHT JOIN product p ON u.product_id = p.product_id);
user_name | product_id | product_name | price |
---|
김철수 | aa | 샴푸 | 10000 |
이영희 | bb | 린스 | 10000 |
박아무개 | cc | 바디샴푸 | 10000 |
최아무개 | dd | 치약 | 5000 |
정아무개 | NULL | NULL | NULL |
홍길동 | NULL | NULL | NULL |
NULL | ee | 칫솔 | 2000 |
NULL | ff | 세제 | 10000 |
교집합을 빼는 경우

SELECT u.user_name,p.product_id, p.product_name, p.price
FROM user u
FULL OUTER JOIN product p ON u.product_id = p.product_id
WHERE A.key IS NULL OR B.key IS NULL;