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 일해라...)
'코딩 > 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 |