반응형
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
- 백준
- 프로그래머스
- date_format
- 거스름돈
- 브론즈
- 그리디 알고리즘
- 전자레인지 문제
- 알고리즘
- docker 개념
- docker image
- docker
- 탐욕 알고리즘
- debugging
- 디버깅
- Docker 핵심
- Java
- 코테
- MySQL
- 자바스크립트 기초
- sqlplus
- 클라우드
- 서브넷
- Access Modifier
- DevOps
- SQL
- java.io
- reference data type
- greedy
- Greedy 알고리즘
- join
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자리) |
반응형