[MySQL] 6편 JOIN, EQUI JOIN, NON-EUQI JOIN, OUTER JOIN, SELF JOIN 알아보기

Hailey·2021년 1월 17일
2

MySQL

목록 보기
6/9
post-custom-banner

JOIN

관계형 데이터베이스란 데이터베이스 내에 있는 테이블이나 스키마들이 서로 관계를 가지고 있다는 뜻입니다. 그렇다면 이러한 관계를 이용해서 SQL을 작성하기도 해야 할 텐데, 이럴 때 사용하는 게 바로 join 입니다.

join을 사용해서 여러 테이블이나 스키마에 분산되어 있는 데이터를 하나의 view로 출력하게 하는 것입니다.


EQUI JOIN

양쪽 테이블의 어떤 칼럼에 같은 값이 존재할 때 이것을 Equal 연산자(=)를 이용하여 양쪽에 다 존재하는 값만 결과로 출력하는 join입니다. inner join이라고도 불립니다.

  • employee
nameteam_namephone_num
이지은마케팅010-1234-567X
천우희영업010-2382-293X
고윤정개발010-4927-289X
홍유나디자인010-2932-498X
김제니디자인010-9298-384X
  • dept
nameemail
마케팅marketing@naver.com
영업sales@naver.com
개발develop@naver.com
디자인design@naver.com
 select e.name as 사원이름, d.email as 이메일 문의 주소 
 from employee e , dept d 
 where e.team_name = d.name;
  • 결과
사원이름이메일 문의 주소
이지은marketing@naver.com
천우희sales@naver.com
고윤정develop@naver.com
홍유나design@naver.com
김제니design@naver.com

NON EQUI JOIN

Equi join과 반대 개념입니다. 두 테이블을 서로 join 할 때, 서로 다른 값을 가지거나, 한쪽 데이터가 다른 쪽 테이블의 데이터 범위 내에 있는 것만 출력을 원할 때 쓰는 join 방법입니다. Non Equi join 역시 inner join에 속합니다.

  • customer
namepoint
이지은10
천우희25
고윤정15
홍유나35
김제니20
  • gift
giftnamepoint_frompoint_to
에어프라이어05
로봇청소기615
마사지기1620
전자레인지2130
공기청정기3140
select c.name as 고객명, c.point as 고객포인트, g.giftname as 상품명 
from customer c , gift g 
where c.point between g.point_from and g.point_to;
고객명고객포인트상품명
이지은10로봇청소기
천우희25전자레인지
고윤정15로봇청소기
홍유나35공기청정기
김제니20마사지기

OUTER JOIN

outer join은 한쪽을 기준으로 하여 다른 쪽에 key값이 일치하는 게 없더라도 모두 출력을 하는 join 기법입니다.

필요시에 꼭 써야 하는 outer join이지만 필요 없을 땐 쓰지 않아야 합니다. outer join은 모든 데이터를 다 가지고 올 때 full scan을 하기 때문에 DB에 무리를 가할 수 있기 때문입니다.

예를 들어, 막 채용된 신입사원들에게 아직 부서가 주어지지 않았을 수 있습니다.

  • employee
namedeptphone_num
이지은마케팅010-1234-567X
천우희영업010-2382-293X
고윤정해외영업010-4927-289X
홍유나마케팅010-2932-498X
김제니인사010-9298-384X
이지수null010-3228-334X
박현아null010-2409-030X
  • senior
deptsenior_name
마케팅이미희
영업박영수
해외영업김현미
마케팅이영희
인사최여울

이런 경우 두 테이블을 일반 inner join으로 join 한다면 전체 사원에서 아직 부서가 배정되지 않은 사원들은 빠지게 됩니다.

select e.name, e.dept, s.senior_name
from employee e 
left outer join senior s 
on e.dept = s.dept;
namedeptsenior_name
이지은마케팅이미희
천우희영업박영수
고윤정해외영업김현미
홍유나마케팅이미희
김제니인사최여울
이지수nullnull
박현아nullnull

따라서 아직 배정받지 않은 모든 사원들을 출력해야 할 때는 outer join을 사용합니다.


SELF JOIN

Self join은 자기 자신의 테이블과 다시 join을 하는 경우를 말합니다.

profile
Cloud Solution Architect - Customer Success in security💗🌎
post-custom-banner

0개의 댓글