SQL, 데이터 분석!

SQL, 데이터 분석!

바로 보고 실습하는 SQL, 입문부터 활용까지!

10 실전 데이터 관계분석(별다방 카페)

# 실전 데이터 관계분석(별다방 카페) 코로나-19 팬데믹 시대. 무식하면 용감하다 했던가, 홍팍이는 그렇게 카페를 창업했다. 떨리는 마음으로 첫 오전 타임 매출을 확인하는데,, #### 카페 DB 구조도 ![홍팍-SQL-별다방-카페-매출-DB-스키마](http://drive.google.com/thumbnail?export=view&sz=w960&id=1WXMyTBt6IhmRobRrP4cKlhWiMjM7sRD8) #### 카페 DB 데이터 ![홍팍-SQL-별다방-카페-매출-DB-데이터](http://drive.google.com/thumbnail?export=view&sz=w960&id=1WWz36oUQsnLO13RWzNLua-uO5RSxaRQE) ## 문제 --- 1. 다음 중, 주문(orders)과 음료(beverages)의 관계는? - 1:1 - 1:N - M:N 2. 다음 중, 주문#2에 담긴 음료가 아닌 것은? - 아메리카노 - 라떼 - 콜드브루 - 바닐라 쉐이크 3. 다음 중, 취소된 주문내역(order_detatils)이 아닌 것은? - 주문내역#2 - 주문내역#3 - 주문내역#4 - 주문내역#11 4. 다음 표를 채워 주문#14의 매출액을 구하시오. <img height="100" src="http://drive.google.com/thumbnail? Export=view&sz=w960&id=1eTP8nma3rCLngHax-v36SmuWS4JkEjzy" alt="홍팍-SQL-별다방-카페-매출-계산"> ## 훈련 --- 1. 카페 DB의 주문, 음료, 주문내역 테이블을 만드시오. ``` -- 주문 CREATE TABLE orders ( ... ); -- 음료 CREATE TABLE beverages ( ... ); -- 주문내역 CREATE TABLE order_details ( ... ); ``` 2. 생성한 테이블에 레코드를 채우시오. ``` -- 주문(orders) INSERT INTO orders(status, created_at) VALUES ('DELIVERED', '2022-02-26 8:32:13'), ('CANCELLED', '2022-02-26 8:35:27'), ('DELIVERED', '2022-02-26 8:44:53'), ('DELIVERED', '2022-02-26 9:05:12'), ('DELIVERED', '2022-02-26 9:11:35'), ('DELIVERED', '2022-02-26 9:14:18'), ('DELIVERED', '2022-02-26 9:34:20'), ('DELIVERED', '2022-02-26 9:44:27'), ('DELIVERED', '2022-02-26 9:48:25'), ('DELIVERED', '2022-02-26 11:14:52'), ('CANCELLED', '2022-02-26 11:32:13'), ('DELIVERED', '2022-02-26 11:55:40'), ('DELIVERED', '2022-02-26 12:15:01'), ('DELIVERED', '2022-02-26 12:21:52'), ('CANCELLED', '2022-02-26 12:29:17') ; -- 음료(beverages) INSERT INTO beverages(name, price, btype) VALUES ('아메리카노', 4500, 'COFFEE'), ('라떼', 5000, 'COFFEE'), ('카푸치노', 5000, 'COFFEE'), ('카페모카', 5500, 'COFFEE'), ('콜드브루', 5200, 'COFFEE'), ('레몬 에이드', 3800, 'AID'), ('자몽 에이드', 4800, 'AID'), ('바닐라 쉐이크', 5800, 'SHAKE') ; -- 주문내역(order_details) INSERT INTO order_details(order_id, beverage_id, count) VALUES (1, 1, 1), (2, 1, 2), (2, 2, 3), (2, 8, 2), (3, 1, 2), (4, 8, 1), (5, 4, 1), (6, 5, 3), (7, 1, 3), (7, 2, 2), (8, 1, 1), (9, 5, 1), (10, 1, 4), (11, 2, 1), (12, 3, 1), (13, 1, 6), (14, 1, 8), (14, 2, 2), (14, 6, 1), (15, 1, 4) ; ``` 3. 다음은 `문제2`와 `문제3`, 그리고 `문제4`를 위한 쿼리이다. 이를 실행하여 결과를 확인하고, 여기서 사용된 `JOIN`의 개념을 조사하시오. ``` -- 주문#2에 담긴 음료 이름들 -- JOIN 문법 사용(다음 강의에서 배움) SELECT beverages.name FROM order_details JOIN beverages ON beverages.id = order_details.beverage_id WHERE order_id = 2 ; -- 취소된 주문내역의 id들 -- JOIN 문법 사용(다음 강의에서 배움) SELECT order_details.id FROM order_details JOIN orders ON orders.id = order_details.order_id WHERE orders.status = 'CANCELLED' ; -- 주문#14의 매출 -- JOIN 문법 사용(다음 강의에서 배움) SELECT SUM(order_details.count * beverages.price) FROM order_details JOIN beverages ON beverages.id = order_details.beverage_id WHERE order_id = 14 ; ```