본문 바로가기
SQL

[SQL] 자주 쓰는 join에 대해 알아보자(left join ,inner join, union join)

by 병든늑대 2022. 1. 4.

 

내가 원하는 데이터를 추출하려면 기본적으로 조인을 정말 많이 사용하게 된다.

왜냐하면 한 테이블에만 원하는 정보가 있지 않기 때문에

여러 테이블의 정보를 조합해서 딱 필요한 정보만, 알잘딱깔센!스있게 뽑기 위해서다.

 

조인에 대한 것은 구글에 검색만 해도 이렇게 친절하게 잘 나오니까

나는 내가 실무에서 잘 쓰는 것 위주로 3개를 가져와봤다.

어떨 때 사용하는지도 간단한 예시와 함께.

 

 

 

 

 

1. Left Join

아마도 제일 많이 사용하는 조인인 것 같다.

아래 쿼리를 해석하자면. 키값 mem을 기준으로 A 테이블 옆에 B 테이블을 그대로 붙여달라는 이야기다.

A테이블에는 있는데 B테이블에 없으 땐 null 값으로 뜬다.

추출값은 A테이블과 B테이블 두개 다 나온다.

 

그래서 A 테이블에 접속일자와 접속자자만 있고 주문 번호가 없다면,

B테이블에 있는 주문번호를 옆에 붙여서 하나의 테이블로 볼 수 있다.

접속만 했고 주문을 하지 않았으면 주문번호가 null로 붙겠지.

 

나는 주로 맨 처음 기본으로 쓸 전체테이블을 만들 때 많이 사용한다.

select *
from A
left join B
on a.mem = b.mem

 

 

2. inner join 

두번째로 많이 사용하는 조인이다.

해석하자면 키값 mem을 기준으로 A와 B 공통으로 있는 값만 붙이는 거다. 

추출 값은 A테이블 값과 B테이블 값 두개 다 나온다. 

 

주로 특정 이벤트에 참여한 사람을 1차로 걸러낼 때 쓴다. 

특정 쿠폰을 쓴 사람만 추출해줘. 이런식으로.

select *
from A
inner join B
on a.mem = b.mem

 

 

3. Union Join

자주는 아니고 가끔 쓰는 조인이다.

이걸 쓰면 데이터가 아주 방대해지기 때문에(...) 아껴쓴다.(?)

A테이블 아래에 B테이블을 그대로 붙여넣어달라는 뜻인데, 컬럼 모양이 똑같아야 실행된다.

이걸 쓴 경우는, 서비스마다 첫주문을 저장하는 테이블이 달라서

전부 합쳐서 서비스 전체의 최초 첫 주문을 알아보고 싶을 때 썼다.

(ex.쿠키런,쿠키런 킹덤 중 어떤 게임을 더 먼저 했는지 알고 싶을 때)

select *
from
    (select mem_no, ord_no
    from A

    Union Join 

    select mem_no, ord_no
    from B )

 

 

댓글