본문 바로가기

DATA

마케터를 위한 실무 SQL 노트 ④ JOIN

반응형

이번 포스팅에서는 SQL 구문 JOIN을 알아보도록 하겠습니다. 

JOIN

JOIN은 동일한 의미를 가지는 컬럼의 값을 기준으로 테이블을 합칠 때 사용하는 구문이에요. 보통 목적에 따라서 테이블을 만들기 때문에, 하나의 테이블에 내가 원하는 데이터가 없는 경우가 많아요. 원하는 데이터를 하나의 테이블에서 검색할 수 없는 경우, 두 개 이상의 테이블을 합쳐줘야하죠.
 
JOIN의 종류는 Inner Join, Right Join, Left Join, Outer Join, Cross Join, Self Join 총 6가지가 있어요.

INNER JOIN

INNER JOIN은  두 테이블에서 일치하는 값만 출력하는 구문이에요. 보통 실무에서 가장 많이 활용하는 것 같아요.

SELECT + [컬럼]
FROM + [테이블 A] 
INNER JOIN +[테이블 B];
ON [테이블 A].[컬럼 A] = [테이블 B].[컬럼 B];

 

SELECT *
FROM table1
INNER JOIN table2
ON table1.column = table2.column;

 
[예제]
Q. 김가나,김지은님의 주문 내역(상품명/상품 개수)을 추출해 주세요.

SELECT Users.user_id, Orders.sku_name,Orders.amount
FROM Users
INNER JOIN Orders
ON Users.user_id = Orders.user_id;

> Users 테이블과 Orders 테이블에서 공통 값인 user_id를 기준으로 테이블을 합쳐주고, 공통 값만 불러옵니다. 

LEFT JOIN

LEFT JOIN은 왼쪽 테이블에 있는 값만 합치는 구문이에요.오른쪽 테이블에서 일치하는 행이 없으면 Null 값이 반환됩니다.

SELECT + [컬럼]
FROM + [테이블 A] 
LEFT JOIN +[테이블 B];
ON [테이블 A].[컬럼 A] = [테이블 B].[컬럼 B];
SELECT *
FROM table1
LEFT JOIN table2
ON table1.column = table2.column;

[예제]

SELECT *
FROM Users
LEFT JOIN Orders
ON Users.user_id = Orders.user_id;

Users 테이블을 기준으로 Orders 테이블을 합치기 때문에, Orders 테이블에 있으나 Users 테이블에 없는 경우 Null값으로 노출됩니다. 

RIGHT JOIN

RIGHT JOIN은 말 그대로 LEFT JOIN과 반대겠죠? 오른쪽 테이블에 있는 값만 합치는 구문이에요. 왼쪽 테이블에서 일치하는 행이 없으면 Null 값이 반환됩니다.

SELECT + [컬럼]
FROM + [테이블 A] 
RIGHT JOIN +[테이블 B];
ON [테이블 A].[컬럼 A] = [테이블 B].[컬럼 B];
SELECT *
FROM table1
RIGHT JOIN table2
ON table1.column = table2.column;

[예제]

SELECT *
FROM Users
RIGHT JOIN Orders
ON Users.user_id = Orders.user_id;

Orders 테이블을 기준으로 Users 테이블을 합치기 때문에, Users 테이블에 있으나 Orders 테이블에 없는 경우 Null값으로 노출됩니다. 

 

SELF JOIN

SELF JOIN은 쉽게 말해 같은 테이블에 있는 값을 합치는 구문이에요. 1개의 테이블에 가상으로 별칭을 부여하여, 2개 테이블인 것처럼 간주한 뒤 JOIN 하는거죠. 위계가 있는 데이터를 다룰 때 가장 빈번하게 사용합니다. 

SELECT + [컬럼]
FROM + [테이블 A] as A1
INNER JOIN +[테이블 A]; as A2
ON A1.[컬럼 A] = A2.[컬럼 A];
SELECT * 
FROM table1 t1 
INNER JOIN table1 t2 
ON t1.column = t2.column;

[예제]

SELECT * 
FROM Users as A
INNER JOIN Users as B;

 

CROSS JOIN

CROSS JOIN은 두 테이블에 있는 모든 값을 각각 합치는 구문이에요. 두 테이블의 각 행의 개수를 곱한 값이 CROSS JOIN한 전체 행의 개수라고 생각하시면 돼요. 실무에서는 거의 사용할 일이 없는 것 같고, 보통 대규모 데이터를 생성할 때 사용한다고 하네요.

SELECT + [컬럼]
FROM + [테이블 A] 
CROSS JOIN +[테이블 B];
SELECT *
FROM table1
CROSS JOIN table2;
SELECT *
FROM Users
CROSS JOIN Orders;

 

FULL JOIN

FULL JOIN은 양쪽 테이블에 있는 모든 값을 합치는 구문이에요. 두 테이블에 하나라도 들어가 있지 않는 값은 모두 NULL로 표시됩니다. 

SELECT + [컬럼]
FROM + [테이블 A] as A1
INNER JOIN +[테이블 A]; as A2
ON A1.[컬럼 A] = A2.[컬럼 A];
SELECT *
FROM table1
FULL OUTER JOIN table2
ON table1.column = table2.column;
SELECT *
FROM Users
FULL OUTER JOIN Orders
ON Users.user_id = Orders.user_id;

 
 
* 참고 사이트 :
https://learnsql.com/blog/illustrated-guide-sql-self-join/

반응형