[SQL] JOIN의 종류와 사용법

Joney의 SW 공부 블로그·2023년 2월 26일
0

SQL

목록 보기
13/14

JOIN 이란

  • JOIN은 데이터베이스에서 여러개의 테이블의 레코드를 조합하여 하나의 새로운 테이블을 표현하는 방법
  • 테이블을 조합할 때는 가로로 테이블을 붙이게 됨

데이터 예시

  • 각 JOIN의 결과 값을 확인하기 위해서 테스트 데이터 생성
  • user 테이블
iduser_nameproduct_id
1김철수aa
2이영희bb
3박아무개cc
4최아무개dd
5정아무개NULL
6홍길동NULL
  • product 테이블
idproduct_idproduct_nameprice
1aa샴푸10000
2bb린스10000
3cc바디샴푸10000
4dd치약5000
5ee칫솔2000
6ff세제10000

JOIN의 종류 및 설명

INNER JOIN (JOIN)

  • 두 테이블의 교집합을 나타냄
  • INNER JOINJOIN이라고도 표시

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_nameproduct_idproduct_nameprice
김철수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_nameproduct_idproduct_nameprice
김철수aa샴푸10000
이영희bb린스10000
박아무개cc바디샴푸10000
최아무개dd치약5000
정아무개NULLNULLNULL
홍길동NULLNULLNULL

교집합을 빼는 경우

  • 이런 경우는 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_nameproduct_idproduct_nameprice
김철수aa샴푸10000
이영희bb린스10000
박아무개cc바디샴푸10000
최아무개dd치약5000
NULLee칫솔2000
NULLff세제10000

교집합을 빼는 경우

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

FULL OUTER JOIN

  • JOIN하는 테이블의 모든 레코드를 조회
  • MySQL에는 해당 기능을 지원하지 않으므로 LEFT JOINRIGHT JOINUNION을 해야 함

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_nameproduct_idproduct_nameprice
김철수aa샴푸10000
이영희bb린스10000
박아무개cc바디샴푸10000
최아무개dd치약5000
정아무개NULLNULLNULL
홍길동NULLNULLNULL
NULLee칫솔2000
NULLff세제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;
profile
SW 지식 노트 블로그

0개의 댓글