본문 바로가기

STUDY/SQL, DB

[MySQL] JOIN

 

이 글은 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