본문 바로가기
Computer Science/DB

[데이터베이스] 조인(JOIN)

by brother_stone 2023. 5. 31.

조인

두 개 이상의 테이블을 묶어서 하나의 결과물을 만드는 것. 데이터 조회 시 다른 테이블의 데이터를 함께 조회할 때 사용한다.

 

조인의 종류

내부 조인(Inner Join)

내부 조인 시 두 테이블에 모두 존재하는 행만 출력한다.(=교집합)

기본형

SELECT <열>
FROM <첫번째 테이블>
	INNER JOIN <두번째 테이블> 
    ON <조인될 조건>
[WHERE 조건]

예시

SELECT * FROM TableA A
INNER JOIN TableB B ON
A.key = B.key

외부 조인(Outer Join)

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

왼쪽 외부 조인(Left Outer Join)

B의 일치하는 부분의 레코드와 함께 A를 기준으로 완전한 레코드 집합을 생성한다.

이때, A에만 존재하고  B에는 존재하지 않는 레코드가 있다면 해당 레코드의 B테이블 필드는 NULL이 된다.

 

+) 왼쪽을 기준으로 조인한다. 오른쪽을 뽑긴 뽑는데 왼쪽에 존재하는 것만 가져오겠다!
왼쪽에 존재하는 애들은 다 가져오고, 만약 오른쪽이 없으면 NULL로 채우면서까지 왼쪽을 가져옴

기본형

SELECT <열>
FROM <첫번째 테이블>
	LEFT JOIN <두번째 테이블> 
    ON <조인될 조건>
[WHERE 조건]

예시

SELECT * FROM TableA A
LEFT JOIN TableB B ON
A.key = B.key

오른쪽 외부 조인(Right Outer Join)

A의 일치하는 부분의 레코드와 함께 B를 기준으로 완전한 레코드 집합을 생성한다.

이때, B에만 존재하고  A에는 존재하지 않는 레코드가 있다면 해당 레코드의 A테이블 필드는 NULL이 된다.

 

+) 오른쪽을 기준으로 조인한다. 왼쪽을 뽑긴 뽑는데 오른쪽에 존재하는 것만 가져오겠다!
오른쪽에 존재하는 애들은 다 가져오고, 만약 왼쪽이 없으면 NULL로 채우면서까지 왼쪽을 가져옴

기본형

SELECT <열>
FROM <첫번째 테이블>
	RIGHT JOIN <두번째 테이블> 
    ON <조인될 조건>
[WHERE 조건]

예시

SELECT * FROM TableA A
RIGHT JOIN TableB B ON
A.key = B.key

합집합 조인 | 완전 외부 조인(Full Outer Join)

왼쪽 외부 조인과 오른쪽 외부 조인이 합쳐진 형태. 두 테이블 중 한쪽에 들어 있는 내용이 결과로 출력됨.

 

+) Inner, Left outer, Right outer 조인 집합을 모두 출력하는 조인 방식

SELECT * FROM TableA A
FULL OUTER JOIN TableB B ON
A.key = B.key

 

크로스 조인 (Cross Join)

첫 번째 테이블의 각 행에 대해 두 번째 테이블의 모든 행을 결합. 

결과 테이블의 행 수는 첫 번째 테이블의 행 수와 두 번째 테이블의 행 수를 곱한 크기가 된다.

 


예시

출처:&nbsp; 혼자 공부하는 SQL

내부 조인(Inner Join)

예시 1) member테이블에 buy테이블 내부 조인

SELECT * 
   FROM buy
     INNER JOIN member
     ON buy.mem_id = member.mem_id;

결과

예시 2) buy테이블에 member테이블 내부 조인

SELECT * 
   FROM member
     INNER JOIN buy
     ON buy.mem_id = member.mem_id;

결과


왼쪽 외부 조인(Left Outer Join)

예시 1) member테이블에 buy테이블 왼쪽 조인

SELECT *
   FROM member M
     LEFT JOIN buy B
     ON M.mem_id = B.mem_id
   ORDER BY M.mem_id;

결과

왼쪽 테이블(member)의 모든 행이 결과 테이블에 표시되나, 오른쪽 테이블에 존재하지 않는 행은 NULL


오른쪽 외부 조인(Right Outer Join)

예시 1) member테이블에 buy테이블 오른쪽 조인

 SELECT *
   FROM member M
     RIGHT JOIN buy B
     ON M.mem_id = B.mem_id
   ORDER BY M.mem_id;

결과


 

 

출처:

혼자 공부하는 SQL 유튜브: https://www.youtube.com/watch?v=tuQFkzjqEGw 

https://daeun-computer-uneasy.tistory.com/17

 

메모

---

1:N관계에서 driving table을 정할 땐 일반적으로 N인 테이블을 선택한다.

inner join은 겹치는 것만, outer join은 모든 데이터를 전부 불러올 때 사용

 

N인 테이블을 기준으로 outer join할 때 left는 N인 테이블 right는 1인 테이블이 되게 되는데, 이 때 불러올 데이터를 기준으로 left outer인지 right outer인지를 정한다. 

1인 테이블을 불러오고 싶을 땐 right outer를 사용하면 된다.