<학습목표>
1. OUTER JOIN 실습
2. SELF JOIN : 하나의 테이블을 마치 여러개인듯
조인하여 사용 (테이블 ALIAS 활용)
3. NATURAL JOIN : 조인조건 없이 조인(조인조건을 자동처리)
4. NON-EQUI JOIN : 비교연산자 <, >, <=, >=, BETWEEN을 조건으로 하여 조인
3개 조인
EX)
P.248
전체 상품의 2005년도 5월 5일의 입고,출고현황 조회
(상품코드, 상품명, 입고수량의합, 판매수량의합)
SELECT P.PROD_ID 상품코드
, P.PROD_NAME 상품명
, NVL(SUM(B.BUY_QTY),0) 입고수량의합
, NVL(SUM(C.CART_QTY),0) 판매수량의합
FROM PROD P, CART C, BUYPROD B
WHERE P.PROD_ID = B.BUY_PROD(+)
AND P.PROD_ID = C.CART_PROD(+)
AND B.BUY_DATE(+) = '05/05/05'
AND C.CART_NO(+) LIKE '20050505%'
GROUP BY P.PROD_ID, P.PROD_NAME
ORDER BY P.PROD_ID, P.PROD_NAME;
ANSI표준
SELECT P.PROD_ID 상품코드
, P.PROD_NAME 상품명
, NVL(SUM(B.BUY_QTY),0) 입고수량의합
, NVL(SUM(C.CART_QTY),0) 판매수량의합
FROM PROD P LEFT OUTER JOIN CART C ON(P.PROD_ID = C.CART_PROD AND C.CART_NO LIKE '20050505%')
LEFT OUTER JOIN BUYPROD B ON(P.PROD_ID = B.BUY_PROD AND B.BUY_DATE = '05/05/05')
GROUP BY P.PROD_ID, P.PROD_NAME
ORDER BY P.PROD_ID, P.PROD_NAME;
SELF JOIN
EX)
P.249
SLEF JOIN : TABLE ALIAS를 사용하여 마치 2개의
TABLE처럼 자신의 TABLE과 자신의 TABLE을 JOIN하여 검색
이해를 도와주는 동요 : 내동생
회원ID가 'h001(라준호)'인 고객의 마일맂 점수보다
이상인 회원만 검색 조회
(ALIAS는 회원ID, 성명, 마일리지)
SELECT 꿀돼지.MEM_ID 회원ID
, 꿀돼지.MEM_NAME 성명
, 꿀돼지.MEM_MILEAGE 마일리지
FROM MEMBER 꿀돼지, MEMBER 두꺼비
WHERE 두꺼비.MEM_ID = 'h001'
AND 꿀돼지.MEM_MILEAGE >= 두꺼비.MEM_MILEAGE;
--문제
--f001회원이 2005년 4월 10일에 8개 주문한
--상품을 동일하게 구입한 회원의 정보를 구하시오
--(ALIAS : 회원ID(CART_MEMBER), 카트번호(CART_NO),
--상품ID(CART_PROD), 구입개수(CART_QTY)
SELECT A.CART_MEMBER
, A.CART_NO
, A.CART_PROD
, A.CART_QTY
FROM CART A, CART B
WHERE B.CART_MEMBER = 'f001'
AND B.CART_NO LIKE '20050410%'
AND B.CART_QTY = 8
AND A.CART_PROD = B.CART_PROD;
1 대 다 인관계에서 1쪽에 조건을 만족할 조건들을 WHERE, AND에 작성해서 1로 만들어준다
HAVING절은 집계함수가 끝난뒤에 조건을 걸어야 한다
EX)
--상품분류가 컴퓨터제품('P101')인 상품의 2005년도 일자별
--판매 조회( 판매일, 판매금액(5,000,000초과의 경우만), 판매수량 )
SELECT SUBSTR(C.CART_NO,1,9) 판매일
, SUM(P.PROD_SALE C.CART_QTY) 판매금액
, SUM(C.CART_QTY) 판매수량
FROM PROD P, CART C
WHERE P.PROD_ID = C.CART_PROD
AND P.PROD_LGU = 'P101'
AND C.CART_NO LIKE '2005%'
GROUP BY SUBSTR(C.CART_NO,1,9)
HAVING SUM(P.PROD_SALE C.CART_QTY) > 5000000;