그 동안 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_COLOR 와 MEMBER의 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 데이터가 결합된 것을 볼 수 있다.
'DB' 카테고리의 다른 글
[DB] JOIN ON 과 WHERE 의 차이 (1) | 2023.03.27 |
---|---|
[DB] 데이터베이스 정규화 (0) | 2022.01.13 |
[MySQL] Replication 적용기 - 1 (4) | 2021.10.22 |
[MariaDB] Docker Container에 올렸던 DB서버 로컬로 빼내기 (0) | 2021.09.11 |
댓글