프로그래머스 풀스택 31
posted on 08 Oct 2024 under category programmers in series programmers
프로젝트: Node.js 기반의 REST API 구현(8)
💫 좋아요 DB 설계
<dbdiagram 설계>
<좋아요 추가 API 설계 수정>
💫 좋아요 추가 구현
<POSTMAN 실행결과>
<Workbench 결과>
💫 좋아요 삭제 구현
<POSTMAN 실행결과>
💫 count()
Workbench에서는 PK가 없으면 무조건 Read Only 테이블이 됨!!
SELECT count(*) FROM likes WHERE liked_book_id = 1;
💫 AS
SELECT *, (SELECT count(*) FROM likes WHERE liked_book_id=books.id) AS likes FROM books;
💫 서브쿼리의 등장
좋아요 개수 세서 books 테이블에 컬럼 추가해서 출력해주기
도서 테이블 전체 조회
도서 테이블 전체 조회 + 컬럼 1개 추가하기
SELECT *,
값 AS 새로 추가할 컬럼명
FROM books;
SELECT *,
(각 행마다 likes 테이블에 liked_book_id로 가지고 있는 행 수) AS likes
FROM books;
SELECT *,
(SELECT count(*) FROM likes WHERE liked_book_id=books.id) AS likes
FROM books; 👉 서브 쿼리!!
🙌 서브(sub) 쿼리 : 쿼리 안에 쿼리
🙌 count() : 행 개수
🙌 AS : 컬럼 별칭
CREATE DATABASE Board;
USE Board;
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(30) NOT NULL,
job VARCHAR(100),
birth DATE,
PRIMARY KEY (id)
);
INSERT INTO users (name, job, birth)
VALUES ("haerin", "idol","20060515");
INSERT INTO users (name, job, birth)
VALUES ("haerin", "student","2006-07-15");
INSERT INTO users (name, job, birth)
VALUES ("danielle", "idol","2005-04-11");
INSERT INTO users (name, job, birth)
VALUES ("minji", "idol","2004-05-07");
INSERT INTO users (name, job, birth)
VALUES ("hanni", "idol","2004-10-06");
CREATE TABLE posts (
id INT NOT NULL AUTO_INCREMENT,
title VARCHAR(100) NOT NULL,
content VARCHAR(2000),
created_at TIMESTAMP DEFAULT NOW(),
PRIMARY KEY (id)
);
INSERT INTO posts (title, content)
VALUES ("title1", "content1");
ALTER TABLE posts
ADD COLUMN updated_at DATETIME
DEFAULT NOW()
ON UPDATE NOW();
UPDATE posts
SET content="updated!"
WHERE id = 2;
ALTER TABLE posts
ADD COLUMN user_id INT;
ALTER TABLE posts
ADD FOREIGN KEY(user_id)
REFERENCES users(id);
SELECT * FROM posts LEFT
JOIN users ON posts.user_id = users.id;
SELECT posts.id, title, content, created_at, updated_at, name, job, birth FROM posts LEFT
JOIN users ON posts.user_id = users.id;
SELECT count(*) FROM likes WHERE liked_book_id = 1;
SELECT *, (SELECT count(*) FROM likes WHERE liked_book_id=books.id) AS likes FROM books;
SELECT *,
(SELECT count(*) FROM likes WHERE liked_book_id=books.id) AS likes,
(SELECT EXISTS (SELECT * FROM likes WHERE user_id=1 AND liked_book_id=1)) AS liked
FROM books
LEFT JOIN category
ON books.category_id = category.category_id
WHERE books.id=1;
💫 나는 개발한다 고로 나는 EXISTS 한다.
<POSTMAN 실행결과>
SELECT EXISTS (SELECT * FROM likes WHERE user_id=1 AND liked_book_id=1);
SELECT count(*) FROM likes WHERE user_id=1 AND liked_book_id=1;
💫 좋아요 했는지 여부도 알려주기
<POSTMAN 실행결과>
💫 category_id? id?!
category_id : 0 값이 POSTMAN에서 출력할 때 덮어쓰기되어 id : 0으로 나오는 것
<POSTMAN 실행결과>
SELECT *,
(SELECT count(*) FROM likes WHERE liked_book_id=books.id) AS likes,
(SELECT EXISTS (SELECT * FROM likes WHERE user_id=1 AND liked_book_id=1)) AS liked
FROM books
LEFT JOIN category
ON books.category_id = category.category_id
WHERE books.id=1;
Y 일을 통해 명확히 알게 되었거나 이해한 부분(한 일)에 대해 정리 :
count(), AS, 서브쿼리
W 배운 점과 시사점 :
🙌 서브(sub) 쿼리 : 쿼리 안에 쿼리
🙌 count() : 행 개수
🙌 AS : 컬럼 별칭
T 응용하여 배운 것을 어디에 어떻게 적용할지:
항상 출력을 할 때 테이블을 수정하지 않고도 원하는 데이터를 출력할 수 있는 방법이 있다는 걸 잊지 말기!