DB 0703

yunha·2023년 7월 3일
0

DB

목록 보기
21/26
-- 모든 거래처의 2020년도 거래처별 매입금액 합계를 조회
SELECT        A.BUYER_ID       AS "거래처코드"
     ,        A.BUYER_NAME     AS "거래처명"
     ,        NVL(B.IN_AMT, 0) AS "매입금액합계" --NULL값이면 0으로 바꿈
FROM (SELECT DISTINCT BUYER_ID , BUYER_NAME FROM BUYER) A,
( SELECT BUYER_ID , BUYER_NAME, SUM( BUY_COST * BUY_QTY) IN_AMT
     FROM     BUYPROD, BUYER, PROD
     WHERE    BUY_DATE BETWEEN '2020-01-01' AND '2020-12-31'
     AND      BUY_PROD = PROD_ID
     AND      BUYER_ID = PROD_BUYER
     GROUP BY BUYER_ID,   BUYER_NAME 
     ORDER BY BUYER_ID ASC ) B
WHERE         A.BUYER_ID = B.BUYER_ID(+)
ORDER BY      A.BUYER_NAME;

1) From절의 A는 거래처테이블의 자료 중 거래처코드와 거래처명
2) B는 거래처별 매입 총액
3) 거래처코드로 JOIN 해당거래처의 매입 총액 READ
4) BUYER(거래처)테이블과 BUYPROD(입고상품)테이블은 참조관계가 아니므로 OUTER JOIN 안됨

ANY, ALL

ANY, ALL 은 비교 연산자와 조합된다.( =, <>, >, >=, <, <= )
ANY(SOME)는 OR의 개념, 만족하는 값 하나만 있으면 TRUE - IN과 동일
ALL은 AND의 개념, 모든 값 만족해야만 TRUE
비교 연산자 다음에 ANY(>-최소값/<-최대값) 또는 ALL(>-최대값/<-최소값)을 기술하고 서브쿼리 사용

INSERT

특수Value, Null 값 입력

  • Column값에 Null값을 지정하는 방법
    -Insert문장의 Column List에서 생략
    -Insert문장의 Value절에서 Null 또는 빈공백('')으로 지정

EXISTS
: 서브쿼리에 데이터가 존재하는지 체크
: TRUE / FALSE 로 반환되기 때문에 CASE 표현식 조건으로 사용 가능
NOT EXISTS
=> EXISTS와 반대로 서브쿼리에 데이터가 존재하지 않을 경우 데이터가 조회됨

UPDATE BUYER
SET BUYER_CHARGER = '우수'
WHERE EXISTS (SELECT SUM(CART.CART_QTY * PROD.PROD_SALE)
FROM PROD, CART
WHERE CART.CART_PROD = PROD.PROD_ID
AND PROD.PROD_BUYER = BUYER.BUYER_ID
HAVING SUM(CART.CART_QTY * PROD.PROD_SALE) > 80000000);

IN 연산자와 비슷한 용도

IN => 비교값 직접 대입, 무조건 서브쿼리 모든 행 검색(해당 값-IN연산자에 대입)
EXISTS => 서브쿼리만 사용, 해당값 1건이라도 찾으면 검색 멈추고 TRUE 반환

UPDATE

profile
기록

0개의 댓글