------------------------------------------------------------------------
-- BOOSTER QUIZ 7-1-1
------------------------------------------------------------------------
ㅁ (주문) 테이블은 매장 테이블을 참조합니다.
ㅁ 바꿔 말하면, 매장 테이블은 (주문) 테이블에 참조된다는 뜻입니다
ㅁ 그러므로 (주문) 테이블에 발생되는 데이터의 매장ID는 매장 테이블에 존재해야 합니다.
------------------------------------------------------------------------
-- BOOSTER QUIZ 7-1-2
------------------------------------------------------------------------
ㅁ (tr_ord) 테이블은 ms_mbr를 참조합니다.
ㅁ 이는 ms_mbr 테이블의 (PK)인 mbr_id를 (tr_ord) 테이블에서 FK로 사용하고 있다는 뜻입니다.
------------------------------------------------------------------------
-- BOOSTER QUIZ 7-1-3
------------------------------------------------------------------------
ㅁ 논리 ERD의 주문상세, 상품, 상품카테고리를 참고해서 답하세요.
ㅁ (주문상세) 테이블은 주문 테이블을 참조합니다.
ㅁ (주문상세) 테이블의 PK는 주문번호와 (주문상세번호)입니다.
ㅇ 하나의 주문에 여러 개의 상세 내역이 있을 수 있다는 뜻입니다.
ㅁ (주문상세) 테이블은 주문 테이블과 함께 (상품) 테이블도 참조하고 있습니다.
ㅁ (상품) 테이블의 PK 인 상품ID가 (주문상세) 테이블에 FK 컬럼으로 존재합니다.
ㅁ 정리하면, 주문에 대해 어떤 상품이 주문 되었는지 알려면 (주문상세) 테이블을 확인해야 합니다.
ㅇ 그리고 하나의 주문에는 여러 (상품)의 주문이 가능합니다.
------------------------------------------------------------------------
-- BOOSTER QUIZ 7-1-3
------------------------------------------------------------------------
ㅁ tr_ord 테이블은 tr_ord_det 테이블에 참조(된다)
ㅇ 이는 tr_ord 테이블의 PK 인 ord_no가 tr_ord_det 테이블에서 (사용) 되고 있다는 뜻입니다.
ㅁ 만약에 ord_no가 100 인 신규 주문이 저장되려면, (tr_ord)에 먼저 저장되어야 합니다.
ㅇ 그래야만 (tr_ord_det) 에도 ord_no가 100인 데이터를 생성할 수 있습니다.
ㅁ tr_ord_det 테이블의 PK는 ord_no와 ord_det_no로 구성되어 있습니다.
ㅇ 이는 ord_no별로 여러 건의 상세 데이터를 저장할 수 (있다)는 뜻입니다.
ㅇ 그리고 tr_ord_det 테이블은 ms_item 테이블의 item_id를 참조 (합니다)
------------------------------------------------------------------------
-- BOOSTER QUIZ 7-2-1
------------------------------------------------------------------------
ㅁ 아래 SQL에서 조인 조건에 해당하는 번호를 모두 적으세요. (3)
ㅁ 아래 SQL에서 ms_mbr 테이블의 필터 조건에 해당하는 번호를 모두 적으세요. (4)
ㅁ 아래 SQL에서 tr_ord 테이블의 필터 조건에 해당하는 번호를 모두 적으세요. (1),(2),(5)
------------------------------------------------------------------------
-- BOOSTER QUIZ 7-2-2
------------------------------------------------------------------------
ㅁ (SQL-3)을 실행하면 nick_nm이 Air인 데이터는 몇 건인가요? 2건
ㅁ (SQL-3)을 실행하면 nick_nm이 Water1인 데이터는 몇 건인가요? 3건
------------------------------------------------------------------------
-- BOOSTER QUIZ 7-2-3
------------------------------------------------------------------------
ㅁ (SQL-3)의 실행 결과에 포함되지 않는 ms_mbr 테이블의 mbr_id는? M3017, M3196
ㅁ (SQL-3)의 실행 결과에 포함되지 않는 tr_ord 테이블의 ord_no는? 254529, 254829, 254830
------------------------------------------------------------------------
-- BOOSTER QUIZ 7-2-4
------------------------------------------------------------------------
SELECT t1.mbr_id ,t1.nick_nm ,t1.mbr_gd
,t2.ord_no ,t2.ord_dtm ,t2.shop_id ,t2.ord_amt
FROM startdbmy.ms_mbr t1
,startdbmy.tr_ord t2
WHERE t1.mbr_gd = 'GOLD'
AND t2.shop_id = 'S002'
AND t2.ord_dtm >= STR_TO_DATE('20221001','%Y%m%d')
AND t2.ord_dtm < STR_TO_DATE('20221002','%Y%m%d')
AND t2.mbr_id = t1.mbr_id
ORDER BY t1.mbr_id;
------------------------------------------------------------------------
-- BOOSTER QUIZ 7-3-1
------------------------------------------------------------------------
SELECT t1.ord_no ,t1.ord_dtm ,t1.shop_id ,t2.ord_det_no
,t2.item_id ,t2.ord_qty ,t2.sale_prc
FROM startdbmy.tr_ord t1
INNER JOIN startdbmy.tr_ord_det t2
ON (t2.ord_no = t1.ord_no)
WHERE t1.shop_id = 'S062'
AND t1.ord_dtm >= STR_TO_DATE('20230331:07','%Y%m%d:%H')
AND t1.ord_dtm < STR_TO_DATE('20230331:12','%Y%m%d:%H')
ORDER BY t1.ord_no, t1.ord_det_no;
------------------------------------------------------------------------
-- BOOSTER QUIZ 7-3-2
------------------------------------------------------------------------
SELECT t1.ord_no, t1.ord_dtm, t1.shop_id
,t2.ord_det_no, t2.item_id, t2.ord_qty, t2.sale_prc
FROM startdbmy.tr_ord t1
INNER JOIN startdbmy.tr_ord_det t2
ON (t2.ord_no = t1.ord_no)
WHERE t1.ord_dtm >= STR_TO_DATE('20230101','%Y%m%d')
AND t1.ord_dtm < STR_TO_DATE('20230102','%Y%m%d')
AND t1.shop_id = 'S230'
AND t2.item_id = 'AMB'
ORDER BY t1.ord_no;
------------------------------------------------------------------------
-- BOOSTER QUIZ 7-3-3
------------------------------------------------------------------------
SELECT t1.ord_no ,t1.ord_det_no ,t1.ord_qty ,t1.sale_prc ,t1.item_id ,t2.item_nm
FROM startdbmy.tr_ord_det t1
INNER JOIN startdbmy.ms_item t2
ON (t2.item_id = t1.item_id)
WHERE t1.ord_no = 91810
ORDER BY t1.ord_det_no;
------------------------------------------------------------------------
-- BOOSTER QUIZ 7-5-1
------------------------------------------------------------------------
SELECT t1.shop_oper_tp
,SUM(t2.ord_amt) ord_amt_sum
FROM startdbmy.ms_shop t1
INNER JOIN startdbmy.tr_ord t2
ON (t2.shop_id = t1.shop_id)
WHERE t2.ord_dtm >= STR_TO_DATE('20220101','%Y%m%d')
AND t2.ord_dtm < STR_TO_DATE('20220201','%Y%m%d')
GROUP BY t1.shop_oper_tp
ORDER BY t1.shop_oper_tp;
------------------------------------------------------------------------
-- BOOSTER QUIZ 7-5-2
------------------------------------------------------------------------
SELECT t1.shop_oper_tp ,DATE_FORMAT(t2.ord_dtm,'%Y') ord_year
,COUNT(*) ord_cnt
FROM startdbmy.ms_shop t1
INNER JOIN startdbmy.tr_ord t2
ON (t2.shop_id = t1.shop_id)
WHERE t1.shop_st = 'CLSD'
GROUP BY t1.shop_oper_tp ,DATE_FORMAT(t2.ord_dtm,'%Y')
ORDER BY t1.shop_oper_tp ,DATE_FORMAT(t2.ord_dtm,'%Y');
------------------------------------------------------------------------
-- BOOSTER QUIZ 7-5-3
------------------------------------------------------------------------
SELECT t1.shop_id
,MAX(t1.shop_nm) shop_nm
,MAX(t1.shop_size) shop_size
,SUM(t2.ord_amt) ord_amt_sum
,SUM(t2.ord_amt) / MAX(t1.shop_size) ord_amt_per_size
FROM startdbmy.ms_shop t1
INNER JOIN startdbmy.tr_ord t2
ON (t2.shop_id = t1.shop_id)
WHERE t1.shop_start_ymd = '20180405'
AND t2.ord_dtm >= STR_TO_DATE('20191223','%Y%m%d')
AND t2.ord_dtm < STR_TO_DATE('20191224','%Y%m%d')
GROUP BY t1.shop_id
ORDER BY MAX(t1.shop_size) DESC;
------------------------------------------------------------------------
-- BOOSTER QUIZ 7-7-1
------------------------------------------------------------------------
SELECT t1.ord_no ,t1.ord_dtm ,t2.shop_nm ,t3.nick_nm ,t4.ord_det_no ,t4.ord_qty ,t5.item_nm
FROM startdbmy.tr_ord t1
INNER JOIN startdbmy.ms_shop t2 ON (t2.shop_id = t1.shop_id)
INNER JOIN startdbmy.ms_mbr t3 ON (t3.mbr_id = t1.mbr_id)
INNER JOIN startdbmy.tr_ord_det t4 ON (t4.ord_no = t1.ord_no)
INNER JOIN startdbmy.ms_item t5 ON (t5.item_id = t4.item_id)
WHERE t1.ord_no = 1
ORDER BY t4.ord_det_no;
------------------------------------------------------------------------
-- BOOSTER QUIZ 7-7-2
------------------------------------------------------------------------
SELECT t2.ord_no ,t2.ord_dtm ,t1.shop_nm ,t1.shop_size ,t4.item_id ,t5.item_nm ,t4.ord_qty
FROM startdbmy.ms_shop t1
INNER JOIN startdbmy.tr_ord t2 ON (t2.shop_id = t1.shop_id)
INNER JOIN startdbmy.ms_mbr t3 ON (t3.mbr_id = t2.mbr_id)
INNER JOIN startdbmy.tr_ord_det t4 ON (t4.ord_no = t2.ord_no)
INNER JOIN startdbmy.ms_item t5 ON (t5.item_id = t4.item_id)
WHERE t1.shop_oper_tp = 'DRCT'
AND t1.shop_size <= 100
AND t2.ord_dtm >= STR_TO_DATE('20221224','%Y%m%d')
AND t2.ord_dtm < STR_TO_DATE('20221225','%Y%m%d')
AND t3.mbr_gd = 'PLAT'
ORDER BY t2.ord_no ,t4.ord_det_no;
------------------------------------------------------------------------
-- BOOSTER QUIZ 7-7-3
------------------------------------------------------------------------
SELECT t4.item_id ,MAX(t5.item_nm) item_nm ,SUM(t4.ord_qty) ord_qty_sum
FROM startdbmy.ms_shop t1
INNER JOIN startdbmy.tr_ord t2 ON (t2.shop_id = t1.shop_id)
INNER JOIN startdbmy.ms_mbr t3 ON (t3.mbr_id = t2.mbr_id)
INNER JOIN startdbmy.tr_ord_det t4 ON (t4.ord_no = t2.ord_no)
INNER JOIN startdbmy.ms_item t5 ON (t5.item_id = t4.item_id)
WHERE t1.shop_oper_tp = 'DRCT'
AND t1.shop_size <= 100
AND t2.ord_dtm >= STR_TO_DATE('20221224','%Y%m%d')
AND t2.ord_dtm < STR_TO_DATE('20221225','%Y%m%d')
AND t3.mbr_gd = 'PLAT'
GROUP BY t4.item_id
ORDER BY ord_qty_sum DESC;
------------------------------------------------------------------------
-- BOOSTER QUIZ 7-8-1
------------------------------------------------------------------------
SELECT t1.mbr_id ,t1.nick_nm ,t1.join_dtm ,t2.ord_dtm
,t4.item_id ,t4.prc_start_dt ,t4.sale_prc
FROM startdbmy.ms_mbr t1
INNER JOIN startdbmy.tr_ord t2 ON (t2.mbr_id = t1.mbr_id)
INNER JOIN startdbmy.tr_ord_det t3 ON (T3.ord_no = t2.ord_no)
INNER JOIN startdbmy.ms_item_prc_hist t4
ON (t4.item_id = t3.item_id
AND t4.prc_start_dt <= DATE(t2.ord_dtm)
AND t4.prc_end_dt >= DATE(t2.ord_dtm)
)
WHERE t1.mbr_id = 'M4547'
AND t2.ord_dtm >= STR_TO_DATE('20240105','%Y%m%d')
AND t2.ord_dtm < STR_TO_DATE('20240106','%Y%m%d')
ORDER BY t2.ord_dtm ,t4.item_id;
------------------------------------------------------------------------
-- BOOSTER QUIZ 7-8-2
------------------------------------------------------------------------
SELECT t1.mbr_id ,t1.nick_nm ,t1.join_dtm ,t2.ord_dtm
,t4.item_id ,t4.prc_start_dt ,t4.sale_prc
,t5.sale_prc prc_join
FROM startdbmy.ms_mbr t1
INNER JOIN startdbmy.tr_ord t2 ON (t2.mbr_id = t1.mbr_id)
INNER JOIN startdbmy.tr_ord_det t3 ON (T3.ord_no = t2.ord_no)
INNER JOIN startdbmy.ms_item_prc_hist t4
ON (t4.item_id = t3.item_id
AND t4.prc_start_dt <= DATE(t2.ord_dtm)
AND t4.prc_end_dt >= DATE(t2.ord_dtm)
)
INNER JOIN startdbmy.ms_item_prc_hist t5
ON (t5.item_id = t3.item_id
AND t5.prc_start_dt <= DATE(t1.join_dtm)
AND t5.prc_end_dt >= DATE(t1.join_dtm)
)
WHERE t1.mbr_id = 'M4547'
AND t2.ord_dtm >= STR_TO_DATE('20240105','%Y%m%d')
AND t2.ord_dtm < STR_TO_DATE('20240106','%Y%m%d')
ORDER BY t2.ord_dtm ,t4.item_id;
------------------------------------------------------------------------
-- BOOSTER QUIZ 7-9-1
------------------------------------------------------------------------
SELECT t1.mbr_id ,t1.nick_nm ,t2.ord_no ,t2.ord_dtm
FROM startdbmy.ms_mbr t1
LEFT OUTER JOIN startdbmy.tr_ord t2
ON (t2.mbr_id = t1.mbr_id
AND t2.ord_dtm >= STR_TO_DATE('20200101','%Y%m%d')
AND t2.ord_dtm < STR_TO_DATE('20200104','%Y%m%d'))
WHERE t1.nick_nm IN ('Air','Sky','Space')
ORDER BY t1.mbr_id ,t2.ord_no;
------------------------------------------------------------------------
-- BOOSTER QUIZ 7-9-2
------------------------------------------------------------------------
SELECT t1.mbr_id ,t1.nick_nm ,t2.ord_no ,t2.ord_dtm ,t3.ord_det_no ,t3.item_id ,t4.item_nm
FROM startdbmy.ms_mbr t1
LEFT OUTER JOIN startdbmy.tr_ord t2
ON (t2.mbr_id = t1.mbr_id
AND t2.ord_dtm >= STR_TO_DATE('20200101','%Y%m%d')
AND t2.ord_dtm < STR_TO_DATE('20200104','%Y%m%d'))
LEFT OUTER JOIN startdbmy.tr_ord_det t3
ON (t3.ord_no = t2.ord_no)
LEFT OUTER JOIN startdbmy.ms_item t4
ON (t4.item_id = t3.item_id)
WHERE t1.nick_nm IN ('Air','Sky','Space')
ORDER BY t1.mbr_id ,t2.ord_no;
------------------------------------------------------------------------
-- BOOSTER QUIZ 7-10-1
------------------------------------------------------------------------
SELECT t1.mbr_id ,MAX(t1.nick_nm) nick_nm
,COUNT(t2.ord_no) ord_cnt
,IFNULL(SUM(t2.ord_amt),0) ord_amt_sum
FROM startdbmy.ms_mbr t1
LEFT OUTER JOIN startdbmy.tr_ord t2
ON (t2.mbr_id = t1.mbr_id
AND t2.ord_dtm >= STR_TO_DATE('20200101','%Y%m%d')
AND t2.ord_dtm < STR_TO_DATE('20200104','%Y%m%d'))
WHERE t1.nick_nm IN ('Air','Sky','Space')
GROUP BY t1.mbr_id
ORDER BY t1.mbr_id;
------------------------------------------------------------------------
-- BOOSTER QUIZ 7-12-1
------------------------------------------------------------------------
SELECT DATE_FORMAT(t1.ord_dtm,'%Y') ord_yy
,'주문건수' 값구분
,COUNT(*) val
FROM startdbmy.tr_ord t1
WHERE t1.ord_dtm >= STR_TO_DATE('20200101','%Y%m%d')
AND t1.ord_dtm < STR_TO_DATE('20240101','%Y%m%d')
GROUP BY DATE_FORMAT(t1.ord_dtm,'%Y')
UNION ALL
SELECT DATE_FORMAT(t1.ord_dtm,'%Y') ord_yy
,'주문존재회원수' 값구분
,COUNT(DISTINCT t1.mbr_id) val
FROM startdbmy.tr_ord t1
WHERE t1.ord_dtm >= STR_TO_DATE('20200101','%Y%m%d')
AND t1.ord_dtm < STR_TO_DATE('20240101','%Y%m%d')
GROUP BY DATE_FORMAT(t1.ord_dtm,'%Y')
ORDER BY ord_yy ,값구분;
SQL
복사