이 글은 24.01.19에 본인 벨로그에 작성했던 글을 옮겨 온 것이다.
JOIN
INNER JOIN
- JOIN하는 테이블들에서 공통인 부분만 추출.
- SNL_SHOW에 출연한 CELEB을 기준으로 CELEB 테이블과 SNL_SHOW 테이블 INNER JOIN하기
CELEB 테이블
SNL_SHOW 테이블
SELECT C.ID
, C.NAME
, S.ID
, S.HOST
FROM CELEB C
JOIN SNL_SHOW S
ON C.NAME = S.HOST;
LEFT JOIN / RIGHT JOIN
- JOIN하려는 테이블 중 왼쪽/오른쪽 테이블(먼저/나중에 나오는 테이블)을 기준으로 JOIN.
- 위의 쿼리를 LEFT/RIGHT JOIN으로 바꾸면?
(1) LEFT JOIN
SELECT C.ID
, C.NAME
, S.ID
, S.HOST
FROM CELEB C
LEFT JOIN SNL_SHOW S
ON C.NAME = S.HOST;
왼쪽 테이블에만 있는 값들은, NULL로 처리된다.
(2) RIGHT JOIN
SELECT C.ID
, C.NAME
, S.ID
, S.HOST
FROM CELEB C
RIGHT JOIN SNL_SHOW S
ON C.NAME = S.HOST;
오른쪽 테이블에만 있는 값들은, NULL로 처리된다.
- 연습문제.
(1) celeb 테이블의 연예인 중 snl_show에 출연했고, 영화배우는 아니면서 YG엔터테인먼트 소속이거나 40세 이상이면서 YG소속이 아닌 연예인의 이름, 나이, 직업, 소속사, 시즌, 에피소드 검색.
(2) snl_show에 출연한 celeb 중 에피소드 7,8,9,10에 출연했거나 소속사가 YG인 사람 중 2020년 9월 15일 이후에 출연했던 사람의 이름, 출연 시즌, 에피소드, 방송일, 소속사 검색.
(1)
select c.name, c.age, c.agency
, s.season, s.episode
from celeb c
left join snl_show s
on c.name = s.host
where (not job_title like '%영화배우%' and agency = 'YG엔터테인먼트')
or (age >= 40 and agency != 'YG엔터테인먼트');
(2)
select c.name, s.season
, s.episode, s.broadcast_date, c.agency
from celeb c
left join snl_show s
on c.name = s.host
where (s.episode in (7,8,9,10) and s.broadcast_date > '2020-09-15')
or (c.agency like '%YG%' and s.broadcast_date > '2020-09-15');
'STUDY > SQL, DB' 카테고리의 다른 글
[MySQL] with Python! (0) | 2024.03.19 |
---|---|
[MySQL] CONCAT / SQL file / backup, restore (0) | 2024.03.19 |
[DB] DB / DB 생성 / SQL 명령 (0) | 2024.03.19 |
[MySQL] temporary table (0) | 2024.03.05 |
[MySQL] 비트(bit) 연산자 (2) | 2024.02.29 |