본문 바로가기

Data Literacy/SQL

Chapter 1. 데이터 조회, 필터링(5) - 실전 예제1 [1/2]

postgreSQL logo image

 

이번 아티클에서는, 지금까지 배운 내용들을 기반으로 간단하게 예제를 풀어보도록 하겠습니다. 해당 문제들은 모두 dvdrental DB를 이용해 풀이합니다. 가능한 설명을 보지 않고, 주어진 조건을 먼저 생각해보고 직접 데이터를 조회해 보기 바랍니다. 

 

 


 

 

Q. 한 건이라도 DVD 대여가 발생한 날이 언제인지, 날짜들을 리스트로 만들어 주세요. (년, 월, 일)

 

DVD대여와 관련한 데이터는 'RENTAL' 테이블에 있을 것으로 보입니다. 하나씩 확인해 보겠습니다. 

 

select *
  from rental r

 

 

 

위와 가같이 확인해보니, [RENTAL_DATE] 칼럼에서 대여가 발생한 날짜를 확인할 수 있습니다. 그런데 한 가지 문제점이 눈에 띕니다. 우리가 원하는 데이터는 발생 "날짜"만을 원하는 것입니다. 그런데 여기에는 "시간"이 함께 포함되어 있어서 불필요한 데이터가 발생할 것 같습니다. 

 

그리고 만일 여기서 시간을 제외한다고 하더라도, 중복되는 날짜 데이터가 여러개 존재하는 것을 눈치 채셨을 것입니다. 우리는 고유의 발생 날짜 1개씩만을 원하는 상황입니다. 눈치 채셨겠지만, '중복 제거'가 필요한 상태입니다. 

 

이제 이 두 가지 조건을 충족하는 SELECT 쿼리를 짜보겠습니다. 우선, [RENTAL_DATE] 칼럼을 날짜로 바꾸어야 합니다. 이는 DATE(RENTAL_DATE) 함수를 사용해 간단히 해결이 가능합니다. 그리고 중복제거는 SELECT DISTINCT로 간단히 실행할 수 있는 것은 이미 배웠습니다. 

 

select distinct date(rental_date)
           from rental r 
       order by date desc

 

 

 

위 조회 결과에서 검색 결과는 41rows로 표시됩니다. 즉, 전체 운영일 중 '41일' 동안 렌탈 실적이 발생하였다는 것을 의미하게 되겠죠? 

 

 

 


 

 

Q. 영화 카테고리 중에서 [Sci-Fi] 카테고리의 '카테고리 아이디 번호'는 몇 번인가요?

 

우선 카테고리 관련 테이블은 테이블 [category]에서 확인할 수 있을 것이라는 것을 미리 언급해 두겠습니다. 그리고 주의할 것은, 문제에 표시된 'Sci-Fi'라는 스트링은 대소문자와 표기를 모두 정확히 그대로 입력해야 하는 점 입니다. 

 

일단 카테고리 테이블을 조회해 보겠습니다. 

 

select *
  from category c

 

 

 

우리가 아는 정보는 'name'인 것 같습니다. 이제 조회를 진행해 보겠습니다. 

 

select *
  from category c
 where name = 'Sci-Fi'
 
 -- or
 
select category_id
  from category c
 where name = 'Sci-Fi'

 

 

 

 

 


 

 

Q. film 테이블을 이용해 rating이 몇 개의 등급으로 이루어져 있는지 확인해주세요.

 

우선은 film 테이블을 조회해 작전을 짜보겠습니다. 

 

select *
  from film f

 

 

film 테이블에 rating 칼럼이 있는 것을 확인했습니다. 그럼 이제 간단하게 rating을 확인해 보겠습니다. 등급이 몇 개인지 확인해야 한다는 것은 결국 중복을 제거해야 한다는 의미겠죠?

 

select distinct rating
           from film f

 

 

 

위와 같이 영화 등급은 5개로 나뉘어져 있다는 것을 알 수 있습니다.