07SQL 실전: 택배 발송 데이터로 정렬 확인하기
보충 실습예시 데이터를 만들고 앞의 정렬을 모두 실행해 순서를 확인합니다. 마지막 쿼리는 CASE로 H3 거점을 맨 앞에 두는 우선순위 정렬입니다(107 → 104 → 102 → 103 → 105 → 101 → 106 → 108).
CREATE TABLE PARCEL_DISPATCH (
PARCEL_ID NUMBER(4) PRIMARY KEY,
HUB_CODE VARCHAR2(2 CHAR) NOT NULL,
RECIPIENT VARCHAR2(30 CHAR) NOT NULL,
FEE NUMBER(8) NOT NULL,
DISCOUNT NUMBER(8),
BOX_CODE VARCHAR2(3 CHAR) NOT NULL,
REQUESTED_AT DATE NOT NULL,
CONSTRAINT CK_PD_FEE CHECK (FEE >= 0),
CONSTRAINT CK_PD_DISCOUNT CHECK (DISCOUNT >= 0)
);
INSERT INTO PARCEL_DISPATCH VALUES (101, 'H1', '서연', 5500, NULL, '1', DATE '2026-09-01');
INSERT INTO PARCEL_DISPATCH VALUES (102, 'H2', '민호', 7000, 500, '10', DATE '2026-09-02');
INSERT INTO PARCEL_DISPATCH VALUES (103, 'H1', '지우', 7000, 1000, '2', DATE '2026-09-03');
INSERT INTO PARCEL_DISPATCH VALUES (104, 'H3', '윤서', 5000, NULL, '1', DATE '2026-09-01');
INSERT INTO PARCEL_DISPATCH VALUES (105, 'H2', '도윤', 7000, NULL, '2', DATE '2026-09-04');
INSERT INTO PARCEL_DISPATCH VALUES (106, 'H1', '하린', 5500, 200, '10', DATE '2026-09-03');
INSERT INTO PARCEL_DISPATCH VALUES (107, 'H3', '유진', 7000, 300, '2', DATE '2026-09-04');
INSERT INTO PARCEL_DISPATCH VALUES (108, 'H2', '지민', 5000, NULL, '1', DATE '2026-09-02');
COMMIT;
SELECT PARCEL_ID, FEE
FROM PARCEL_DISPATCH
ORDER BY FEE DESC, PARCEL_ID ASC;
SELECT PARCEL_ID, FEE
FROM PARCEL_DISPATCH
ORDER BY FEE DESC, PARCEL_ID ASC;
SELECT PARCEL_ID,
FEE - NVL(DISCOUNT, 0) AS NET_FEE
FROM PARCEL_DISPATCH
ORDER BY NET_FEE DESC, PARCEL_ID ASC;
SELECT PARCEL_ID, HUB_CODE, FEE
FROM PARCEL_DISPATCH
ORDER BY 3 DESC, 1 ASC;
SELECT PARCEL_ID, HUB_CODE, FEE, RECIPIENT
FROM PARCEL_DISPATCH
ORDER BY HUB_CODE ASC, FEE DESC, PARCEL_ID ASC;
SELECT PARCEL_ID, HUB_CODE, FEE
FROM PARCEL_DISPATCH
ORDER BY FEE DESC, HUB_CODE ASC, PARCEL_ID ASC;
SELECT PARCEL_ID, DISCOUNT
FROM PARCEL_DISPATCH
ORDER BY DISCOUNT ASC, PARCEL_ID ASC;
SELECT PARCEL_ID, DISCOUNT
FROM PARCEL_DISPATCH
ORDER BY DISCOUNT DESC, PARCEL_ID ASC;
SELECT PARCEL_ID, DISCOUNT
FROM PARCEL_DISPATCH
ORDER BY DISCOUNT ASC NULLS FIRST, PARCEL_ID ASC;
SELECT PARCEL_ID, DISCOUNT
FROM PARCEL_DISPATCH
ORDER BY DISCOUNT DESC NULLS LAST, PARCEL_ID ASC;
SELECT DISTINCT BOX_CODE
FROM PARCEL_DISPATCH
ORDER BY BOX_CODE;
SELECT BOX_CODE
FROM (SELECT DISTINCT BOX_CODE FROM PARCEL_DISPATCH)
ORDER BY TO_NUMBER(BOX_CODE);
SELECT PARCEL_ID AS ITEM_NO
FROM PARCEL_DISPATCH
WHERE HUB_CODE = 'H1'
UNION ALL
SELECT PARCEL_ID AS ITEM_NO
FROM PARCEL_DISPATCH
WHERE HUB_CODE = 'H3'
ORDER BY ITEM_NO DESC;
SELECT PARCEL_ID, FEE
FROM PARCEL_DISPATCH
ORDER BY FEE DESC, PARCEL_ID ASC
FETCH FIRST 3 ROWS ONLY;
SELECT PARCEL_ID, HUB_CODE, FEE
FROM PARCEL_DISPATCH
ORDER BY CASE WHEN HUB_CODE = 'H3' THEN 0 ELSE 1 END,
FEE DESC, PARCEL_ID ASC;