-
Oracle(2022.02.07)-DML(INSERT,UPDATE,DELETE)카테고리 없음 2022. 2. 7. 20:42728x90
DML(DATA MANIPULATION LANGUAGE): INSERT,UPDATE,DELETE
1.INSERT 문
-테이블에 새로운 자료를 삽입할 때 사용
-자료 삽입시 기본키가 중복되거나 외래키 참조 무결성을 위배해서는 안됨
(사용형식)
INSERT INTO 테이블명[(컬럼명[,컬럼명,...])]
VALUES(값[,값,...]);
. '(컬럼명[,컬럼명,...])': 생략되면 테이블의 모든 컬럼에 값을 VALUES 절에서 기술해야함
'컬럼명'은 생략할 수 있으나 컬럼제약조건이 NOT NULL 항목이 사용된 컬럼은 생략 불가능
'컬럼' 기술 순서와 갯수는 VALUES절의 값의 순서 및 갯수와 일치 해야함
사용예) 회원테이블(CUSTOMERS)에 다음 자료를 삽입하시오..
------------------------------------------------------------------------------------
회원번호 회원명 주소 전화번호 마일리지
------------------------------------------------------------------------------------
a10001 홍길동 대전시 중구 대흥동 500 222-8202 3000
a20010 조웅헌 서울시 성북구 장위1동 010-2525-3636 1700
a21003 김나리 대전시 중구 오류동 846 010-9996-8885 2500
------------------------------------------------------------------------------------INSERT INTO CUSTOMERS VALUES('a10001','홍길동','대전시 중구 대흥동 500','222-8202',3000); INSERT INTO CUSTOMERS(CUST_ID,CUST_NAME) VALUES('a20010','조웅현'); INSERT INTO CUSTOMERS(CUST_TEL,CUST_ID,CUST_NAME,CUST_MILEAGE) ->이부분은 순서가 바뀐다면 VALUES값 순서만 잘 지켜주면 된다. VALUES('010-9996-8885','a21003','김나리',2500); SELECT *FROM CUSTOMERS;
사용예)상품테이블에 다음 자료를 삽입하시오
----------------------------------------------------------------------------
상품코드 상품명 가격
----------------------------------------------------------------------------
'P101' 마우스 15000
'P102' 9000
'P201' 아이폰XS 1300000
'P202' 갤럭시 폴더3
'P203'
-----------------------------------------------------------------------------INSERT INTO GOODS VALUES('P101','마우스',15000); INSERT INTO GOODS VALUES('P102',NULL,''); INSERT INTO GOODS(GOOD_ID,GOOD_NAME,GOOD_PRICE) VALUES('P201','아이폰XS',1300000); INSERT INTO GOODS(GOOD_ID,GOOD_NAME) VALUES('P202','갤럭시 폴더3'); INSERT INTO GOODS(GOOD_ID) VALUES('P203'); SELECT * FROM GOODS;
사용예)다음 자료를 ORDERS테이블에 저장하시오.
-------------------------------------------------------------------------------
주문번호 회원번호 상품코드 주문일자 주문수량
-------------------------------------------------------------------------------
10001 a20010 P201 2020-10-20 5
10002 a20010 P101 2020-10-20 10
10003 a20010 p203 2020-10-20 2
10004 a10001 p102 2020-02-07 2
10005 a21003 p202 2020-02-07 5
10006 a21003 p102 2020-02-10 3
10007 a20010 p101 2020-02-07 12INSERT INTO ORDERS VALUES(10001,'a20010','P201',TO_DATE('20201020'),5); INSERT INTO ORDERS VALUES(10002,'a20010','P101',TO_DATE('20201020'),10); INSERT INTO ORDERS VALUES(10003,'a10001','P102',TO_DATE('20210228'),2); INSERT INTO ORDERS VALUES(10004,'a20010','P203',TO_DATE('20200207'),4); ->뒤늦게 추가됨 SELECT * FROM ORDERS;
사용예) 2020년 제품별 판매액을 조회하시오SELECT A.GOOD_ID AS 상품코드, A.GOOD_NAME AS 상품명, SUM(ORDER_QTY*GOOD_PRICE) AS 판매금액 FROM GOODS A, ORDERS B WHERE A.GOOD_ID=B.GOOD_ID AND EXTRACT(YEAR FROM ORDER_DATE)=2020 GROUP BY A.GOOE_ID,A.GOOD_NAME ORDER BY 1;
2. UPDATE문
-테이블에 저장된 자료의 일부 컬럼을 수정
(사용형식)
UPDATE 테이블명
SET 컬럼명=값[,
컬럼명=값,
:
컬렴명=값]
[WHERE 조건];
사용예) PRODUCTS테이블의 'P102','P202','P203' 자료의 판매가격을
150000,1450000,7500으로 수정하시오 (한번에 수정X 3번에 걸쳐서 수정해야됨)
-'P102'의 상품명은 '애플팬슬'이고 가격은 150000원,
UPDATE PRODUCTS
SET PROD_NAME='애플팬슬',
PROD_PRICE=150000
WHERE PROD_ID='P102';
-'P202'의 가격은 1450000원,
UPDATE PRODUCTS
SET PROD_PRICE=1450000
WHERE PROD_ID='P202';
-'P203'의 상품명은 '이어폰' 이고 가격은 7500원임
UPDATE PRODUCTS
SET PROD_NAME='이어폰',
PROD_PRICE=7500
WHERE PROD_ID='P203';UPDATE문 3번 수정한 결과
3.DELETE 문
-테이블 내의 자료를 삭제할 때 사용(행을삭제)
-ROLLBACK 으로 되돌릴 수 있다. 하드디스크에는 지워지지 않았기 때문
(사용형식)
DELETE FROM 테이블명
[WHERE 조건]
.'WHERE 조건'; 삭제할 자료를 선택하는 조건
생략되면 모든 자료 삭제
.ROLLBACK의 대상
사용예)CUSTOMERS 테이블에서 'a20000'이후의 모든 회원정보를 삭제하시오.DELETE FROM CUSTOMERS WHERE CUST_ID >='a20000';
->하지만 오류 WHY? 자식테이블에서 사용하고 있으므로 부모테이블을 지울 수 없음 얘를 사용하고 있는 ORDERS부터 지워야 CUSTOMERS가 지워짐
↓그래서먼저 실시한다.DELETE FROM ORDERS WHERE CUST_ID>='a20000'; ------------------------------------------------------------------------------------------------------------------- DROP TABLE CUSTOMERS; ->하지만 오류, 해결방법: DROP TABLE ORDERS; 얘 부터 해준다. 그래서 순서대로 하면 밑에와 같다. DROP TABLE ORDERS; DROP TABLE CUSTOMERS; DROP TABLE PRODUCTS; DROP TABLE ZIP_TABLE; COMMIT;
728x90