반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- DevOps
- MySQL
- 알고리즘
- sqlplus
- docker 개념
- reference data type
- 거스름돈
- java.io
- 탐욕 알고리즘
- Docker 핵심
- greedy
- 그리디 알고리즘
- 전자레인지 문제
- date_format
- Java
- join
- 백준
- SQL
- docker image
- Greedy 알고리즘
- Access Modifier
- 프로그래머스
- 클라우드
- 브론즈
- 서브넷
- debugging
- 디버깅
- 코테
- 자바스크립트 기초
- docker
Archives
- Today
- Total
나는매일가운데
SQL JOIN LV2. 저자와 책 본문
반응형
1. 문제
'경제' 카테고리에 속하는 도서들의 도서 ID(BOOK_ID), 저자명(AUTHOR_NAME), 출판일(PUBLISHED_DATE) 리스트를 출력하는 SQL문을 작성해주세요.
결과는 출판일을 기준으로 오름차순 정렬해주세요.
2. 테이블 구조
BOOK TBALE COLUMN 구성
BOOK_ID | INTEGER | FALSE | 도서 ID |
CATEGORY | VARCHAR(N) | FALSE | 카테고리 (경제, 인문, 소설, 생활, 기술) |
AUTHOR_ID | INTEGER | FALSE | 저자 ID |
PRICE | INTEGER | FALSE | 판매가 (원) |
PUBLISHED_DATE | DATE | FALSE | 출판일 |
AUTHOR TABLE 구성
AUTHOR_ID | INTEGER | FALSE | 저자 ID |
AUTHOR_NAME | VARCHAR(N) | FALSE | 저자명 |
3 - 1. SQL (1)
- MYSQL을 사용해서 풀었다
- 놓친 부분 PUBLISHED_DATE를 구할 때 날짜 형식을 잘 봐야했다.
- ORACLE에서는 TO_CHAR('날짜', '날짜형식')으로 사용했지만, MySQL에서는 DATE_FORMAT(날짜', '날짜형식') 함수를 사용한다.
SELECT
B.BOOK_ID AS BOOK_ID
, A.AUTHOR_NAME AS AUTHOR_NAME
, DATE_FORMAT(B.PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATE <!-- 날짜 변환은 ORAClE이 더 간편 -->
FROM
BOOK AS B
, AUTHOR AS A
WHERE 1=1
AND B.AUTHOR_ID = A.AUTHOR_ID
AND B.CATEGORY LIKE '%경제%' <!-- 혹시 경제란 단어가 속한 다른 카테고리가 있을 수 있으므로-->
ORDER BY PUBLISHED_DATE ASC;
3 - 2. SQL(2)
- MySQL을 사용해서 풀었지만 JOIN을 다른 방식으로 사용해 보았다.
- 위의 쿼리 방법이 더 간편하지만, 회사에서는 이런 식으로 사용하고 있기 때문에...
SELECT
B.BOOK_ID AS BOOK_ID
, A.AUTHOR_NAME AS AUTHOR_NAME
, DATE_FORMAT(B.PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATE
FROM BOOK AS B
RIGHT OUTER JOIN AUTHOR AS A ON B.AUTHOR_ID = A.AUTHOR_ID
WHERE B.CATEGORY LIKE '%경제%'
ORDER BY PUBLISHED_DATE ASC;
- 이 때, OUTER은 굳이 안써줘도 되지만, 명확성을 위해 씀 (안쓸 경우 자동적으로 OUTER JOIN으로 인식)
- AUTHOR 테이블에 맞춰 RIGHT JOIN을 해주었다.
4. MySQL 에서 DATE_FORMAT 형식 정리
포맷 | 설명 |
%a | 일(Sun ~ Sat) |
%b | 월(Jan ~ Dec) |
%c | 월(0 ~ 12) |
%D | 일(1st, 2nd, 3rd, ...) |
%d | 일(01 ~ 31) |
%e | 일(0 ~ 31) |
%f | Microseconds (000000 to 999999) |
%H | 시간(00 ~ 23) |
%h | 시간(00 ~ 12) |
%I | 시간(00 ~ 12) |
%i | 분(00 ~ 59) |
%j | Day of the year (001 to 366) |
%k | 시간(0 ~ 23) |
%l | 시간(1 ~ 12) |
%M | 월(January ~ December) |
%m | 월(00 ~ 12) |
%p | AM or PM |
%r | 시간(12시)을 hh:mm:ss AM/PM 형식으로 |
%S | 초(00 ~ 59) |
%s | 초(00 ~ 59) |
%T | 시간(24시)을 hh:mm:ss 형식으로 |
%U | Week where Sunday is the first day of the week (00 ~ 53) |
%u | Week where Monday is the first day of the week (00 ~ 53) |
%V | Week where Sunday is the first day of the week (01 ~ 53). Used with %X |
%v | Week where Monday is the first day of the week (01 ~ 53). Used with %x |
%W | 일(Sunday ~ Saturday) |
%w | Day of the week where Sunday=0 and Saturday=6 |
%X | Year for the week where Sunday is the first day of the week. Used with %V |
%x | Year for the week where Monday is the first day of the week. Used with %v |
%Y | 연도(4자리) |
%y | 연도(2자리) |
반응형