더북(TheBook)

2 정답

CREATE TABLE box_office_copy AS
SELECT years, ranks, movie_name, release_date, sale_amt, audience_num,
       0 last_year_audi_num
  FROM box_office
 WHERE 1 = 2;

INSERT INTO box_office_copy
SELECT years, ranks, movie_name, release_date, sale_amt, audience_num, 0
  FROM box_office
 WHERE YEAR(release_date) = 2019
   AND audience_num >= 8000000;

해설 먼저 CREATE TABLE AS 문으로 box_office 테이블에서 제작연도, 순위, 영화명, 개봉일, 매출액, 관객수를 나타내는 years, ranks, movie_name, release_date, sale_amt, audience_num 칼럼을 조회해 box_office_copy 테이블을 복제 생성합니다. 이때 추가 칼럼인 last_year_audi_num는 box_office 테이블에 없는 칼럼이므로 SELECT 절 마지막에 0 last_year_audi_num을 명시합니다. 이렇게 하면 SELECT 문이 반환하는 결과 집합에서 last_year_audi_num 칼럼명으로 0 값이 반환됩니다.

그런데 주어진 문제에서 데이터를 입력하는 부분은 별도의 INSERT 문을 만들어 처리하라고 되어 있으므로 SELECT 문의 WHERE 절에 1 = 2라는 조건을 줍니다. 1과 2는 같지 않으므로 이 조건은 거짓(FALSE)이 되어 SELECT 문이 반환하는 결과는 0건입니다. 따라서 CREATE TABLE AS 문은 box_office 테이블의 데이터를 복제하지 않고 box_office 테이블의 6개 칼럼과 SELECT 절에서 추가한 last_year_audi_num 칼럼까지 총 7개 칼럼이 있는 텅 빈 box_office_copy 테이블을 생성합니다.

두 번째로 2019년 개봉 영화 중 관객수가 800만 명 이상인 데이터를 넣는 INSERT 문을 작성해야 하므로 SELECT 문이 결합된 INSERT 문을 사용합니다. 여기서 SELECT 문의 WHERE 절에 2019년 개봉 영화와 800만 명 이상인 두 가지 조건을 주면 해당 조건에 맞는 데이터가 box_office_copy 테이블에 입력됩니다. 여기서도 SELECT 절 마지막에 0을 명시합니다. 이는 box_office_copy 테이블의 마지막 칼럼인 last_year_audi_num에 데이터를 0으로 입력한다는 의미입니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.