DML(DATA MANIPULATION LANGUAGE): INSERT, UPDATE, DELETE
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;
: 구조변경이 아닌 데이터값을 변경하는것!!
- 테이블에 저장된 자료의 일부컬럼을 수정
(사용형식)
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;
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;
: 오라클 객체의 구조을 변경할때 사용
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번 결과