Database/MySQL 실습

[DBeaver] MySQL 실습 - 시간처리 실습

juunghee 2025. 2. 2. 19:46

 

 

 

● 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;

 

 

 

 

home