DB

JOIN 정리 (INNER JOIN, LEFT JOIN, RIGHT JOIN)

에드박 2023. 3. 27. 10:05

그 동안 JOIN 종류에 대한 개념을 제대로 가지고 있지않아서 확실하게 정리하고 넘어가려고 합니다.

 

항목

- INNER JOIN

- LEFT JOIN

- RIGHT JOIN

 

예제 테이블 & 데이터

사용 DDL (MySQL 사용)

create table MEMBER(
  MEMBER_ID int primary key auto_increment,
  NAME varchar(20),
  FAVORITE_COLOR varchar(50)
);

create table ORDERS (
  ORDER_ID int primary key auto_increment,
  ORDER_COLOR varchar(50),
  ORDER_DATE timestamp,
  MEMBER_ID int,
  FOREIGN KEY (MEMBER_ID) REFERENCES MEMBER (MEMBER_ID)
);

insert into MEMBER(NAME, FAVORITE_COLOR) VALUES('찰리', 'GREEN');
insert into MEMBER(NAME, FAVORITE_COLOR) VALUES('할리', 'RED');
insert into MEMBER(NAME, FAVORITE_COLOR) VALUES('콜리', 'BLUE');
insert into MEMBER(NAME, FAVORITE_COLOR) VALUES('갈리', 'YELLOW');
insert into MEMBER(NAME, FAVORITE_COLOR) VALUES('메리', 'GREEN');
insert into MEMBER(NAME, FAVORITE_COLOR) VALUES('홀리', 'ORANGE');

insert into ORDERS(ORDER_COLOR ,ORDER_DATE, MEMBER_ID) VALUES('GREEN', now(), 1);
insert into ORDERS(ORDER_COLOR ,ORDER_DATE, MEMBER_ID) VALUES('RED', now(), 1);
insert into ORDERS(ORDER_COLOR ,ORDER_DATE, MEMBER_ID) VALUES('BLUE', now(), 1);
insert into ORDERS(ORDER_COLOR ,ORDER_DATE, MEMBER_ID) VALUES('PURPLE', now(), 2);
insert into ORDERS(ORDER_COLOR ,ORDER_DATE, MEMBER_ID) VALUES('GRAY', now(), 2);
insert into ORDERS(ORDER_COLOR ,ORDER_DATE, MEMBER_ID) VALUES('BLACK', now(), 3);

INNER JOIN

두 테이블을 결합하는데 교집합 부분만 가져온다.

select *
from ORDERS AS o
JOIN MEMBER AS m ON o.ORDER_COLOR = m.FAVORITE_COLOR;

ORDERS 의 ORDER_COLORMEMBER의 FAVORITE_COLOR 가 같을 때 행을 결합하여 가져오는것을 볼 수 있다.


LEFT JOIN

두 테이블을 결합하는데 왼쪽 테이블의 행은 모두 가져오고(ON 조건이 일치하지 않아도) 오른쪽은 ON 조건이 일치한 것만 결합된다.

select *
from ORDERS AS o
LEFT JOIN MEMBER AS m ON o.ORDER_COLOR = m.FAVORITE_COLOR;

ORDERS 의 데이터를 모두 가져오는데 MEMBER의 FAVORITE_COLOR  ORDERS의 ORDER_COLOR 같은 행만 MEMBER 데이터가 결합된 것을 볼 수 있다.


RIGHT JOIN

LEFT JOIN 과 반대라고 보면된다

두 테이블을 결합하는데 오른쪽 테이블의 행은 모두 가져오고 왼쪽은 ON 조건이 일치한 것만 결합된다.

select *
from ORDERS AS o
RIGHT JOIN MEMBER AS m ON o.ORDER_COLOR = m.FAVORITE_COLOR;

MEMBER 의 데이터를 모두 가져오는데 ORDERS의 ORDER_COLOR MEMBER의 FAVORITE_COLOR와 같은 행만 MEMBER 데이터가 결합된 것을 볼 수 있다.