내가 원하는 데이터를 추출하려면 기본적으로 조인을 정말 많이 사용하게 된다.
왜냐하면 한 테이블에만 원하는 정보가 있지 않기 때문에
여러 테이블의 정보를 조합해서 딱 필요한 정보만, 알잘딱깔센!스있게 뽑기 위해서다.
조인에 대한 것은 구글에 검색만 해도 이렇게 친절하게 잘 나오니까
나는 내가 실무에서 잘 쓰는 것 위주로 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 )
'SQL' 카테고리의 다른 글
[SQL] 고객 잔존율을 구해보자 2 (8) | 2022.01.05 |
---|---|
[SQL] 고객 잔존율을 구해보자 (0) | 2022.01.04 |
[SQL] Create table / Drop table 알아보자 (0) | 2022.01.03 |
[SQL] RANK () OVER / ROW_NUMBER () OVER / DENSE()OVER 를 알아보자 (0) | 2022.01.03 |
[SQL] 자주 쓰는 날짜 함수 알아보자 (0) | 2022.01.03 |
댓글