이번 아티클에서는, 지금까지 배운 내용들을 기반으로 간단하게 예제를 풀어보도록 하겠습니다. 해당 문제들은 모두 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개로 나뉘어져 있다는 것을 알 수 있습니다.
'Data Literacy > SQL' 카테고리의 다른 글
Chapter 1. 데이터 조회, 필터링(6) - LIMIT (w/OFFSET) (0) | 2023.05.04 |
---|---|
Chapter 1. 데이터 조회, 필터링(5) - 실전 예제1 [2/2] (0) | 2023.05.03 |
Chapter 1. 데이터 조회, 필터링(4) - WHERE (0) | 2023.04.27 |
Chapter 1. 데이터 조회, 필터링(3) - SELECT DISTINCT (0) | 2023.04.26 |
Chapter 1. 데이터 조회, 필터링(2) - ORDER BY (0) | 2023.04.26 |