DML(INSERT, UPDATE, DELETE) + ALTER

서현서현·2022년 2월 8일
0

DB, SQL

목록 보기
3/27
post-thumbnail

DML(DATA MANIPULATION LANGUAGE): INSERT, UPDATE, DELETE

🍞1. INSERT문

  • 테이블에 새로운 자료를 삽입할때 사용
  • 자료 삽입시 기본키가 중복되거나 외래키 참조 무결성을 위배해서는 안됨
    (사용형식)
    INSERT INTO 테이블명[(컬럼명,[,컬럼명,..])
    VALUES(값[,값,...]);
    .'(컬럼명[,컬럼명,...])' : 생략되면 테이블의 모든 컬럼에 값을VALUES절에서 기술해야함
    '컬럼명'은 생략할 수 있으나 컬럼제약조건 NOT NULL항목이 사용된 컬럼은 생략불가능
    '컬럼'기술 순서와 갯수는 VALUES절의 값의 순서 및 갯수와 일치해야함

EX1) 회원테이블에(CUSTOMERS)에 다음자료를 삽입하시오.

INSERT INTO CUSTOMERS
        VALUES ('a10001','홍길동','대전시 중구 대흥동 500');

🚨 NOT NULL때문에 오류

INSERT INTO CUSTOMERS
        VALUES ('a10001','홍길동','대전시 중구 대흥동 500','',0);

성공!

INSERT INTO CUSTOMERS (CUST_ID, CUST_NAME)
        VALUES ('a20010','조웅현');

INSERT INTO CUSTOMERS(CUST_ID,CUST_NAME,CUST_MILEAGE,CUST_TEL)
        VALUES ('a20013','김나리',2500,'010-9996-8885');

괄호안의 속성 순서는 바뀌어도 상관 없음.
VALUES의 순서도 같이 바꿔주면 되기 때문이다

(결과)

EX2) 상품테이블

🚨 숫자도 0이아닌 NULL로 초기화된다.

INSERT INTO GOODS VALUES ('P101','마우스',12000);

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


EX3) 주문테이블

TO_DATE : 숫자를 날짜형식으로 변환 시켜준다.

INSERT INTO ORDERS VALUES(10001,'a20010','P201',TO_DATE('20201020'),5);
INSERT INTO ORDERS VALUES(10002,'a20010','P103',TO_DATE('20201020'),10);

ERROR 당연함 부모테이블에 p103 없음 (참조무결성 위배)

INSERT INTO ORDERS VALUES(10001,'a20010','P201',TO_DATE('20201020'),5);
INSERT INTO ORDERS VALUES(10002,'a20010','P101',TO_DATE('20201020'),10);
SELECT * FROM ORDERS

INSERT INTO ORDERS VALUES(10003,'a20010','P203',TO_DATE('20201032'),2);

당연함 10월 32일 없음

INSERT INTO ORDERS VALUES(10003,'a20010','P203',TO_DATE('20200229'),2);

날짜고쳐

INSERT INTO ORDERS VALUES(10003,'a10001','P102',TO_DATE('20210229'),2);

내가 넣어달랜다고 넣어주는게 아니다..

INSERT INTO ORDERS VALUES(10004,'a10001','P102',TO_DATE('20210228'),2);

EX4)2020년 제품별 판매액을 조회하시오

SELECT A.GOOD_ID AS 상품코드
A.GOOD_NAME AS 상품명
SUM(B.ORDER_QTY*A.GOOD_PRICE) AS 판매금액
FROM A.GOOD_ID = B.GOOD_ID
AND EXTRACT(YEAR FROM ORDER_DATE)=2020
GROUP BY A.GOOD_ID, A.GOOD_NAME
ORDER BY 1;

🍞2. UPDATE문

: 구조변경이 아닌 데이터값을 변경하는것!!

- 테이블에 저장된 자료의 일부컬럼을 수정
(사용형식)
UPDATE 테이블명
   SET 칼럼명 =[,
				컬럼명 =,
                      .
                      .
                컬럼명 =]
 				[WHERE 조건];
EX) PRODUCTS테이블의 'P102','P202','P203' 자료의 판매가격을 150000,1450000,7500으로 수정하세요
    'P102'의 상품명은 '애플펜슬'이고 가격은 150000,
    
				 UPDATE PRODUCTS
		        SET PROD_NAME = '애플펜슬',
		            PROD_PRICE = 150000;
		SELECT*FROM PRODUCTS;

WHERE절이 없어 전부 애플펜슬이 됨.
ROLLBACK; COMMIT; 후 다시 시도

			 	 UPDATE PRODUCTS
		        SET PROD_NAME = '애플펜슬',
		            PROD_PRICE = 150000
		      WHERE PROD_ID = 'P102';
		SELECT*FROM PRODUCTS;

🍞3. DELETE

CUSTOMERS 테이블에서 'a20000'이후 모든 회원정보를 삭제하시오.
    DELETE FROM CUSTOMERS 
    WHERE CUST_ID>='a20000' //비교연산 수행, a20000보다 큰 자료 삭제

🚨 근데 삭제 안된다고 ERROR
: 외래키 관계 때문인데, ORDDERS를 보면 a20010자료가 있어서 이걸 지우면 참조무결성 위배, 따라서 ORDERS에 가서 먼저 지워줘야 하는것

DELETE FROM ORDERS
    WHERE CUST_ID>'a20000';  //메모리에서만 지워진거지 하드에선 지워진거아니므로 롤백 ㄱㄴ

DROP TABLE CUSTOMERS;

부모부터 지워야됨 (오류)

DROP TABLE ORDERS;
DROP TABLE CUSTOMERS;
DROP TABLE PRODUCTS;
DROP TABLE ZIP_TABLE;
COMMIT;

🍞4. ALTER문

: 오라클 객체의 구조을 변경할때 사용

1) 테이블에 컬럼추가
    ALTER TABLE 테이블명 ADD (컬럼명 데어타입[(크기)] [DEFAULT]);
    
    2)컬럼 크기/타입 수정
    ALTER TABLE 테이블명 MODIFY (컬럼명 데어타입[(크기)] [DEFAULT]);
    ALTER TABLE ORDERS MODIFY(CUST_ID VARCHAR2(10));
    
    3)컬럼삭제
    ALTER TABLE 테이블명 DROP COLUMN 컬럼명;
    
    4)컬럼명 수정 
    ALTER TABLE 테이블명 RENAME COLUMN 컬럼명1 TO 컬럼명2;
    컬럼명1을 컬럼명2로 수정
    
        EX) PRODUCTS 테이블의 GOOD_ID, GOOD_NAME, GOOD_PRICE를 PROD_ID, PROD_NAME_ PROD_PRICE로 변경하시오.
            ALTER TABLE PRODUCTS RENAME COLUMN GOOD_ID TO PROD_ID
            ALTER TABLE PRODUCTS RENAME COLUMN GOOD_NAME TO PROD_NAME
            ALTER TABLE PRODUCTS RENAME COLUMN GOOD_PRICE TO PROD_PRICE
            
            ALTER TABLE ORDERS RENAME COLUMN 
    
    5) 외래키/기본키 설정 추가
    ALTER TABLE 테이블명 ADD CONSTRAINT 외래키/기본키 설정명
    PRIMARY|FOREIGN KEY (컬럼명[,컬럼명,...])
    [REFERENCES 테이블명(컬럼명)];
    
    6)외래키/기본키 삭제
    ALTER TABLE 테이블명 DROP CONSTRAINT 외래키|기본키설정명; 
    
        EX) ORDERS 테이블의 외래키 FK_ORDERS_GOODS를 삭제
            ALTER TABLE ORDERS DROP CONSTRAINT FK_ORDERS_GOODS; 
        EX)ORDERS테이블의 외래키 FK_ORDERS_PRODUCTS를 추가
            ALTER TABLE ORDERS ADD CONSTRAINT FK_ORDERS_PRODUCTS FOREIGN KEY(GOOD_ID)
            REFERENCES PRODUCTS(GOOD_ID)
   
    
    7)테이블명 변경
    ALTER TABLE 테이블명1 RENAME TO 테이블명2
    => 테이블명1을 테이블명2로 변경

        EX) ZIPTB테이블을 ZIP_TABLE로 변경
             ALTER TABLE ZIPTB RENAME TO ZIP_TABLE;
        EX) GOODS테이블을 PRODUCTS로 변경
               ALTER TABLE GOODS RENAME TO PRODUCTS;

6번 결과

0개의 댓글