STUDY/MySQL

MySQL/ 기본 문법 #3

sh.ds 2023. 10. 19. 20:34

JOIN

💡 JOIN은 여러 테이블로 나뉜 정보를 조합하는 결합 함수다. 

 

➕ LEFT JOIN

LEFT JOIN은 자주 쓰이는 JOIN이다. 두 테이블 중 한 테이블의 일부 정보를 타 테이블 기준으로 결합하는 방식이다.

 

SELECT *
FROM table_a
LEFT
JOIN table_b
ON table_a.column_1=table_b.column_1

 

두 테이블은 table_a의 데이터를 기준으로 JOIN하게 된다. 

a테이블의 정보는 전부 출력되고 b테이블은 column_1 데이터 중 a테이블에도 존재하는 정보를 출력한다.

 

예시 코드와 결과는 이렇다.

SELECT 
	A.ordernumber
    , B.country
FROM orders A
LEFT 
JOIN customers B
ON A.customernumber = B.customernumber;

 

위 코드는 테이블 "orders"와 "customers"의 "customernumber" 컬럼이 일치하는 데이터의

"ordernumber"와 "country"값을 출력한 결과이다.

"orders"가 기준이기 때문에 만일 "orders" 데이터 중 country 컬럼에 결측치가 있는 데이터가 있다면 Null로 표시된다.

 

➕ INNER JOIN

INNER JOIN은 두 테이블 간 공통적인 정보만 출력한다.

집합에서의 교집합의 개념이라고 생각할 수 있다.

 

다음 예시코드는 INNER JOIN을 사용해 'country'컬럼이 'USA'인 데이터의 'ordernumber'와 'country'를 출력하는 코드이다.

'orders', 'customers' 두 테이블의 'customernumber'가 일치하며 'USA'일 때의 데이터를 출력한다.

SELECT A.ordernumber, B.country
FROM classicmodels.orders A
INNER 
JOIN classicmodels.customers B
ON A.customernumber = B.customernumber
WHERE B.COUNTRY='USA';

 

➕ FULL JOIN

FULL JOIN을 앞서 사용한 집합의 개념으로 본다면 합집합의 개념이다.

두 테이블 간 매칭되는 데이터 모두를 출력하는 기능을 한다.

 

SELECT *
FROM orderdetails
FULL 
JOIN orders
;

orderdetails와 orders 사이의 매칭되는 모든 데이터가 출렸됐다. 실제 결과는 LIMIT 100 rows를 넘은 방대한 양의 데이터가 JOIN 됐다. 이처럼 FULL JOIN은 앞서 살펴본 JOIN 보다 방대한 양의 데이터를 만들어낸다.

 


CASE WHEN

 

CASE WHEN은 조건에 따른 값을 다르게 출력하고 싶을 때 사용한다.

 

SELECT 
	country
	, CASE WHEN country IN ('USA', 'Canada') THEN 'North America' ELSE 'OTHERS' END AS region
FROM customers;

이 코드는 'USA'와 'Canada'를 만족하는 'country' 데이터를 region이라는 새로운 컬럼에서 'North America'로 분류하고 나머지 국가를 'OTHERS'로 지정한다.

 

SELECT 
	CASE WHEN country IN ('USA', 'Canada') THEN 'North America' ELSE 'OTHERS' END AS region, 
    COUNT(customernumber) N_customers
FROM customers
GROUP BY CASE WHEN country IN ('USA', 'Canada') THEN 'North America' ELSE 'OTHERS' END;

 

위 코드는 이전 코드의 region을 기준으로 customer의 수를 count한 N_customers을 출력한다.

GROUP BY 코드에 사용된 CASE WHEN은 country가 아닌 region을 칼럼으로 설정할 수 있도록 한다. 

 


이번 포스팅은 여기까지다.