실습을 위해 연예인 리스트가 적힌 celeb테이블과 snl 방송 정보가 적힌 snl_show라는 테이블 만들어놨음 (중복 데이터 유!)
join = 두 개 이상의 테이블을 결합하는 것
join의 종류 살펴보기
두 개의 테이블에서 공통된 요소들을 통해 결합하는 조인 방식
기본구조
SELECT col1, col2 ...
FROM tableA
INNER JOIN tableB
ON tableA.column = tableB.column
WHERE condition;
🚨 ON으로 join 기준 제공
- 두 테이블의 컬럼이 같은 경우 join을 한다!
Inner join
host와 name을 비교해서 snl에 출연했던 celeb 정보만 조회
select celeb.id, celeb.name, snl_show.id, snl_show.host
from celeb
inner join snl_show
on celeb.name = snl_show.host;
👀 왼쪽이 celeb 테이블에서 가져온 것 오른쪽이 snl_show에서 가져온 것
두 개의 테이블에서 공통영역을 포함해 왼쪽 테이블의 다른 데이터까지 포함하는 조인방식
기본구조
SELECT col1, col2 ...
FROM tableA
LEFT JOIN tableB
ON tableA.column = tableB.column
WHERE condition;
left join
- snl_show에 출연한 적이 있는 celeb 정보와 출연하지 않은 celeb 정보 전부를 가져오는 것
- 공통되지 않는 컬럼의 존재하지 않는 정보는 null로 표시
select celeb.id, celeb.name, snl_show.id, snl_show.host
from celeb
left join snl_show
on celeb.name = snl_show.host;
두 개의 테이블에서 공통영역을 포함해 오른쪽 테이블의 다른 데이터까지 포함하는 조인방식
기본구조
SELECT col1, col2 ...
FROM tableA
RIGHT JOIN tableB
ON tableA.column = tableB.column
WHERE condition;
right join
- host로 출연한 적이 있는 celeb과 snl 정보를 가져오고 celeb에 없는 snl_show 정보까지 가져오는 것
- 공통되지 않는 컬럼의 존재하지 않는 정보는 null로 표시
select celeb.id, celeb.name, snl_show.id, snl_show.host
from celeb
right join snl_show
on celeb.name = snl_show.host;
두 개의 테이블에서 공통영역을 포함해 양쪽 테이블의 모든 영역을 포함하는 조인방식
기본구조
SELECT col1, col2 ...
FROM tableA
FULL OUTER JOIN tableB
ON tableA.column = tableB.column
WHERE condition;
full outer join
BUT!!!
- MySQL에서는 'full join'을 지원하지 않기 때문에 syntax error가 뜸
- 그래서 Mysql에서는 이렇게 full outer join을 하려면 'union'으로 할 수 있음
select celeb.id, celeb.name, snl_show.id, snl_show.host from celeb left join snl_show on celeb.name = snl_show.host union select celeb.id, celeb.name, snl_show.id, snl_show.host from celeb right join snl_show on celeb.name = snl_show.host
한 테이블 내에서 데이터 간의 관계를 살쳐봐야 할 때 사용.
한 테이블에 존재하는 컬럼 사이에 의미있는 관계가 존재할 때 사용.
SELECT col1, col2 ...
FROM tableA, tableB
WHERE condition'
- inner join과 같은 결과를 가지고 옴
- 가지고 올 기준은 where 절에 넣어주면 됨
self join
snl host로 출연한 적이 있는 celeb, 즉 교집합 데이터만 가져오는 것
select celeb.id, celeb.name, snl_show.id, snl_show.host
from celeb, snl_show
where celeb.name = snl_show.host;
01) celeb 테이블의 연예인 중, snl_show에 host로 출연했고 소속사가 안테나인 사람과 이름과 직업을 검색
select celeb.name, celeb.job_title
from celeb, snl_show
where celeb_name = snl_show.host AND celeb.agency = '안테나';
사람의 이름과 직업 먼저 가져오고 select
where에 두 테이블을 join할 기준 먼저 + 추가 조건
쿼리 복잡해지면 STEP BY STEP으로 하나씩 조건 만족해나가기