코딩테스트/SQL 문제

[프로그래머스] 144854 조건에 맞는 도서와 저자 리스트 출력하기 - SQL

glorypang 2025. 4. 23. 10:01
728x90
반응형
SMALL

📌 문제 정보

  • 출처: 문제 링크
  • 난이도: ⭐
  • 문제 유형: JOIN
  • 사용 언어: SQL

🔍 문제 설명

다음은 어느 한 서점에서 판매중인 도서들의 도서 정보(BOOK), 저자 정보(AUTHOR) 테이블입니다.

`BOOK` 테이블은 각 도서의 정보를 담은 테이블로 아래와 같은 구조로 되어있습니다.

 

`AUTHOR` 테이블은 도서의 저자의 정보를 담은 테이블로 아래와 같은 구조로 되어있습니다.

 

`'경제'` 카테고리에 속하는 도서들의 도서 ID(BOOK_ID), 저자명(AUTHOR_NAME), 출판일(PUBLISHED_DATE) 리스트를 출력하는 SQL문을 작성해주세요.
결과는 출판일을 기준으로 오름차순 정렬해 주세요.


💡 풀이 노트

`BOOK` 테이블

BOOK_ID CATEGORY AUTHOR_ID PRICE PUBLISHED_DATE
1 인문 1 10000 2020-01-01
2 경제 1 9000 2021-04-11
3 경제 2 11000 2021-02-05

 

`AUTHOR` 테이블

AUTHOR_ID AUTHOR_NAME
1 홍길동
2 김영호

 

`INNER JOIN` 결과

BOOK_ID CATEGORY AUTHOR_ID AUTHOR_NAME PRICE PUBLISHED_DATE
1 인문 1 홍길동 10000 2020-01-01
2 경제 1 홍길동 9000 2021-04-11
3 경제 2 김영호 11000 2021-02-05

🚀 코드 (SQL)

SELECT A.BOOK_ID, B.AUTHOR_NAME, DATE_FORMAT(A.PUBLISHED_DATE, "%Y-%m-%d") AS PUBLISHED_DATE
FROM BOOK A JOIN AUTHOR B
ON A.AUTHOR_ID = B.AUTHOR_ID
WHERE A.CATEGORY = "경제"
ORDER BY A.PUBLISHED_DATE

🖥 실행 결과

출력
BOOK_ID	AUTHOR_NAME	PUBLISHED_DATE
1	홍길동		2020-01-10
2	홍길동		2021-06-10

 


🔄 시간 다루기

1. `YEAR()`, `MONTH()`, `DAY()` 함수

  • MySQL에서 가장 일반적으로 쓰이는 방식
SELECT
  YEAR(NOW()) AS year,
  MONTH(NOW()) AS month,
  DAY(NOW()) AS day;

2. `DATE_FORMAT()` 함수

  • 형식을 지정해서 문자열로 추출
SELECT
  DATE_FORMAT(NOW(), '%Y') AS year,
  DATE_FORMAT(NOW(), '%m') AS month,
  DATE_FORMAT(NOW(), '%d') AS day;

3. `EXTRACT()` 함수

  • SQL 표준 함수로, 날짜에서 원하는 부분을 추출
SELECT
  EXTRACT(YEAR FROM NOW()) AS year,
  EXTRACT(MONTH FROM NOW()) AS month,
  EXTRACT(DAY FROM NOW()) AS day;

4. `SUBSTRING()` 혹은 `SUBSTR()`을 이용한 문자열 파싱

  • 직접 `DATE`를 문자열로 바꿔서 자르는 방식
SELECT
  SUBSTRING(NOW(), 1, 4) AS year,
  SUBSTRING(NOW(), 6, 2) AS month,
  SUBSTRING(NOW(), 9, 2) AS day;

년-월-일 방식으로 추출하기

1. `DATE_FORMAT()` 함수

SELECT DATE_FORMAT(NOW(), '%Y-%m-%d') AS ymd;
  • 출력 결과 예시: 2025-04-14

2. `CAST(NOW() AS DATE)` 또는 `DATE()` 함수

  • `DATETIME` 값을 `DATE`로 잘라낼 수 있음 (시간 제외):
SELECT DATE(NOW()) AS ymd;
-- 또는
SELECT CAST(NOW() AS DATE) AS ymd;
  • 출력 결과 예시: 2025-04-14

📌 깃허브 코드 저장소: https://github.com/glorypang/CodingTest

 

728x90
반응형
LIST