You are on page 1of 7

10.

1 SORT ORDER BY

<ORDERS INDEX ��Ȳ>


IX_ORDERS_PK : ORDER_ID
IX_ORDERS_N1 : ORDER_DATE

<EMPLOYEES INDEX ��Ȳ>


IX_EMPLOYEES_PK : EMPLOYEE_ID

<CUSTOMER INDEX ��Ȳ>


IX_CUSTOMER_PK : CUSTOMER_ID

SELECT A.ORDER_ID, A.ORDER_DATE


, A.CUSTOMER_ID, C.CUST_LAST_NAME CUSTNAME
, A.EMPLOYEE_ID, B.LAST_NAME EMPNAME
, A.ORDER_TOTAL
FROM ORDERS A
, EMPLOYEES B
, CUSTOMERS C
WHERE A.EMPLOYEE_ID = B.EMPLOYEE_ID
AND A.CUSTOMER_ID = C.CUSTOMER_ID
AND A.ORDER_DATE >= TO_DATE('20120805', 'YYYYMMDD')
AND A.ORDER_DATE < TO_DATE('20120807', 'YYYYMMDD')
ORDER BY ORDER_DATE, ORDER_ID, CUSTNAME, ORDER_TOTAL DESC;

SELECT A.ORDER_ID, A.ORDER_DATE


, A.CUSTOMER_ID, C.CUST_LAST_NAME CUSTNAME
, A.EMPLOYEE_ID, B.LAST_NAME EMPNAME
, A.ORDER_TOTAL
FROM ORDERS A
, EMPLOYEES B
, CUSTOMERS C
WHERE A.EMPLOYEE_ID = B.EMPLOYEE_ID
AND A.CUSTOMER_ID = C.CUSTOMER_ID
AND A.ORDER_DATE >= TO_DATE('20120805', 'YYYYMMDD')
AND A.ORDER_DATE < TO_DATE('20120807', 'YYYYMMDD')
ORDER BY ORDER_DATE, ORDER_ID;

SELECT A.ORDER_ID, A.ORDER_DATE


, C.CUST_LAST_NAME CUSTNAME
, A.ORDER_TOTAL
FROM ORDERS A, CUSTOMERS C
WHERE A.CUSTOMER_ID = C.CUSTOMER_ID
AND A.ORDER_DATE >= TO_DATE('20120805', 'YYYYMMDD')
AND A.ORDER_DATE < TO_DATE('20120807', 'YYYYMMDD')
ORDER BY ORDER_DATE, ORDER_ID;

SELECT A.ORDER_ID, A.ORDER_DATE


, A.EMPLOYEE_ID, B.LAST_NAME EMPNAME
, A.ORDER_TOTAL
FROM ORDERS A
, EMPLOYEES B
WHERE A.EMPLOYEE_ID = B.EMPLOYEE_ID
AND A.ORDER_DATE >= TO_DATE('20120805', 'YYYYMMDD')
AND A.ORDER_DATE < TO_DATE('20120807', 'YYYYMMDD')
ORDER BY ORDER_DATE, ORDER_ID;
CREATE INDEX IX_ORDERS_N3
ON ORDERS(TO_CHAR(ORDER_DATE, 'YYYYMMDD'), CUSTOMER_ID);

SELECT ROWNUM RCNT, A.*


FROM (
SELECT A.ORDER_ID, A.ORDER_DATE, A.CUSTOMER_ID
, A.EMPLOYEE_ID, B.LAST_NAME EMPNAME
, A.ORDER_TOTAL
FROM ORDERS A
, EMPLOYEES B
WHERE A.EMPLOYEE_ID = B.EMPLOYEE_ID
AND TO_CHAR(A.ORDER_DATE, 'YYYYMMDD') >= '20120101'
AND TO_CHAR(A.ORDER_DATE, 'YYYYMMDD') < '20130101'
ORDER BY TO_CHAR(A.ORDER_DATE, 'YYYYMMDD'), A.CUSTOMER_ID) A
MINUS
SELECT ROWNUM RCNT, A.ORDER_ID, A.ORDER_DATE, A.CUSTOMER_ID
, A.EMPLOYEE_ID, B.LAST_NAME EMPNAME
, A.ORDER_TOTAL
FROM ORDERS A
, EMPLOYEES B
WHERE A.EMPLOYEE_ID = B.EMPLOYEE_ID
AND TO_CHAR(A.ORDER_DATE, 'YYYYMMDD') >= '20120101'
AND TO_CHAR(A.ORDER_DATE, 'YYYYMMDD') < '20130101'

10.2 SORT ORDER BY & SORT ORDER BY STEOPKEY (STOPKEY)

<ORDERS INDEX ��Ȳ>


IX_ORDER_N1 : ORDER_DATE, ORDER_ID

SELECT *
FROM (
SELECT ROWNUM RN, A.*
FROM (
SELECT A.ORDER_ID, A.ORDER_DATE
, A.CUSTOMER_ID, C.CUST_LAST_NAME CUSTNAME
, A.EMPLOYEE_ID, B.LAST_NAME EMPNAME
, A.ORDER_TOTAL
FROM ORDERS A
, EMPLOYEES B
, CUSTOMERS C
WHERE A.EMPLOYEE_ID = B.EMPLOYEE_ID
AND A.CUSTOMER_ID = C.CUSTOMER_ID
AND A.ORDER_DATE >= TO_DATE('20120805', 'YYYYMMDD')
AND A.ORDER_DATE < TO_DATE('20120807', 'YYYYMMDD')
ORDER BY ORDER_DATE, ORDER_ID) A)
WHERE RN >= 1
AND RN <= 20;

SELECT *
FROM (
SELECT ROWNUM RN, A.*
FROM (
SELECT A.ORDER_ID, A.ORDER_DATE
, A.CUSTOMER_ID, C.CUST_LAST_NAME CUSTNAME
, A.EMPLOYEE_ID, B.LAST_NAME EMPNAME
, A.ORDER_TOTAL
FROM ORDERS A
, EMPLOYEES B
, CUSTOMERS C
WHERE A.EMPLOYEE_ID = B.EMPLOYEE_ID
AND A.CUSTOMER_ID = C.CUSTOMER_ID
AND A.ORDER_DATE >= TO_DATE('20120805', 'YYYYMMDD')
AND A.ORDER_DATE < TO_DATE('20120807', 'YYYYMMDD')
ORDER BY ORDER_DATE, ORDER_ID) A
WHERE ROWNUM <= 20)
WHERE RN >= 1;

10.3 SORT GROUP BY & HASH GROUP BY

SELECT PRODUCT_ID
, SUM(ORDER_QTY) ORDER_QTY
, SUM(ORDER_AMT) ORDER_AMT
FROM SALES
WHERE ORDER_DATE = '20120805'
GROUP BY PRODUCT_ID;

SELECT PRODUCT_ID
, SUM(ORDER_QTY) ORDER_QTY
, SUM(ORDER_AMT) ORDER_AMT
FROM SALES
WHERE ORDER_DATE = '20120805'
GROUP BY PRODUCT_ID
ORDER BY PRODUCT_ID;

SELECT /*+ NO_USE_HASH_AGGREGATION */


PRODUCT_ID
, SUM(ORDER_QTY) ORDER_QTY
, SUM(ORDER_AMT) ORDER_AMT
FROM SALES
WHERE ORDER_DATE = '20120805'
GROUP BY PRODUCT_ID;

SELECT /*+ INDEX(SALES IX_SALES_N2) */


PRODUCT_ID
, SUM(ORDER_QTY) ORDER_QTY
, SUM(ORDER_AMT) ORDER_AMT
FROM SALES
WHERE ORDER_DATE = '20120805'
GROUP BY PRODUCT_ID;

SELECT /*+ INDEX(SALES IX_SALES_N2) */


B.PRODUCT_NAME
, SUM(A.ORDER_QTY) ORDER_QTY
, SUM(A.ORDER_AMT) ORDER_AMT
FROM SALES A, PRODUCTS B
WHERE A.PRODUCT_ID = B.PRODUCT_ID
AND A.ORDER_DATE = '20120805'
GROUP BY B.PRODUCT_NAM
SELECT /*+ USE_NL(A B) */
B.PRODUCT_NAME
, A.ORDER_QTY
, A.ORDER_AMT
FROM (
SELECT /*+ NO_USE_HASH_AGGREGATION
INDEX(SALES IX_SALES_N2) */
PRODUCT_ID
, SUM(ORDER_QTY) ORDER_QTY
, SUM(ORDER_AMT) ORDER_AMT
FROM SALES
WHERE ORDER_DATE = '20120805'
GROUP BY PRODUCT_ID) A
, PRODUCTS B
WHERE A.PRODUCT_ID = B.PRODUCT_ID

SELECT /*+ FULL(SALES) NO_USE_HASH_AGGREGATION */


PRODUCT_ID
, SUM(ORDER_QTY) ORDER_QTY
, SUM(ORDER_AMT) ORDER_AMT
FROM SALES
WHERE ORDER_DATE >= '20110801'
AND ORDER_DATE < '20110802'
GROUP BY PRODUCT_ID;

SELECT /*+ FULL(SALES) NO_USE_HASH_AGGREGATION */


CUSTOMER_ID
, SUM(ORDER_QTY) ORDER_QTY
, SUM(ORDER_AMT) ORDER_AMT
FROM SALES
WHERE ORDER_DATE >= '20110801'
AND ORDER_DATE < '20110802'
GROUP BY CUSTOMER_ID;

SELECT ORDER_DATE, PRODUCT_ID, CUSTOMER_ID


, SUM(ORDER_QTY) ORDER_QTY
FROM SALES
WHERE ORDER_DATE >= '20120801'
AND ORDER_DATE < '20120820'
GROUP BY ORDER_DATE, PRODUCT_ID, CUSTOMER_ID;

10.4 SORT UNIQUE & HASH UNIQUE

<PRODUCTS ����
̺ ���>
�� �Ǽ� : 288��
INDEX : IX_PRODUCTS_PK(PRODUCT_ID)

SELECT /*+ NO_PLACE_DISTINCT */


DISTINCT
B.PRODUCT_NAME, B.CATEGORY_ID, B.LIST_PRICE
FROM SALES A, PRODUCTS B
WHERE A.PRODUCT_ID = B.PRODUCT_ID
AND A.ORDER_DATE >= '20120805'
AND A.ORDER_DATE <= '20120810'
AND A.ORDER_MODE = 'online';

SELECT B.PRODUCT_NAME, B.CATEGORY_ID, B.LIST_PRICE


FROM PRODUCTS B
WHERE EXISTS (SELECT /*+ UNNEST NL_SJ */ 1 FROM SALES A
WHERE A.PRODUCT_ID = B.PRODUCT_ID
AND A.ORDER_DATE >= '20110805'
AND A.ORDER_DATE <= '20120805'
AND A.ORDER_MODE = 'online');

SELECT DISTINCT
B.PRODUCT_NAME, B.CATEGORY_ID, B.LIST_PRICE
FROM (SELECT DISTINCT PRODUCT_ID
FROM SALES
WHERE ORDER_DATE >= '20110805'
AND ORDER_DATE <= '20120805'
AND ORDER_MODE = 'online' ) A
, PRODUCTS B
WHERE A.PRODUCT_ID = B.PRODUCT_ID;

SELECT ORDER_ID, ORDER_DATE, CUSTOMER_ID , ORDER_MODE, ORDER_TOTAL


FROM ORDERS
WHERE ORDER_ID IN (SELECT ORDER_ID
FROM ORDER_ITEMS
WHERE PRODUCT_ID IN ('P218', 'P219'));

SELECT B.ORDER_ID, B.ORDER_DATE, B.CUSTOMER_ID


, B.ORDER_MODE, B.ORDER_TOTAL
FROM (SELECT DISTINCT ORDER_ID
FROM ORDER_ITEMS
WHERE PRODUCT_ID IN ('P218', 'P219')) A
, ORDERS B
WHERE A.ORDER_ID = B.ORDER_ID;

SELECT ORDER_ID, ORDER_DATE, CUSTOMER_ID


, ORDER_MODE, ORDER_TOTAL
FROM ORDERS
WHERE ORDER_ID IN (SELECT /*+ UNNEST HASH_SJ */ ORDER_ID
FROM ORDER_ITEMS
WHERE PRODUCT_ID IN ('P218', 'P219'));

SELECT '�ǰ �ֹ �' ORDER_TYPE


, ORDER_ID, PRODUCT_ID, ORDER_DATE
FROM ORDER_ITEMS
WHERE ORDER_DATE >= TO_DATE('20120805', 'YYYYMMDD')
AND ORDER_DATE < TO_DATE('20120807', 'YYYYMMDD')
UNION
SELECT '�ǰ ��ǰ' ORDER_TYPE
, ORDER_ID, PRODUCT_ID, RETURN_DATE
FROM ORDER_ITEMS_RETURN
WHERE RETURN_DATE >= TO_DATE('20120805', 'YYYYMMDD')
AND RETURN_DATE < TO_DATE('20120807', 'YYYYMMDD');
<ORDER_ITEMS �ε��� ��Ȳ>
IX_ORDER_ITEMS_N2 : PRODUCT_ID, ORDER_DATE

SELECT PRODUCT_ID, PRODUCT_NAME, CATEGORY_ID


FROM PRODUCTS
WHERE PRODUCT_ID IN (SELECT PRODUCT_ID
FROM PRODUCTS
MINUS
SELECT PRODUCT_ID
FROM ORDER_ITEMS
WHERE ORDER_DATE >= TO_DATE('20120801', 'YYYYMMDD')
AND ORDER_DATE < TO_DATE('20120901', 'YYYYMMDD')
AND QUANTITY > 0);

SELECT PRODUCT_ID, PRODUCT_NAME, CATEGORY_ID


FROM PRODUCTS A
WHERE NOT EXISTS (SELECT 1
FROM ORDER_ITEMS B
WHERE A.PRODUCT_ID = B.PRODUCT_ID
AND B.ORDER_DATE >= TO_DATE('20120801', 'YYYYMMDD')
AND B.ORDER_DATE < TO_DATE('20120901', 'YYYYMMDD')
AND B.QUANTITY > 0);

SELECT *
FROM ORDER_ITEMS
WHERE (ORDER_ID, PRODUCT_ID) IN (
SELECT ORDER_ID, PRODUCT_ID
FROM ORDER_ITEMS
WHERE ORDER_DATE >= TO_DATE('20120101', 'YYYYMMDD')
AND ORDER_DATE < TO_DATE('20130101', 'YYYYMMDD')
MINUS
SELECT ORDER_ID, PRODUCT_ID
FROM ORDER_ITEMS_RETURN
WHERE RETURN_DATE >= TO_DATE('20120101', 'YYYYMMDD')
AND RETURN_DATE < TO_DATE('20130101', 'YYYYMMDD'));

SELECT *
FROM ORDER_ITEMS A
WHERE ORDER_DATE >= TO_DATE('20120101', 'YYYYMMDD')
AND ORDER_DATE < TO_DATE('20130101', 'YYYYMMDD')
AND NOT EXISTS (SELECT /*+ UNNEST HASH_AJ */ 1 FROM ORDER_ITEMS_RETURN B
WHERE A.ORDER_ID = B.ORDER_ID
AND A.PRODUCT_ID = B.PRODUCT_ID
AND B.RETURN_DATE >= TO_DATE('20120101', 'YYYYMMDD')
AND B.RETURN_DATE < TO_DATE('20130101', 'YYYYMMDD'));

SELECT PRODUCT_ID, PRODUCT_NAME, CATEGORY_ID


FROM PRODUCTS
WHERE PRODUCT_ID IN (
SELECT PRODUCT_ID
FROM PRODUCTS
INTERSECT
SELECT PRODUCT_ID
FROM ORDER_ITEMS
WHERE ORDER_DATE >= TO_DATE('20120801', 'YYYYMMDD')
AND ORDER_DATE < TO_DATE('20120901', 'YYYYMMDD')
AND QUANTITY > 0);

SELECT PRODUCT_ID, PRODUCT_NAME, CATEGORY_ID


FROM PRODUCTS A
WHERE EXISTS (SELECT 1 FROM ORDER_ITEMS B
WHERE A.PRODUCT_ID = B.PRODUCT_ID
AND B.ORDER_DATE >= TO_DATE('20120801', 'YYYYMMDD')
AND B.ORDER_DATE < TO_DATE('20120901', 'YYYYMMDD')
AND B.QUANTITY > 0);

SELECT *
FROM ORDER_ITEMS
WHERE (ORDER_ID, PRODUCT_ID) IN (
SELECT ORDER_ID, PRODUCT_ID
FROM ORDER_ITEMS
WHERE ORDER_DATE >= TO_DATE('20120101', 'YYYYMMDD')
AND ORDER_DATE < TO_DATE('20130101', 'YYYYMMDD')
INTERSECT
SELECT ORDER_ID, PRODUCT_ID
FROM ORDER_ITEMS_RETURN
WHERE RETURN_DATE >= TO_DATE('20120101', 'YYYYMMDD')
AND RETURN_DATE < TO_DATE('20130101', 'YYYYMMDD'));

SELECT *
FROM ORDER_ITEMS A
WHERE ORDER_DATE >= TO_DATE('20120101', 'YYYYMMDD')
AND ORDER_DATE < TO_DATE('20130101', 'YYYYMMDD')
AND EXISTS (SELECT 1 FROM ORDER_ITEMS_RETURN B
WHERE A.ORDER_ID = B.ORDER_ID
AND A.PRODUCT_ID = B.PRODUCT_ID
AND B.RETURN_DATE >= TO_DATE('20120101', 'YYYYMMDD')
AND B.RETURN_DATE < TO_DATE('20130101', 'YYYYMMDD'));

You might also like