[ DML ]
- 데이터 수정 언어(구조 변경)
- TCL(COMMIT, ROLLBACK)로 트랜잭션을 종료해야 함
1. INSERT
- 행 단위 삽입
- ORACLE에서는 일반적으로 INSERT로 다중행 입력 불가(단, 서브쿼리 사용 시 동시에 입력 가능)
** 문법
INSERT INTO 테이블명 VALUES(값1, 값2, ....); -- 테이블의 모든 컬럼의 값을 입력 시
INSERT INTO 테이블명(컬럼1, 컬럼2, ...) VALUES(값1, 값2, ....); -- 테이블의 일부 컬럼의 값을 입력 시
-- NOT NULL 선언된 컬럼은 반드시 입력
예제) STUDENT_TEST1 테이블을 STUDENT 구조는 동일, 데이터 없이 생성한 후
두 건의 학생 데이터 입력(첫번째 입력은 모든컬럼 값 정의, 두번째 입력은 필수컬럼만 정의)
DESC STUDENT;
CREATE TABLE STUDENT_TEST1
AS
SELECT *
FROM STUDENT
WHERE 1=2;
SELECT *
FROM STUDENT_TEST1;
TRUNCATE TABLE STUDENT_TEST1;
INSERT INTO STUDENT_TEST1 VALUES
(4321,'돌아이','DOLI',3,'9230191029304',TO_DATE('2000/11/22','YYYY/MM/DD'),'02)932-4321',190,80,102,202,4220);
INSERT INTO STUDENT_TEST1(STUDNO,NAME,ID,JUMIN) VALUES (4320,'돌아이2','DOLI2','9293102938102');
COMMIT;
예제) EMP와 구조는 동일하지만 데이터가 없는 EMP_INSERT1, EMP_INSERT2 생성 후 각각 10번, 20번 부서원 정보를 입력
CREATE TABLE EMP_INSERT1
AS
SELECT *
FROM EMP
WHERE 1=2;
CREATE TABLE EMP_INSERT2
AS
SELECT *
FROM EMP
WHERE 1=2;
방법1) 각각
INSERT INTO EMP_INSERT1
SELECT *
FROM EMP
WHERE DEPTNO = 10;
INSERT INTO EMP_INSERT2
SELECT *
FROM EMP
WHERE DEPTNO = 20;
ROLLBACK;
--방법2) 하나의 INSERT문으로 동시에(INSERT ALL)
INSERT ALL
INTO 테이블1 VALUES(...)
INTO 테이블2 VALUES(...)
SELECT ....;
INSERT ALL
WHEN 조건1 THEN INTO 테이블1 VALUES(...)
WHEN 조건2 THEN INTO 테이블2 VALUES(...)
SELECT ....;
INSERT ALL
WHEN DEPTNO = 10 THEN INTO EMP_INSERT1
WHEN DEPTNO = 20 THEN INTO EMP_INSERT2
SELECT * FROM EMP;
SELECT * FROM EMP_INSERT1;
SELECT * FROM EMP_INSERT2;
2. UPDATE
- 셀 단위 수정(여러 셀 수정 가능)
- 일부 컬럼의 일부 행을 수정
** 문법
UPDATE 테이블명
SET 컬럼 = 수정할값 -- 서브쿼리 전달 가능
WHERE 조건; -- 서브쿼리 전달 가능
select * from emp;
예제) emp_test1(emp에서 10번 또는 20번 직원들의 정보를 갖는 테이블)에서
KING의 급여를 5500으로 수정
sol)
drop table emp_test1 purge;
create table emp_test1 as select * from emp where deptno != 30;
SELECT * FROM EMP_TEST1;
update emp_test1
set sal = 5500
where ename = 'KING';
select * from emp_test1;
commit;
예제) emp_test1 에서 comm이 없는 직원의 comm을 급여의 10%로 수정
sol)
update emp_test1
set comm = sal*0.1
where comm is null;
예제) emp_test1 에서 10번 부서원들의 sal을 전체 직원의 평균급여로 수정
sol)
update emp_test1
set sal = (select round(avg(sal))
from emp_test1)
where deptno = 10;
commit;
예제) emp_test2 테이블을 emp와 동일하게 생성한 뒤 각 직원의 급여를 소속 부서의 평균급여로 수정
sol)
create table emp_test2
as
select * from emp;
select * from emp_test2;
update emp_test2 e1
set sal = (select avg(sal)
from emp_test2 e2
where e1.deptno = e2.deptno);
commit;
'SQL' 카테고리의 다른 글
23. 기타 오브젝트(1) (1) | 2024.10.30 |
---|---|
22. 테이블의 내용 추가, 수정, 삭제 : DML(2) (3) | 2024.10.29 |
20. 테이블 구조 생성, 변경, 제거 : DDL (2) (1) | 2024.10.28 |
19. 테이블 구조 생성, 변경, 제거 : DDL (1) (0) | 2024.10.28 |
18. 서브쿼리(2) (0) | 2024.10.28 |