Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added erd.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
64 changes: 64 additions & 0 deletions queries.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
/* 1. 내 정보 업데이트 하기 */
UPDATE _TDAUser
SET UserName = 'test'
WHERE UserId = 1;

/* 2. 내가 생성한 상품 조회 (UserId=1, 최신순, 3페이지) */
SELECT * FROM _TDAItem
WHERE UserId = 1
ORDER BY UpdateAt DESC
LIMIT 10 OFFSET 20;

/* 3. 내가 생성한 상품의 총 개수 */
SELECT COUNT(*) FROM _TDAItem
WHERE UserId = 1;

/* 4. 내가 좋아요 누른 상품 조회 (3페이지) */
SELECT i.* FROM _TDAItem i
JOIN _TDAItemFavorite f ON i.ItemId = f.ItemId
WHERE f.UserId = 1
ORDER BY f.CreateAt DESC
LIMIT 10 OFFSET 20;

/* 5. 내가 좋아요 누른 상품의 총 개수 */
SELECT COUNT(*) FROM _TDAItemFavorite
WHERE UserId = 1;

/* 6. 상품 생성 */
INSERT INTO _TDAItem (UserId, ItemName, ItemImage, ItemRemark, Price)
VALUES (1, '새 상품', 'image_url', '상품 설명입니다.', 50000);

/* 7. 상품 목록 조회 ("test" 포함, 좋아요 개수 포함, 1페이지) */
SELECT i.*,
(SELECT COUNT(*) FROM _TDAItemFavorite f WHERE f.ItemId = i.ItemId) AS FavoriteCount
FROM _TDAItem i
WHERE i.ItemName LIKE '%test%'
ORDER BY i.UpdateAt DESC
LIMIT 10 OFFSET 0;

/* 8. 상품 상세 조회 (1번 상품) */
SELECT * FROM _TDAItem WHERE ItemId = 1;

/* 9. 상품 정보 수정 (1번 상품) */
UPDATE _TDAItem
SET ItemName = '수정된 상품명', Price = 45000, UpdateAt = NOW()
WHERE ItemId = 1;

/* 10. 상품 삭제 (1번 상품) */
DELETE FROM _TDAItem WHERE ItemId = 1;

/* 11. 상품 좋아요 (1번 유저가 2번 상품 좋아요) */
INSERT INTO _TDAItemFavorite (UserId, ItemId) VALUES (1, 2);

/* 12. 상품 좋아요 취소 */
DELETE FROM _TDAItemFavorite WHERE UserId = 1 AND ItemId = 2;

/* 13. 상품 댓글 작성 */
INSERT INTO _TDAItemComment (ItemId, UserId, CommentText)
VALUES (2, 1, '이 상품 아직 팔렸나요?');

/* 14. 상품 댓글 조회 (특정 날짜 이전 데이터 10개) */
SELECT * FROM _TDAItemComment
WHERE ItemId = 1 AND CreateAt < '2025-03-25'
ORDER BY CreateAt DESC
LIMIT 10;
83 changes: 83 additions & 0 deletions schema.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
-- 1. 유저 테이블
CREATE TABLE _TDAUser (
UserId SERIAL PRIMARY KEY,
Email VARCHAR(255) UNIQUE NOT NULL,
Password VARCHAR(255) NOT NULL,
UserName VARCHAR(50) NOT NULL,
CreateAt TIMESTAMP DEFAULT NOW()
);

-- 2. 태그 마스터 테이블
CREATE TABLE _TDATag (
TagId SERIAL PRIMARY KEY,
TagName VARCHAR(50) UNIQUE NOT NULL
);

-- 3. 상품 테이블
CREATE TABLE _TDAItem (
ItemId SERIAL PRIMARY KEY,
UserId INTEGER REFERENCES _TDAUser(UserId) ON DELETE CASCADE,
ItemName VARCHAR(255) NOT NULL,
ItemImage TEXT,
ItemRemark TEXT,
Price INTEGER NOT NULL DEFAULT 0,
IsClosed BOOLEAN DEFAULT FALSE,
IsCompleted BOOLEAN DEFAULT FALSE,
UpdateAt TIMESTAMP DEFAULT NOW()
);

-- 4. 상품 문의(댓글) 테이블
CREATE TABLE _TDAItemComment (
ItemId INTEGER REFERENCES _TDAItem(ItemId) ON DELETE CASCADE,
Serl SERIAL,
UserId INTEGER REFERENCES _TDAUser(UserId) ON DELETE CASCADE,
CommentText TEXT NOT NULL,
CreateAt TIMESTAMP DEFAULT NOW(),
UpdateAt TIMESTAMP DEFAULT NOW(),
PRIMARY KEY (ItemId, Serl)
);

-- 5. 상품 찜하기 테이블
CREATE TABLE _TDAItemFavorite (
ItemId INTEGER REFERENCES _TDAItem(ItemId) ON DELETE CASCADE,
UserId INTEGER REFERENCES _TDAUser(UserId) ON DELETE CASCADE,
CreateAt TIMESTAMP DEFAULT NOW(),
PRIMARY KEY (ItemId, UserId)
);

-- 6. 상품 태그 연결 테이블
CREATE TABLE _TDAItemTag (
ItemId INTEGER REFERENCES _TDAItem(ItemId) ON DELETE CASCADE,
TagId INTEGER REFERENCES _TDATag(TagId) ON DELETE CASCADE,
PRIMARY KEY (ItemId, TagId)
);

-- 7. 게시판 테이블
CREATE TABLE _TDABoard (
BoardId SERIAL PRIMARY KEY,
UserId INTEGER REFERENCES _TDAUser(UserId) ON DELETE CASCADE,
BoardTitle VARCHAR(255) NOT NULL,
BoardContents TEXT NOT NULL,
BoardImage TEXT,
CreateAt TIMESTAMP DEFAULT NOW(),
UpdateAt TIMESTAMP DEFAULT NOW()
);

-- 8. 게시판 댓글 테이블
CREATE TABLE _TDABoardComment (
BoardId INTEGER REFERENCES _TDABoard(BoardId) ON DELETE CASCADE,
UserId INTEGER REFERENCES _TDAUser(UserId) ON DELETE CASCADE,
Serl SERIAL,
CommentContents TEXT NOT NULL,
CreateAt TIMESTAMP DEFAULT NOW(),
UpdateAt TIMESTAMP DEFAULT NOW(),
PRIMARY KEY (BoardId, Serl)
);

-- 9. 게시판 좋아요 테이블
CREATE TABLE _TDABoardLike (
BoardId INTEGER REFERENCES _TDABoard(BoardId) ON DELETE CASCADE,
UserId INTEGER REFERENCES _TDAUser(UserId) ON DELETE CASCADE,
CreateAt TIMESTAMP DEFAULT NOW(),
PRIMARY KEY (BoardId, UserId)
);
55 changes: 55 additions & 0 deletions sprint-mission-6.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
-- 1. 모든 주문 조회
SELECT * FROM orders;

-- 2. id가 423인 주문 조회
SELECT * FROM orders WHERE id = 423;

-- 3. 총 주문 건수 구하기
SELECT COUNT(*) AS total_orders FROM orders;

-- 4. 최신 순으로 주문 조회 (날짜와 시간 기준)
SELECT * FROM orders ORDER BY date DESC, time DESC;

-- 5. 오프셋 기반 페이지네이션 (1페이지, 10개)
SELECT * FROM orders ORDER BY date DESC, time DESC LIMIT 10 OFFSET 0;

-- 6. 오프셋 기반 페이지네이션 (5페이지, 10개)
SELECT * FROM orders ORDER BY date DESC, time DESC LIMIT 10 OFFSET 40;

-- 7. 커서 기반 페이지네이션 (id 42 기준 다음 페이지)
SELECT * FROM orders WHERE id < 42 ORDER BY id DESC LIMIT 10;

-- 8. 2025년 3월 주문 내역 조회
SELECT * FROM orders WHERE date >= '2025-03-01' AND date <= '2025-03-31';

-- 9. 2025년 3월 12일 오전 주문 내역 조회
SELECT * FROM orders WHERE date = '2025-03-12' AND time < '12:00:00';

-- 10. 이름에 'Cheese' 혹은 'Chicken'이 포함된 피자 종류 조회
SELECT * FROM pizza_types WHERE name LIKE '%Cheese%' OR name LIKE '%Chicken%';

-- 11. 각 피자별 주문된 건 수
SELECT pizza_id, COUNT(DISTINCT order_id) FROM order_details GROUP BY pizza_id;

-- 12. 각 피자별 총 주문 수량
SELECT pizza_id, SUM(quantity) FROM order_details GROUP BY pizza_id;

-- 13. 가격이 20보다 큰 피자 종류만 order_details에서 조회
SELECT * FROM order_details
WHERE pizza_id IN (SELECT id FROM pizzas WHERE price > 20);

-- 14. 날짜별 총 주문 건수 80건 이상인 날 조회 및 정렬
SELECT date, COUNT(id) AS order_count FROM orders
GROUP BY date HAVING COUNT(id) >= 80 ORDER BY order_count DESC;

-- 15. 총 주문 수량 10개 이상인 피자 조회 및 내림차순 정렬
SELECT pizza_id, SUM(quantity) AS total_qty FROM order_details
GROUP BY pizza_id HAVING SUM(quantity) >= 10 ORDER BY total_qty DESC;

-- 16. 피자별 총 수익 구하기
SELECT od.pizza_id, SUM(od.quantity * p.price) AS total_revenue
FROM order_details od JOIN pizzas p ON od.pizza_id = p.id GROUP BY od.pizza_id;

-- 17. 날짜별 주문 건수와 총 주문 수량
SELECT o.date, COUNT(DISTINCT o.id) AS order_count, SUM(od.quantity) AS total_quantity
FROM orders o JOIN order_details od ON