1. VIEW (가상 테이블)
하나 이상의 테이블이나 다른 뷰를 사용해 가상의 테이블을 만들 수 있다. 뷰는 물리적으로 정의되지 않아, 논리적으로만 존재한다.
-- VIEW 생성
CREATE VIEW (뷰 이름) AS
SELECT (컬럼)
FROM (테이블 명)
WHERE (조인 조건);
-- 사원 테이블과 부서 테이블로 뷰 생성
CREATE VIEW EMP_VIEW AS
SELECT EMPNO, ENAME, EMP.DEPTNO, DNAME
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO;
-- 뷰 삭제
DROP VIEW EMP_VIEW;
2. MERGE INTO
MERGE INTO (테이블 명)
USING DUAL -- 단일 테이블일 시 DUAL
ON (조건)
WHEN MATCHED THEN
-- 조건이 참이면 실행할 쿼리 (테이블명 생략)
WHEN NOT MATCHED THEN
-- 조건이 거짓이면 실행할 쿼리 (테이블명 생략)
;
-- 유저 아이디와 장바구니에 담는 상품 코드가 장바구니 테이블에 이미 존재한다면 수량, 가격 UPDATE
-- 존재하지 않는다면 INSERT
MERGE INTO SHOP_CART
USING DUAL
ON (ITEM_CODE = #{itemCode} AND MEM_ID = #{memId})
WHEN MATCHED THEN
UPDATE
SET
CART_AMOUNT = CART_AMOUNT + #{cartAmount}
, TOTAL_PRICE = (SELECT ITEM_PRICE
FROM SHOP_ITEM
WHERE ITEM_CODE = #{itemCode}) * (CART_AMOUNT + #{cartAmount})
WHERE ITEM_CODE = #{itemCode}
AND MEM_ID = #{memId}
WHEN NOT MATCHED THEN
INSERT (
CART_CODE
, ITEM_CODE
, MEM_ID
, CART_AMOUNT
, TOTAL_PRICE
) VALUES (
(SELECT 'CART_'||LPAD(NVL(MAX(TO_NUMBER(SUBSTR(CART_CODE, 6))), 0) + 1, 3, '0')
FROM SHOP_CART)
, #{itemCode}
, #{memId}
, #{cartAmount}
, (SELECT ITEM_PRICE
FROM SHOP_ITEM
WHERE ITEM_CODE = #{itemCode}) * #{cartAmount}
)
;'TIL' 카테고리의 다른 글
| 230313 [Spring, thymeleaf] (Controller / Mapping) (0) | 2023.03.13 |
|---|---|
| 230310 [SQL, MyBatis] (IN 연산자 / 동적 쿼리 foreach문) (0) | 2023.03.10 |
| 230306 [SQL] (다중 INSERT) (0) | 2023.03.06 |
| 230303 [SQL, JavaScript] (서브쿼리 / 함수) (0) | 2023.03.03 |
| 230302 [SQL] (INNER & OUTER JOIN) (0) | 2023.03.03 |