🌏 DataBase/MySQL

[DB] JOIN 정리 ( INNER / LEFT / RIGHT )

ryang x2 2021. 6. 25. 11:19
728x90
반응형

# JOIN  

둘 이상의 테이블을 연결해서 데이터를 검색하는 방법 

연결하려는 테이블들이 적어도 하나의 컬럼을 공유하고 있어야 한다.

이 공유하고 있는 컬럼을 PK 또는 FK 값으로 사용 한다.

 

1. INNER JOIN : 내부조인 -> 교집합

2. LEFT / RIGHT JOIN -> 부분집합 

 

 

● 예시  

TABLE A

ID NAME
1 김철수
2 이나영
3 삼순이

 

TABLE B

ID GENDER
1
2
4
5

 

1.  INNER JOIN 

- 교집합, 공통적인 부분만 SELECT

 

ID NAME GENDER
1 김철수
2 이나영
SELECT A.ID, A.NAME, B.GENDER
FROM A 
INNER JOIN B
ON A.ID = B.ID;

 

2. LEFT JOIN 

- 조인 기준 왼쪽에 있는거 '전부' SELECT ( 공통적인 부분 + LEFT에 있는것만 ) 

ID NAME GENDER
1 김철수
2 이나영
3 삼순이 NULL
SELECT A.ID, A.NAME, B.GENDER 
FROM A LEFT JOIN B 
ON A.ID = B.ID;	

 

2-1. 조인 기준 왼쪽에 있는것'만' SELECT (A-B) 

- LEFT가 가지고 있는 것 중 공통적인 부분을 제외한 값 

- LEFT JOIN 값 중에서 WHERE 조건으로 NULL인 값을 조회 하면 B가 NULL의 값을 가지고 있는 A의 값을 가지고 온다 

 

ID NAME GENDER
3 삼순이 NULL
SELECT A.ID, A.NAME, B.GENDER 
FROM A LEFT JOIN B 
ON A.ID = B.ID
WHERE B.ID IS NULL;	

( 쉽게 생각하면, A를 기준으로 LEFT JOIN 하고 , 겹치는 쪽을 빼기 위해서는 반대쪽 KEY NULL 하면 된다. )

 

 

3. RIGHT JOIN 

- 조인 기준 오른쪽에 있는 부분 '전부' SELECT 

 

ID NAME GENDER
1 김철수
2 이나영
4 NULL
5 NULL
SELECT A.ID, A.NAME, B.GENDER 
FROM A RIGHT JOIN B 
ON A.ID = B.ID;	

 

3-1. 공통적인 부분 제외 조인기준 오른쪽에 있는 부분만 SELECT (B-A) 

- RIGHT가 가지고 있는 것 중 공통적인 부분을 제외한 값 

- RIGHT JOIN 값 중에서 WHERE 조건으로 NULL 인 값을 조회 

ID NAME GENDER
4 NULL
5 NULL
SELECT A.ID, A.NAME, B.GENDER 
FROM A RIGHT JOIN B 
ON A.ID = B.ID
WHERE A.ID IS NULL;	

( 쉽게 생각하면, B를 기준으로 LEFT JOIN 하고 , 겹치는 쪽을 빼기 위해서는 반대쪽 KEY NULL 하면 된다. )

 

 

4. JOIN 

- A, B 테이블 전부 SELECT 

ID NAME GENDER
1 김철수
2 이나영
3 삼순이 NULL
4 NULL
5 NULL
SELECT A.ID, A.NAME, B.GENDER 
FROM A JOIN B 
ON A.ID = B.ID;	

 

4-1. 공통적인 부분을 제외하고 오른쪽 / 왼쪽에 있는 것만 SELECT 

ID NAME GENDER
3 삼순이 NULL
4 NULL
5 NULL
SELECT A.ID, A.NAME, B.GENDER 
FROM A JOIN B 
ON A.ID = B.ID
WHERE A.ID IS NULL OR B.ID IS NULL;	

 

 

 

참고 : https://pearlluck.tistory.com/46

728x90
반응형