본문 바로가기
SQL

본 캠프 11일차 SQL TIL

by Data 학습자 2024. 7. 6.

TIL: SQL 학습 내용

오늘 풀어본 문제

 

다음은 어느 자동차 대여 회사에서 대여 중인 자동차들의 정보를 담은 CAR_RENTAL_COMPANY_CAR 테이블과 자동차 대여 기록 정보를 담은 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블입니다. 자동차 종류가 '세단'인 자동차들 중 10월에 대여를 시작한 기록이 있는 자동차 ID 리스트를 출력하는 SQL문을 작성하는 문제입니다. 자동차 ID 리스트는 중복이 없어야 하며, 자동차 ID를 기준으로 내림차순 정렬해야 합니다.

 

문제를 풀어본 순서

자동차 정보와 대여 기록 정보가 담긴 테이블을 JOIN하는 쿼리문을 작성

SELECT *
FROM CAR_RENTAL_COMPANY_CAR C
INNER JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY H ON C.CAR_ID = H.CAR_ID

 

이후 자동차 타입이 세단이며 대여 시작일이 10월이라면 이란 조건에 충족하는 값만 조회하는 WHERE 문을 작성

WHERE C.CAR_TYPE = '세단' 
  AND DATE_FORMAT(H.START_DATE, '%m') = '10'

 

차량의 ID의 순서대로 출력하며 서로 중복되지 않게 작성

SELECT DISTINCT C.CAR_ID
ORDER BY C.CAR_ID DESC;

 

최종 쿼리문:

SELECT DISTINCT C.CAR_ID
FROM CAR_RENTAL_COMPANY_CAR C
INNER JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY H ON C.CAR_ID = H.CAR_ID
WHERE C.CAR_TYPE = '세단' 
  AND DATE_FORMAT(H.START_DATE, '%m') = '10'
ORDER BY C.CAR_ID DESC;

 

  • 번외) 
SELECT DISTINCT C.CAR_ID
FROM CAR_RENTAL_COMPANY_CAR C inner join CAR_RENTAL_COMPANY_RENTAL_HISTORY H ON C.CAR_ID = H.CAR_ID
WHERE CAR_TYPE = '세단' AND DATE_FORMAT(START_DATE,'%m') <= 10 AND DATE_FORMAT(END_DATE,'%m') >= 10
ORDER BY CAR_ID DESC
    • 구현 중 실수 했던 사례) 문제 지문을 잘못 해석하여 렌트를 한 날 중 10월을 "포함" 한 기한이 있는 차의 ID를 찾으려고 하였음

    • 문제를 풀며 왜 10월에 렌탈을 진행한 차량의 ID를 구한 이유가 무엇일까? 하고 생각해 보았고 10월에 렌탈한 고객을 대상으로 특정 이벤트를 진행하기 위해서 자료 조사를 실행한 것이 아닐까? 하는 생각이 들었다.

 

오늘 배운 점:

  • 문제 지문을 잘 읽고 해석을 해야한다.

 

'SQL' 카테고리의 다른 글

본 캠프 10일차 SQL TIL  (0) 2024.07.06
본 캠프 9일차 SQL TIL  (0) 2024.07.02
본 캠프 8일차 SQL TIL  (0) 2024.07.01
본 캠프 7일차 SQL TIL  (0) 2024.06.30
본 캠프 6일차 SQL TIL  (0) 2024.06.29