JOIN / INNER JOIN / OUTER JOIN

a.rubz·2023년 1월 11일

SQL

목록 보기
3/3
post-thumbnail

📝 JOIN

📌 조인이란?

  • 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것

  • 예시

    회원 테이블(이름, 주소, 전화번호… ), 구매 테이블(물건, 가격…) 이 주어졌을 때,

    배송을 보내려면 구매 테이블과 회원 테이블의 정보가 둘다 필요

    두 테이블을 엮어서 하나의 배송을 위한 정보(이름, 주소, 물건)를 추출



📝 내부 조인 (INNER JOIN)

📌 INNER JOIN

  • 두 테이블을 연결할 때 내부 조인이 가장 많이 사용됨
SELECT <열 목록>
FROM <첫 번째 테이블>
	INNER JOIN <두 번째 테이블> #INNER JOIN은 'INNER' 생략가능
	ON <조인될 조건>
[WHERE 검색 조건]
#예시
#블랙핑크(BLK)가 구매한 물건의 목록에 회원정보 합치기
SELECT *
	FROM buy
	JOIN member
	ON buy.mem_id = member.mem_id
WHERE buy.mem_id = 'BLK';

📌 INNER JOIN 간결한 표현

  • 테이블 이름에 별칭을 붙여 사용
SELECT buy.mem_id, member.mem_name, buy.prod_name, member.addr
	FROM buy
		JOIN member
		ON buy.mem_id = member.mem_id;


#테이블 이름에 별칭을 붙이기
SELECT B.mem_id, M.mem_name, B.prod_name, M.addr
	FROM buy B
		JOIN member M
		ON B.mem_id = M.mem_id;


📝 외부 조인 (OUTER JOIN)

📌 OUTER JOIN

  • 두 테이블을 조인할 때 필요한 내용이 한 쪽 테이블에만 있어도 결과를 추출할 수 있음

  • JOIN 조건에 적합한 값이 없는 행도 반환할 때 사용

  • A, B 테이블을 JOIN할 경우, 조건에 맞지 않는 데이터도 표시하고 싶을 때 OUTER JOIN 사용

SELECT <열 목록>
FROM <첫 번째 테이블(LEFT 테이블)>
	<LEFT | RIGHT | FULL> OUTER JOIN <두 번째 테이블(RIGHT 테이블)>
	ON <조일될 조건>
[WHERE 검색 조건];
#예시
SELECT M.mem_id, M.mem_name, B.prod_name, M.addr
	FROM member M
		LEFT OUTER JOIN buy B
		ON M.mem_id = B.mem_id
	ORDER BY M.mem_id;

📌 LEFT OUTER JOIN

  • 왼쪽 테이블의 내용은 모두 출력되어야 함

  • OUTER 생략 가능

  • A LEFT OUTER JOIN B

    => A,B 테이블 간 조인 조건이 맞지 않는 A, B의 테이블의 데이터 중 A 테이블의 데이터는 무조건 결과값에 포함되어 나옴

    => A를 다 가져왔을 때, B 테이블에서 가져온 컬럼에 해당하는 값이 없으면 NULL 값으로 채움


📌 RIGHT OUTER JOIN

  • 오른쪽 테이블의 내용은 모두 출력되어야 함

  • OUTER 생략 가능

  • A RIGHT OUTER JOIN B

    => A,B 테이블 간 조인 조건이 맞지 않는 A, B의 테이블의 데이터 중 B 테이블의 데이터는 무조건 결과값에 포함되어 나옴

    => B를 다 가져왔을 때, A 테이블에서 가져온 컬럼에 해당하는 값이 없으면 NULL 값으로 채움


📌 OUTER JOIN 활용

  • prod_name이 NULL인 회원은 아직 구매한 이력이 한 번도 없는 회원

  • 이런 회원을 추출해 구매 촉진 이메일 등을 보낼 수 있음

#회원가입만 하고 한 번도 구매한 적이 없는 회원의 목록 추출
SELECT M.mem_id, M.mem_name, B.prod_name, M.addr
	FROM member M
		LEFT OUTER JOIN buy B
		ON M.mem_id = B.mem_id
	WHERE B.prod_name IS NULL
	ORDER BY M.mem_id


📝 그 밖의 조인 (이후 공부하기!)

  • 상호 조인 (CROSS JOIN)
  • 자체 조인 (SELF JOIN)
profile
🔥 개발 공부 🔥

1개의 댓글

comment-user-thumbnail
2023년 1월 11일

SQL마스터 룹신님 1따봉 드리겠읍니다,,

답글 달기