본문 바로가기

Back-end/MySQL

[MySQL] Join 깔끔한 이해와 사용법

 

 

 

상단의 그림 정말 정리가 잘 되어 있습니다. 처음 접할 때 보고도 저게뭔가 싶었는데

초심자의 입장에서 이해하기 쉽도록 설명해보려합니다.

 

1. LEFT JOIN

 

A, B 테이블 중에

A값의 전체와, A의 KEY 값과 B KEY 값이 같은 결과를 리턴

 

무슨말인가 싶다.. 그냥 눈으로 보고 이해하자. 필자는 글로 이해하는게 너무 싫음

 

 

A라는 테이블을 보자

 

 

 

 

B라는 테이블을 보자

 

 

이 두 테이블이 각 A와 B 집합이라고 하자

 

이중에서 우리는 두 테이블 ID값으로 A와 B의 LEFT JOIN을 실행해 볼 것이다.

 

A LEFT JOIN B 는

 

위에올라가서 다시 보자

 

A값의 전체와, A의 KEY 값과 B KEY 값이 같은 결과를 리턴

 

 

결과를 예상해보자 어떤결과일까?

 

A의 ID값과 B의 ID값이 같은 값이 연결되고

 

ID가 일치하지 않는다면 연결되는 값이 없을 것이다

 

 

결과

 

 

 

A의 ID가 3인값은 B에 3의 값이 2개이므로 2개가 연결되어 표기되고,

A의 ID가 4인 값은 B에 4가 없으므로 연결되지 않고 NULL로 표기되었다.

 

A의 값은 다 있으며, 테이블의 KEY값이 일치한 값을 연결해서 SELECT해주었다.

 

쿼리는

select
 a.id,
 a.name,
 a.age,
 b.school,
 b.explanation
from a
left join b on a.id = b.id
order by a.id asc
;

 

 

JOIN 사용 쿼리는

 

SELECT ~~

FROM TABLE_A

LEFT JOIN TABLE_B ON TABLE_A.KEY = TABLE_B.KEY

가 기본이다.

 

참고로 JOIN은 컬럼을 나누는게 아니라 ROW를 나누는 것이므로, 헷갈리지 않았으면 한다.

 

컬럼기준으로하면

A테이블의 ID, NAME, AGE B테이블의 ID 4개의 컬럼만 SELECT되는게 아니란 것이다.

 

JOIN은 모든 컬럼을 조회할 수 있으며, 두개의 테이블을 연결시킨 row값을 나타내는 것이다.

 

궁금하면 select * from 쿼리를 날려보자.

2. LEFT JOIN (IS NULL)

 

순수 A의 값만 뽑을 것이다. 쿼리는

 

select
 a.id,
 a.name,
 a.age,
 b.school,
 b.explanation
from a
left join b on a.id = b.id
where b.id is null
order by a.id asc
;

 

 

where절이 추가되었다.

 

결과를 예상해보자.

 

중복된 것이 없다라고하면 LEFT JOIN 의 결과에서 B테이블과 연결이 없는

 

A의 ID가 4,6 인 값들이 검색될 것이다.

 

 

 

 

2-1. RIGHT JOIN 은 LEFT JOIN과 대상 테이블만 다르므로 생략함.

 

 

 

 

 

3. INNER JOIN

 

ID값이 서로 중복되는 값만 나타낸다.

 

 

쿼리는 생략.

 

 

 

4. FULL OUTER JOIN

 

MySQL은 FULL OUTER JOIN이 없다.

 

그래서 LEFT JOIN 과 RIGHT JOIN을 이용해 FULL OUTER JOIN을 사용할 수 있다.

 

select
 a.id,
 a.name,
 a.age,
 b.school,
 b.explanation
from a
LEFT join b on a.id = b.id
union
select
 a.id,
 a.name,
 a.age,
 b.school,
 b.explanation
from a
right join b on a.id = b.id
order by id asc
;

 

UNION으로 합쳐서 표현하였다.

 

 

 

 



출처: https://yoo-hyeok.tistory.com/98 [유혁의 개발 스토리]