본문 바로가기
문제풀이/SQL(My sql)

[문제풀이] 조건에 맞는 도서와 저자 리스트 출력

by kime2 2024. 1. 8.
출처

 

문제

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

단, PUBLISHED_DATE 연-원 일 형태

 

문제에 대한 해석

 

 

 

풀이(MYSQL)

select b.book_id, au.author_name, date_format(b.published_date,'%Y-%m-%d')
from book b join author au on b.author_id = au.author_id
where category like '%경제%'
order by b.published_date

 

작동순서

💡SQL 실행 순서는 From -> Where -> Group by -> Having -> Select -> Order by ->결과반환

 

  1. FROM 절: book테이블과 author테이블에서 author_id을 기준로 inner join 한다
  2. WHERE 절: 경제가 포함된 카테고리를 필터링 한다
  3. SELECT 절: book_id와 author_name를 조회하고 date_format함수를 통해 연-원-일 순으로 조회한다
  4. ORDER BY 절: 출간일이 오름차순(오래된 순)으로 정렬한다

 

다른사람 풀이

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

배운점

  • 날짜-> 문자열: date_format(날짜, 출력형식)
  • 날짜형 데이터의 유형은?
  • SELECT DATE_FORMAT('2019-09-16 20:23:12', '%Y/%M/%D') -- 2019/09/16 출력
  • 문자-> 날짜열:str_to_date(문짜, 출력형식)
  • SELECT STR_TO_DATE('20080101', '%Y-%M-%D') -- 20080101이라는 문자를 2008-01-01의 형태의 날짜로 리턴
  • using: FROM절의 USING 조건절을 이용하면 같은 이름을 가진 컬럼들 중에서 원하는 컬럼에 대해서만 EQUI JOIN을 할 수 있다.

 

참고

https://velog.io/@syh0397/SQL-%EB%82%A0%EC%A7%9C%EC%99%80-%EC%8B%9C%EA%B0%84-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%8B%A4%EB%A3%A8%EA%B8%B0

https://moonpiechoi.tistory.com/119

 

[SQL] USING, ON 조건절

USING 조건절 FROM절의 USING 조건절을 이용하면 같은 이름을 가진 컬럼들 중에서 원하는 컬럼에 대해서만 EQUI JOIN을 할 수 있다. sql server에서는 지원하지 않는다. SELECT * FROM DEPT JOIN DEPT_TEMP USING (DEPTNO

moonpiechoi.tistory.com

 

SQL 날짜와 시간, 문자열 다루기

날짜와 시간은 date 와 string 을 왔다갔다 하므로 잘 비교해줘야 한다.날짜를 문자형 형태로 비교하기 위해서는 date 타입을 string으로 변환TO_CHAR() 함수를 이용string 형태를 date 형태로 비교하고 싶

velog.io