프로그래머스 SQL 코딩 테스트 문제 풀이를 해보자.
지원 DBMS는 mysql, oracle 이므로 두가지 버전으로 작성해보겠다.
문제 : 조건에 맞는 도서 리스트 출력하기
https://school.programmers.co.kr/learn/courses/30/lessons/144853
더보기
문제 설명
문제 해설
- 목표(이 문제를 풀면 아래 기능을 활용 할 수 있습니다.)
- 특정 테이블에서 특정 조건을 걸어 데이터 가져오기
- Mysql 또는 Oracle에서 DATE 타입 표현방법
- 정렬하기
- 풀이방법
- 테이블 구조를 설명 해주고, 주어진 조건을 이용해 데이터를 추출하라고 나와있습니다.
- 핵심은 2021년도에 속하는 데이터를 어떻게 가져올까인데, 두가지 방법이 있어보입니다.
- 1) published_date 컬럼을 가공하기
- mysql : `date_format(published_date,'%Y') = '2021'`
- oracle : `TO_CHAR(published_date,'yyyy') = '2021'`
- 이 방법은 published_date 컬럼에 인덱스가 생성되어있다면 인덱스 활용을 하지 못하기 때문에 선배에게 혼나는 작성 방법입니다.🙄 (인덱스 설명 : 준비중)
인덱스에 대해 간략히 말씀드리면, 책의 목차와 같은 개념인데 전체 테이블을 확인하지 않고 컬럼 별로 Balanced Tree 형식으로 미리 만들어논 인덱스트리를 접근해, 전체 테이블 중 조건을 만족하는 일부 데이터만 확인하는 방법입니다.
- 2) 날짜 상수를 가공하기
- 보통 실무에서는 아래처럼 우변을 가공하여 사용합니다.
- mysql : `PUBLISHED_DATE BETWEEN DATE('2021-01-01') AND DATE('2021-12-31')`
- oracle : `PUBLISHED_DATE BETWEEN TO_DATE('2021-01-01','yyyy-mm-dd') AND TO_DATE('2021-12-31','yyyy-mm-dd')`
- 보통 실무에서는 아래처럼 우변을 가공하여 사용합니다.
- 1) published_date 컬럼을 가공하기
MySQL 풀이
SELECT BOOK_ID, DATE_FORMAT(PUBLISHED_DATE,'%Y-%m-%d')
FROM BOOK
WHERE PUBLISHED_DATE BETWEEN DATE('2021-01-01') AND DATE('2021-12-31')
AND CATEGORY ='인문'
ORDER BY PUBLISHED_DATE;
Oracle 풀이
SELECT BOOK_ID, TO_CHAR(PUBLISHED_DATE,'yyyy-mm-dd') as "PUBLISHED_DATE"
FROM BOOK
WHERE PUBLISHED_DATE BETWEEN TO_DATE('2021-01-01','yyyy-mm-dd') AND TO_DATE('2021-12-31','yyyy-mm-dd')
AND CATEGORY ='인문'
ORDER BY PUBLISHED_DATE;
맺음말
문제 자체는 답을 내기는 쉽지만, mysql과 oracle에서의 date 포맷하는 방법과 조건절에 date형식을 어떻게 처리할 지에 대해 생각해 볼 수 있어서 재밌는 문제였습니다.
반응형
'CS' 카테고리의 다른 글
[PostgreSQL] pgbench 벤치마크 툴 사용방법, 성능 분석 (0) | 2024.07.10 |
---|---|
[SQL풀이] 프로그래머스 - 멸종위기의 대장균 찾기 (0) | 2024.07.09 |
[SQL 문제풀이] SQL 코딩 테스트 연습 사이트 추천 (0) | 2024.07.09 |
[리눅스] tar 명령어 알아보기, tar 압축하기, 압축해제 (0) | 2024.07.05 |
PostgreSQL oracle_fdw 설치 (오라클 테이블 읽어오기) (0) | 2024.07.04 |
댓글