본문 바로가기
코딩/SQL

[SQL] JOIN

by 미생22 2023. 2. 20.
728x90

1. 실습환경 만들기

우선, TV쇼에 대한 테이블을 만들어보자.

desc snl_show;로 잘 들어가있는지 확인해보자.

위 가상 데이터를 넣어준다.

2. JOIN 이론

지금까지 테이블 하나에서 검색을 했었는데, join을 알면 여러개의 테이블에서 겹치는 부분을 알아내 가져올 수 있다.

3. INNER JOIN

inner join의 경우 각 table간의 교집합을 생각하면 된다.

inner join ~ on~ 구문으로 on 뒤에 어떤 column 데이터를 기준으로 교집합을 형성할 것인지 설정해줘야한다.

또한 어떤 table의 column인지 알기 위해 column앞에 table.~으로 출처를 보여줘야한다.

select column1, column2, ...
from tableA
INNER JOIN tableB
ON tableA.column=tableB.column
where condition;

4. LEFT JOIN

두 개의 테이블에서 공통영역을 포함해 왼쪽 테이블의 다른 데이터를 포함하는 조인 방식.

from 뒤에 나온 tableA가 왼쪽 테이블이 된다.

select column1, column2, ...
from tableA
LEFT JOIN tableB
ON tableA.column=tableB.column
where condition;

예제를 통해 살펴보기위해 celeb테이블과 left join 시켜보았다.

celeb 테이블이 왼쪽 테이블이므로 host 부분에 null이 들어있는 데이터가 있는 것을 볼 수 있다.

4. RIGHT JOIN

두 개의 테이블에서 공통영역을 포함해 오른쪽 테이블의 다른 데이터를 포함하는 조인 방식

select column1, column2, ...
from tableA
RIGHT JOIN tableB
ON tableA.column=tableB.column
where condition;

아까와 같은 예제문에서 left만 right로 바꿔보면 snl_show 에서 온 데이터에 null이 들어가는 것을 볼 수 있다.

(celeb에 없는 snl_show의 host들도 가져오기 때문에)

6. FULL OUTER JOIN

full outer join의 경우 각 table간의 합집합을 생각하면 된다.

select column1, column2, ...
from tableA
FULL OUTER JOIN tableB
ON tableA.column=tableB.column
where condition;

그러나 mysql을 쓰는 사람들은 이런 에러 문구를 맞이할 수 있다.

따라서 다른 방법으로 full outer join을 해야한다.

left join 문과 right join 문을 union 시켜줘야한다. (mysql 일해라...)

728x90

'코딩 > SQL' 카테고리의 다른 글

AWS RDS  (0) 2023.02.21
[SQL] Concat, Alias, Distinct, Limit  (0) 2023.02.20
[SQL] UNION  (0) 2023.02.20
[SQL] 논리 연산자  (0) 2023.02.20
[SQL] Order by, 비교 연산자  (0) 2023.02.17