8-4 도서목록 조회, 카테고리, 페이징 sql
books 테이블에서 category_id 가 0인 컬럼만 조회
SELECT * FROM books WHERE category_id = 0;
books 테이블 전체 조회 하면서
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;
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)
| id | book |
|---|---|
| 1 | abc |
| 2 | small book |
| 3 | big book |
| 4 | hugebook |
| 5 | giant book |
| 6 | book book |
SELECT * FROM books LIMIT 3 OFFSET 0; 의 경우
1행부터 3행까지 를 출력
// 배열의 index처럼 동작한다고 생각하면 됩니다. i[0] = 첫번째 값