문과생의 우당탕탕 공부 기록

04. SELF 조인) EMPLOYEE테이블로 SELF JOIN이해하기, ||연산자 본문

SQL 공부/조인과 집계 데이터

04. SELF 조인) EMPLOYEE테이블로 SELF JOIN이해하기, ||연산자

드르렁쿨쿨 2023. 1. 12. 01:56

SELF JOIN은 말 그대로

SELF = 스스로

JOIN = 조인한다

라는 뜻이다.

 

의미: 같은 테이블끼리 특정 컬럼을 기준으로 매칭되는 컬럼을 출력하는 조인이다. 즉 같은 테이블의 데이터를 각각의 집합으로 분류한 후 조인한다.

 

table을 하나 만들어서

self join을 연습해보자

EMPLOYEE라는 테이블을 만들자

거기에 EMPLOYEE_ID 라는 PRIMARY KEY를 넣을 거고

FIRST_NAME은 255바이트의 글자로, NULL이 아니게

LAST_NAME도 마찬가지

그리고 여기에 추가적으로 MANAGER_ID라는 것을 넣을거야

이건 뭐냐면

FOREIGH KEY로 MANAGER_ID를 넣을건데, 이거에 대한 레퍼런스는 EMPLOYEE에서 갖고올거임

(MANAGER_ID는 EMPLOYEE테이블에서 참조했다는 뜻)

ON DELETE CASCADE를 하는 이유는, 부모테이블 ROW와 자식테이블 ROW를 함께 연결하기위해서이다.

 

다음으로

이런 값을 테이블에 넣을 것이다.

 

그래서 테이블이 이렇게 채워졌다.

여기까지가 설정값이고 , 이제 셀프조인하러 고고

 

셀프조인 과정1

EMPLOYEE를 가상의 두개의 집합으로 만들어서 하나는 E 하나는 M으로 만든것이다.

그 안에서 M의 EMPLOYEE_ID와 E의, MANAGER_ID는 사실상 같은 것이고

이름으로 출력하길 바란것이다. 

결과적으로 새로운 EMPLOYEE와 MANAGER 라는 이름안에

사람들의 FIRST_NAME+LAST_NAME으로 작성된 값이 들어가게되었다.

 

*여기에는 NULL값을 가진 WindyHays가 안나왔다.

 

 

sql에서 || 연산자

아 참고로 || 연산자는 문자연결 연산자이다.

E.first_NAME ||''|| E.LAST_NAME EMPLOYEE

이 SELECT 다음 문자는 E. FIRST_NAME문자와 E.LAST_NAME 문자를 합쳐서

=> 새로운 이름인 'EMPLOYEE'로 정해서 보여줘 라는 뜻이다.

그리고 ||이 표시는 엘지그램이나 삼성노트북에서는 엔터위에 있는 shift+원화키 누르면된다. 

이거는 파이썬에서도 자주 쓰이고, 다른 컴터 뭐 사용할 때도 자주 쓰이니 원화표시 알아두기를!

 

다시 이너조인으로 돌아와서

inner join과 left join의 비교

자 전부 똑같은 쿼리인데 inner join-> left join으로 바꿨다.

그러면 WindyHays가 manager null값을 가진채로 나타난다.

이유는!!

inner join은 둘다 서로가 서로의 집합에 존재하는 것만을 불러내는 것인데, WindyHays는 manager로 매칭되는 값이 없어서(=null값이어서) inner join때는 등장하지 못함.

근데 실무에서는 null값이 존재하더라도 일단은 전직원을 다 보고싶은 상황이 많아서

여기서 left join을 하면

manager가 있는 사람도 보고 + manager가 없는 사람도 보고싶다 가 되버린다!!

 

한번더 정리하면

지금 left join을 살펴보면

from  
        EMPLOYEE left join EMPLOYEE m

on M.EMPLOYEE_ID = E.MANAGER_ID

이렇게 되는거니까, 왼쪽인 employee는 일단 다 보자 (오른쪽인 employee manager랑 상관없이)

그리고 manager는 있으면 값이 채워지고, 없으면 null로 채워지는 것

 

self join을 다시 정리하자면

동일한 테이블에서-> 각각의 다른 가상의 집합으로 구성(=셀프조인) -> 그 다음 그 안에서 내가 원하는 정보 추출!!

 

*패캠 이경오 선생님의 말씀을 인용하였습니다.

Comments