8-4 도서목록 조회, 카테고리, 페이징 sql

airbus·2025년 3월 14일

프로그래머스

목록 보기
36/93

8-4 도서목록 조회, 카테고리, 페이징 sql

컬럼을 특정해서 출력하거나 페이징 시 필요한 sql syntax

특정 컬럼만을 출력

books 테이블에서 category_id 가 0인 컬럼만 조회

SELECT * FROM books WHERE category_id = 0;

books 테이블 전체 조회 하면서

  • category 테이블을 books 카테고리에 붙여서 출력
  • books의 category_id와 category 테이블의 id 값이 일치하는 데이터를 가져와서 붙임
  • 없는 값은 null로 처리됩니다.
SELECT * FROM books
 LEFT JOIN category ON books.category_id = category.id;

category의 name 컬럼만 출력합니다.

SELECT name FROM bookshop.category;

category의 name 컬럼을 category_name으로 바꿔서 출력합니다.

SELECT name AS category_name FROM Bookshop.category;
  • 저렇게 AS를 사용해서 이름을 바꿔서 조회하면, 다른 컬럼도 함께 출력할 때 * 를 사용할 수 없으므로, 해당컬럼은 name-> category_name으로 바꿀 수 밖에 없음.
SELECT * FROM books LEFT JOIN category ON books.category_id = category.id WHERE books.id = 1;

시간범위

기준 날짜에서 시간 더하기

DATE_ADD(기준 날짜, INTERVAL) // interval은 간격

SELECT DATE_ADD("2024-02-01", INTERVAL 1 MONTH); // 한 달 계산시 달만 계산됩니다. // 2월은 28일까지만 이런거 고려 x
=> 2024-03-01

SELECT DATE_ADD(NOW(), INTERVAL 1 DAY); // NOW()로 현재 날짜를 기준으로
=> 2025-03-14

기준 날짜에서 시간 빼기

DATE_SUB(기준 날짜, INTERVAL)

SELECT DATE_SUB("2024-02-01", INTERVAL 1 MONTH);
=> 2024-01-01

그러면 신간 도서는 한달 이내의 도서만을 신간도서로 할 때 신간도서를 출력하려면?
(= 시간 범위를 설정해서 SELECT 하려면?)

오늘 ~ 한달 이내 출간된 도서
SELECT * FROM books WHERE pub_date BETWEEN DATE_SUB(NOW(), INTERVAL 1 MONTH) AND NOW();

오늘 ~ 한달 이내 출간된 도서 중 + 특정 카테고리
SELECT * FROM books WHERE pub_date BETWEEN DATE_SUB(NOW(), INTERVAL 1 MONTH) AND NOW() AND category_id = 0;

AND 순서는 상관 없음
SELECT * FROM books WHERE category_id = 0 AND pub_date BETWEEN DATE_SUB(NOW(), INTERVAL 1 MONTH) AND NOW();

페이징 (몇 개씩 보여줄건지)

SELECT * FROM books LIMIT 3 OFFSET 0;

LIMIT : 출력할 행의 개수
OFFSET : 시작 지점(시작할 행), OFFSET 0은 생략가능.

ex)

idbook
1abc
2small book
3big book
4hugebook
5giant book
6book book
SELECT * FROM books LIMIT 3 OFFSET 0; 의 경우
1행부터 3행까지 를 출력
// 배열의 index처럼 동작한다고 생각하면 됩니다. i[0] = 첫번째 값

0개의 댓글