select 컬럼1, 컬럼2
from 테이블1
union -- DISTINCT(default) or ALL
select 컬럼A, 컬럼B
from 테이블2
(order by 1
limit 10); #order by, limit를 함께 쓰려면 괄호를 써야한다.
-- a) 스칼라 서브쿼리
-- 연도별 1위 관객수 평균보다 관객수가 높았던 연도의 영화와 매출액
select year(release_date),movie_name,audience_num,
(select round(avg(audience_num)) as avg_audi_num from box_office where ranks =1) '연도별 1위 관객수 평균'
from box_office where ranks =1 order by 1;
-- case문 활용하여 관객수 평균보다 낮은지 높은지 판단
select year(release_date),movie_name,sale_amt,
case when audience_num > (select round(avg(audience_num)) as avg_audi_num from box_office where ranks =1) then audience_num else '평균 관객수보다 적음' end '평균 관객수 비교'
from box_office where ranks =1 order by 1;
-- b) 파생테이블
-- 연도별 1위 관객수 평균보다 관객수가 높았던 연도의 영화와 관객수만 나타내기
select year(release_date),movie_name,audience_num
from box_office a,
(select round(avg(audience_num)) as avg_audi_num from box_office where ranks =1) b
where ranks =1 and a.audience_num >= b.avg_audi_num order by 1;
-- c) where 절
select year(release_date),movie_name,audience_num
from box_office
where ranks =1 and
audience_num >= (select round(avg(audience_num)) as avg_audi_num from box_office where ranks =1)
order by 1;
#15년 동안 랭킹 1위 영화의 관객수 평균과 매출액 평균보다 많은 영화(17년~19년 개봉 작품 중)
with total as (
select round(avg(audience_num)) as avg_audi_num,
round(avg(sale_amt)) as avg_amt
from box_office where ranks =1)
select year(a.release_date), a.movie_name, a.audience_num, a.sale_amt
from box_office a,
total b
where year(a.release_date) between 2017 and 2019
and a.audience_num >= b.avg_audi_num
and a.sale_amt > b.avg_amt
order by 1;
ANY: 뒤에 위치한 서브쿼리가 반환하는 값 중 어느 한 조건을 만족해도 인정
ALL: 뒤에 위치한 서브쿼리가 반환하는 값 모든 조건을 만족해야 인정
-- Any
#2019년 영화 중 2018년 3위 영화 관객수보다 높은 영화 목록
select movie_name, audience_num
from box_office
where year(release_date) = 2019
and audience_num >= any(select audience_num
from box_office
where year(release_date) = 2018
and ranks between 1 and 3);
#2018 TOP3 관객수 922만명 ~ 1227만명(서브쿼리 반환값)
#극한직업, 어벤져스: 엔드게임, 겨울왕국 2 ,알라딘, 기생충,엑시트
#2019년 영화 중 2018년 1위 영화 관객수보다 높은 영화 목록
select movie_name, audience_num
from box_office
where year(release_date) = 2019
and audience_num >= all(select audience_num
from box_office
where year(release_date) = 2018
and ranks between 1 and 3);
#극한직업, 어벤져스: 엔드게임,겨울왕국 2, 알라딘
-- in
# 2015~2018년 사이 top5 했던 적이 있는 감독 중 2019년에도 top5인 영화감독
select director,movie_name, audience_num
from box_office
where year(release_date) = 2019 and ranks between 1 and 5
and director in (select director
from box_office
where year(release_date) between 2015 and 2018
and ranks between 1 and 5);
# 안소니 루소,조 루소_앤드게임 감독(시빌워와 인피니티워로 top5에 들었던 적이 있다)
-- EXISTS
#2018년 2019년 탑10 중에 2018년과 2019년 개봉요일이 같은 영화와 랭킹, 개봉요일,관객수
select a.ranks, a.movie_name, DAYNAME(a.release_date) 개봉요일, round(a.audience_num / 10000) as '관객수(만명)' from box_office a where year(release_date) = 2019 and ranks between 1 and 10 and
exists (select 1 from box_office b where year(release_date) = 2018
and ranks between 1 and 10 and DAYNAME(a.release_date) = DAYNAME(b.release_date)) order by 1;
기간별 박스오피스 조회하여 CSV 파일로