데이터베이스와 sql

SQL 입문, 04장 테이블을 서로 통합하는 조인 알아보기(1)

_Jin_ 2024. 2. 17.

https://www.youtube.com/playlist?list=PLG7te9eYUi7usbPInfbh24eE3lsbjGxRw

 

Do it! SQL 입문

굵직한 글로벌 기업의 현직 데이터베이스 전문가가 20년간의 기업 실무와 강의 경험을 아낌없이 담았습니다! 실제 나스닥 주식, 국가 통계 포털의 데이터베이스로 현업에서 바로 사용 가능한 표

www.youtube.com

< 이지스 퍼블리싱의 ' Do It ! SQL 입문 ' 강의를 학습하며 정리합니다.>

 

JOIN 

 

위의 그림과 같은 2개의 테이블이 있으며, 
nasdaq_company에는 기업의 정보와 stock에는 날짜에 해당하는 거래의 정보가 있다고 고려해보자.
만약, 기업의 정보와 함께 거래가 발생한 날짜의 정보가 필요하며 이를 합쳐서 보고싶은 경우 사용하는 것이 Join이다.

즉 Join은 두 개 이상의 테이블이나 데이터베이스를 연결하여 데이터를 검색하는 방법으로 검색하고 싶은 컬럼이 다른 테이블에 있을 경우 주로 사용하며, 여러 테이블을 마치 하나의 테이블인 것처럼 활용하는 방법이다. 

(1) 기본적인 Join 사용법 

이전 03장에서 배웠던 SQL 구문과 같이 테이블에서 데이터를 조회한다. 다만 FROM 부분을 보면,
' table1 as T1 JOIN [table2] as T2 on T1.col1 = T2.col1 '으로 JOIN문이 사용되고 있다. 

이는 table1(별칭 T1)과 table2(별칭 T2)의 각각 col1을 비교하며 합쳐진(Join한) 데이터를 보겠다는 의미이다. 


(2) Join의 종류 

- INNER JOIN

INNER JOIN은 키 값이 있는 테이블의 컬럼 값을 비교 후에 조건이 맞는 값을 조회한다. (공통된 값)

위의 그림을 예시로 쿼리문을 작성해보자면, 
SELECT * FROM Customers INNER JOIN Orders ON Customers.CustomerId = Orders.CustomerId 이다. 


- OUTTER JOIN

LEFT OUTER JOIN은 조인하는 여러 테이블에서 한 쪽에 데이터가 있고 한쪽에 데이터가 없는 경우 데이터가 있는 쪽 테이블의 내용을 전부 출력한다. 즉 조건에 만족하지 않아도 해당 행을 출력하고 싶을 때 사용한다. ( 한 쪽의 데이터는 온전히 유지하며 다른 테이블의 공통된 데이터만 함께 조회한다. )

위의 그림을 예시로 쿼리문을 작성해보자면, 
SELECT * FROM Customers LEFT JOIN Orders ON Customers.CustomerId = Orders.CustomerId 이다. 
LEFT의 기준은 FROM Customers LEFT JOIN Orders 에서 Customers 가 좌측에 있어 LEFT이다. 

RIGHT OUTER JOIN의 경우이다. LEFT JOIN과 같은 원리로 조회하는 JOIN문이기에 설명은 더 하지 않겠다. 


만약, 두 테이블에서 공통 부분이 제거된 순수한 한쪽 데이터만 조회하고 싶다면, WHERE문을 사용한다. 



- FULL OUTTER JOIN

FULL OUTER JOIN은 LEFT OUTER JOIN과 RIGHT OUTER JOIN을 합친 것이다. 
여기에 양쪽 모두 조건이 일치하지 않는것까지 모두 결합하여 조회할 수 있다. 

한편, 두 테이블에서 교집합 부분만 제외하고 조회하고 싶다면, WHERE A.key is NULL OR B.key is NULL 구문을 사용하여 작성할 수 있다. 

ex ) FULL OUTER JOIN의 예시
SELECT * FROM Customers FULL JOIN Orders ON Customers.CustomerId = Orders.CustomerId

# 흔히 많이 사용하는 쿼리문은 아니지만 특정 조건에서 어떠한 행위(?)를 탐색하기 위해서 사용될 수 있다. 예를 들어, 회원과 주문이 있는 경우 회원으로 등록은 되었지만 주문이 없거나 / 주문은 발생했지만 회원으로 등록하지 않은 경우와 같은 내용을 파악하고 싶을 때 사용한다.(데이터의 이상치)


- CROSS JOIN

CROSS JOIN은 조인에 포함된 테이블의 카티션(Cartesian) 곱을 산출한다.
 ♣ 카티션곱은 N개의 행을 가진 테이블과 M개의 행을 가진 테이블이 N*M의 테이블인 모든 경우의 수를 조회하는 것이다. 

이 경우에는 ON 구문이 생략된다. ( 모든 행에 대해서 모든 경우의 수를 보여주기에 ) 
실제로 CROSS JOIN은 정말 사용이 드물며 만약 사용한다면 전체 사용자에게 특정 품목을 지급하는 경우, 즉 모든 회원에게 지급하려는 상품의 데이터를 생성할 수 있겠다. 

Where절이 포함되면 INNER JOIN으로 적용된다. 


- SELF JOIN 

테이블의 행을 같은 테이블 안에 있는 다른 행과 조인하는 경우이다. 
주로 계층적인 구조를 테이블화 할 경우에 많이 사용되며, 
반드시 테이블에 Alias명( as )을 사용해서 작성한다.  

예로 사원 테이블이 있을 경우에 나의 팀장이 누군지, 사수가 누군지와 같이 
내가 속한 테이블에서 계층적인 구조와 데이터를 파악하는 경우 사용한다. 


☞ ON절과 WHERE절
ON절은 JOIN에 대한 조인 조건이며, WHERE은 결과에 대한 필터 조건이다.
둘을 많이 헷갈려 하기 때문에 주의 필요!

 

댓글