본문 바로가기
개발자 전향 프로젝트

[DBMS] MySQL 의 기초 (2) JOIN

by 샘오리 2022. 8. 22.
728x90
반응형

사용하는 DBMS : MySQL

사용하는 툴: Workbench 8.0 CE

사용하는 스키마: World (샘플 스키마) 

사용하는 테이블: #1 city, #2 countrylanguage (샘플 테이블) + 예제 테이블

 

#1 테이블

city 테이블

 

#2 테이블

countrylanguage 테이블

#1 과 #2 테이블은 CountryCode라는 칼럼을 둘다 가지고 있다. 이러한 필드 또는 칼럼을 이용하여

두개의 테이블을 이어보려고 한다. 합류한다라는 뜻의 JOIN을 사용할 것이다. 

 

JOIN을 사용하는 목적 :

예를 들어 당신이 경찰이고 과속을 한 차량의 cctv 영상을 가지고 있다고 치자.

그러면 해당 cctv 영상을 토대로 해당 차량의 번호판을 판별해서

차량 소유주가 누구이고 그 사람이 살고 있는 주소로 벌금을 날리면 될 것이다.

 

그런데 차량과 해당 번호판 정보로 차량과 관련된 테이블을 조회해봤자

차량 소유주 이름만 나오지 소유주의 연락처 혹은 주소는 알 수가 없다.

 

차량 소유주 신상정보가 담긴 테이블을 가져와서 합친다면 차량 소유주의 신상정보 또한 알 수 있는 것이다.

 

이렇게 하나의 테이블로 원하는 정보를 찾을 수 없을 때 하나의 공통된 필드 혹은 칼럼을 기준으로

다른 테이블을 가져와서 하나의 테이블로 합치는 것을 JOIN이라 한다.

 

JOIN

JOIN은 데이터베이스 내의 여러 테이블에서 가져온 레코드를 조합하여 하나의 테이블로 표현한다.

 

3가지 유형의 JOIN

 

1. INNER JOIN

2. LEFT JOIN

3. RIGHT JOIN


INNER JOIN

모든 JOIN은 ON 절과 함께 사용되며, ON 절의 조건을 만족하는 데이터만을 가져온다.

문법

첫번째테이블이름 JOIN 두번째테이블이름

ON 조건

예시
COUNTRYLANGUAGE 테이블로만은 도시별로 인구수가 몇명인지 알 수 없기 때문에
국가코드가 일치하는 조건절에서 도시 이름과 인구수를 찾아볼 것이다.
 

SELECT Name, Population FROM city JOIN countrylanguage
ON city.CountryCode= countrylanguage.CountryCode;

 

실행 결과

INNER JOIN의 결과를 벤 다이어그램으로 나타내면 다음과 같다.

 

 


LEFT JOIN & RIGHT JOIN

LEFT JOIN은 첫 번째 테이블을 기준으로, 두 번째 테이블을 조합하는 JOIN이다.

 

이때 ON 절의 조건을 만족하지 않는 경우에는 첫 번째 테이블의 필드 값은 그대로 가져오고

두 번째 테이블의 필드 값은 모두 NULL로 표시된다.

 
문법

첫번째테이블이름 LEFT JOIN 두번째테이블이름

ON 조건

 

 

예제
Customer 라는 테이블이 아래와 같이 있고

 

Orders라는 테이블이 아래와 같이 있다면

ON Customer.ID = Orders.CUSTOMER_ID 라는 조건절로 Inner join을 했을 시
위 조건에 해당하는 3개의 튜플만 조회가 될 것이다.
하지만 LEFT JOIN을 해서 Customer 테이블이 기준이 된다면 우측 테이블인 Orders에 4번 5번 customer_id 의 대한 내용이 없다 하더라도 Customer 테이블 기준으로 join 한 것 이기에 그냥 null 값으로 데려오는 것이다. 
 
실행 결과
나는야 LEFT JOIN

 

 
여기서 만약 LEFT JOIN이 아니라 INNER JOIN 혹은 그냥 JOIN을 사용하게 된다면
4번과 5번은 교집합이 아니므로 아예 조회되어 나오지 않고
ID가 1번~3번까지인 내용만 조회되어 나오는 것이다.

나는야 INNER JOIN

LEFT JOIN의 결과를 벤 다이어그램으로 나타내면 다음과 같다.

 

 


RIGHT JOIN

LEFT JOIN의 반대 원리이다.

728x90
반응형