● orders 테이블 생성
Table Name : orders
- id : 주문 고유 ID (프라이머리 키, 자동 증가)
- customer_name : 주문자명 (문자열, 최대 50자)
- product_name : 제품명 (문자열, 최대 100자)
- order_date : 주문 시각 (날짜+시간)
- delivery_date : 배송 일자 (날짜)

● orders 테이블에 데이터 추가
| INSERT INTO orders (customer_name, product_name, order_date, delivery_date) VALUES ('김철수', '노트북', '2023-10-01 14:30:00', '2023-10-05'), ('이영희', '스마트폰', '2023-10-02 09:15:00', '2023-10-07'), ('박준혁', '태블릿', '2023-10-03 16:45:00', '2023-10-09'), ('최수진', '헤드폰', '2023-10-04 11:00:00', '2023-10-10'), ('정우진', '키보드', '2023-10-05 18:20:00', '2023-10-12'), ('윤지민', '스마트워치', '2023-10-06 10:30:00', '2023-10-10'), ('한상우', '무선 이어폰', '2023-10-07 15:45:00', '2023-10-07'), ('박현우', '데스크탑 컴퓨터', '2023-10-08 09:30:00', '2023-10-14'), ('이유나', '노트북 쿨러', '2023-10-09 16:10:00', '2023-10-13'), ('정다인', '무선 키보드', '2023-10-10 14:15:00', '2023-10-16'), ('김영훈', '마우스', '2023-10-11 08:30:00', '2023-10-12'), ('황예진', '모니터', '2023-10-12 19:20:00', '2023-10-19'), ('이세진', '스피커', '2023-10-13 11:45:00', '2023-10-13'), ('최나연', '헤드셋', '2023-10-14 14:30:00', '2023-10-18'), ('오성훈', 'USB 허브', '2023-11-01 09:00:00', '2023-11-07'), ('서지우', '외장하드', '2023-11-02 13:25:00', '2023-11-12'), ('김하윤', '태블릿', '2023-11-03 18:50:00', '2023-11-14'), ('박민성', '파워뱅크', '2023-11-04 12:15:00', '2023-11-11'), ('유나영', '스마트폰 케이스', '2023-11-05 16:40:00', '2023-11-10'), ('조현민', '노트북 충전기', '2023-11-06 10:05:00', '2023-11-06'), ('김가현', '블루투스 스피커', '2023-11-07 17:30:00', '2023-11-14'), ('전지훈', '휴대폰 거치대', '2023-11-08 08:45:00', '2023-11-12'), ('하승민', '캠핑 랜턴', '2023-11-09 14:10:00', '2023-11-16'), ('임성준', '보조 배터리', '2023-12-01 20:15:00', '2023-12-09'), ('강은비', '전기 충전기', '2023-12-02 07:50:00', '2023-12-10'), ('남상우', '미니 냉장고', '2023-12-03 12:45:00', '2023-12-12'), ('황정민', '전자 레인지', '2023-12-04 15:30:00', '2023-12-13'), ('정수현', '커피 메이커', '2023-12-05 09:10:00', '2023-12-14'), ('윤채원', '다리미', '2023-12-06 11:40:00', '2023-12-15'), ('박진우', '식기세척기', '2023-12-07 16:25:00', '2023-12-17'), ('김민재', '게임 콘솔', '2023-12-08 14:05:00', '2023-12-18'), ('오지훈', '전자 체중계', '2023-12-09 10:55:00', '2023-12-09'), ('윤선영', '가습기', '2023-12-10 17:45:00', '2023-12-21'), ('박시후', '전동 칫솔', '2023-12-11 13:20:00', '2023-12-22'), ('조은지', '다용도 믹서기', '2023-12-12 09:30:00', '2023-12-23'), ('김태훈', '진공 청소기', '2023-12-13 11:15:00', '2023-12-24'), ('박지수', '전자 온풍기', '2023-12-14 12:00:00', '2023-12-14'), ('정민우', '커피 머신', '2023-12-15 08:40:00', '2023-12-26'), ('최정원', '라디오', '2023-12-16 19:55:00', '2023-12-28'), ('김성환', '휴대용 선풍기', '2023-12-17 15:10:00', '2023-12-29'), ('이정민', '안마 의자', '2023-12-18 18:30:00', '2023-12-18'); |
● 실습문제
1. 각 주문의 날짜와 요일(한글) 정보를 조회하세요.
|
SELECT order_date,
CASE dayofweek(order_date) when 1 then "일요일" when 2 then "월요일" when 3 then "화요일" when 4 then "수요일" when 5 then "목요일" when 6 then "금요일" else "토요일" End as day_kor from orders; |
2. 각 월별로 이루어진 주문 수를 조회하세요.
|
SELECT month(order_date) month, count(*) order_cnt
from orders group by month(order_date); |
3. 12월에 이루어진 주문 내역을 조회하세요.
|
SELECT *
FROM orders where MONTH(order_date) = 12; |
4. 각 주문에 대해 주문일과 배송일 사이의 일수 차이를 계산하여 조회하세요.
|
SELECT *,
datediff(delivery_date, order_date) til_deliv from orders; |
5. 주문일과 배송일이 동일한, 즉 하루 안에 처리된 주문들을 조회하세요.
|
SELECT *
FROM orders where datediff(delivery_date, date(order_date)) = 0; |
6. 가장 최근에 이루어진 주문의 정보를 조회하세요.
|
-- 1. 시간 데이터에 내림차순 정렬하여 확인하기
SELECT * FROM orders order by order_date DESC limit 1; -- 2. 시간 데이터 최대값 찾아 Sub Query로 확인하기 SELECT * FROM orders where order_date = (SELECT max(order_date) from orders); |
7. 각 주문이 평일에 이루어졌는지 주말에 이루어졌는지를 구분하여 조회하세요.
(평일 또는 주말로 표시)
|
-- 1. Case문 사용하여 결과 도출하기
SELECT *, case weekday(order_date) when 5 then "주말" when 6 then "주말" else "평일" END as wkdy_or_wknd FROM orders; -- 2. if문 사용하여 결과 도출하기 SELECT *, if(weekday(order_date) in (5, 6), "주말", "평일") wkdy_or_wknd FROM orders; -- 3. if문 사용하여 결과 도출하기 (weekday() 함수의 특성 이용) SELECT *, if(weekday(order_date) > 4, "주말", "평일") wkdy_or_wknd FROM orders; |
8. 주문일을 기준으로 정확히 4일 후에 배송이 예정된 주문 내역을 조회하세요.
|
-- 1. datediff() 함수 사용하기
SELECT * FROM orders where datediff(delivery_date, date(order_date)) = 4; -- 2. date_add() 함수 사용하기 SELECT * FROM orders where date_add(date(order_date), interval 4 day) = delivery_dat |
9. 오전(00:00 ~ 11:59)과 오후(12:00 ~ 23:59)에 이루어진 주문들을 구분하여 조회하세요.
이 컬럼명은 order_period로 하세요.
|
SELECT *, if(hour(order_date) >= 12, "오후", "오전") order_period
FROM orders; |
10. 오늘 기준으로 앞으로 3일 이내에 배송이 예정된 주문들을 조회하세요.
|
-- 1. datediff() 함수 사용하기
SELECT * FROM orders where delivery_date >= curdate() AND DATEDIFF(delivery_date, curdate()) <= 3; -- 2. date_add() 함수 사용하기 SELECT * FROM orders where delivery_date >= curdate() and date_add(curdate(), interval 3 day) >= delivery_date; |
'Database > MySQL 실습' 카테고리의 다른 글
| [DBeaver-MySQL] : (스키마 설계) 영화 리뷰 서비스 개발 실습 (0) | 2025.02.24 |
|---|---|
| [DBeaver] MySQL 실습 - 여러테이블 조인(join)하기 실습 (0) | 2025.02.13 |
| [DBeaver] MySQL 실습 - 키워드를 이용해 특수한 컬럼 조회하기 : group by, having (0) | 2025.01.28 |
| [DBeaver] MySQL 실습 - CRUD 및 문자열 처리 실습 2 (0) | 2025.01.14 |
| [DBeaver] MySQL 실습 - CRUD 및 문자열 처리 실습 (0) | 2025.01.12 |