[MySQL] Join의 종류

smlee·2022년 6월 3일
0

MySQL

목록 보기
2/6
post-thumbnail

우리는 관계형 데이터베이스를 설계할 때 중복을 최소화하여 설계를 한다.
그런데 만약 우리가 데이터를 가져올 때 하나의 테이블이 아니라 여러 개의 테이블에서
데이터를 가져와야하는 경우는 어떻게 해야할까?
Join을 사용하여 여러 테이블에서 데이터를 가져온다.

Join의 종류에는 inner join, left join, right join, full outer join이 있다.


위 그림은 Join의 종류를 나타내준 그림이다. 위와 같이 벤다이어그램으로 Join을 생각하면 쉽게 이해할 수 있다.

1. Inner join

inner join을 벤다이어그램으로 나타내면 교집합이다.
쿼리 문법은

테이블1 inner join 테이블2 on 조건;

이라는 형식으로 나타낸다.

만약 A와 B 테이블 두 개에서 userId가 같은 데이터들을 뽑아오고 싶으면 다음과 같이 쿼리문을 작성하면 된다.

SELECT *
FROM
	A inner join B
    on A.userId = B.userId;

라는 식으로 쿼리를 작성하면 된다.

2. Left join

Left join은 벤다이어그램으로 생각하면 A와 B 집합이 있을 때 A 집합을 나타낸다고 생각하면 된다.

테이블1 left join 테이블2 on 조건;

이라는 형식으로 쿼리문을 작성하면 된다.

만약 게시물테이블에서 해당 게시물의 게시물 사진 데이터를 가지고 오고 싶다고 생각을 해보자.
편의상 게시물 테이블을 A라고 생각해보고 게시물 사진 테이블을 B라고 생각해보자.
이때, 게시물들은 사진이 존재하는 게시물들도 있지만 사진이 없는 게시물들 역시 존재한다.
따라서 B에서 불러오는 데이터의 값은 없을 수도 있다.
이런 경우 left join을 사용한다.

SELECT *
FROM
	A left join B
    on A.postId = B.postId;

라는 형식으로 데이터를 가져오면 된다.

만약, 사진이 없는 게시물들만 불러오고 싶으면 어떻게 해야할까?

SELECT *
FROM
	A left join B
    on A.postId = B.postId
WHERE B.postId IS NULL;

이라는 형식으로 쿼리를 짜면 된다

3. Right join

Right join은 left join과 방향만 달라진 것이라고 생각하면 된다.
위의 예시에서 테이블 A와 B의 위치만 바꾸면 된다.

4. Full outer join

FULL OUTER JOINRIGHT JOINLEFT JOIN의 결과를 합한 것과 같다. 하지만, MySQL에서는 full outer join을 지원하지 않아 right joinleft join을 합한것으로 쿼리를 짜야한다.

0개의 댓글