ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Oracle(2022.02.07)-DML(INSERT,UPDATE,DELETE)
    카테고리 없음 2022. 2. 7. 20:42
    728x90

    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    12

    INSERT 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
Designed by Tistory.