개발/K-DigitalTraining 수강중
Oracle DB ( DML )
배타브
2023. 3. 23. 11:19
728x90
반응형
INSERT
--DML(Data Manipulation Language) : 데이터 추가(insert) , 수정(update) , 삭제(delete) 하는 데이터 조작어
--COMMIT : DML 작업을 데이터베이스에 최종 반영
--ROLLBACK : DML 작업 취소
--select + DML == > 자주 사용하는 sql 임
--연습용 테이블 생성
--기존 테이블 복사
CREATE TABLE dept_temp AS SELECT * FROM dept;
--테이블 삭제
DROP TABLE dept_temp;
-- 열이름은 선택사항임
-- insert into 테이블 이름 (열이름1, 열이름2 , .....)
-- values(데이터1 , 데이터2, ......... )
-- dept_temp 에 새로운 부서 추가하기
insert into dept_temp ( deptno, dname , loc)
values(50,' DATABASE', 'SEOUL');
--열 이름 작성 안할 때 (기존 데이터형식과 같아야 오류가 나지 않는다)
--전체열을 삽입하지 않는다면 필드명은 필수 .
INSERT INTO dept_temp
VALUES(60,'NETWORK','BUSAN');
--emp_temp 생성(emp 테이블 복사 - 데이터는 복사를 하지 않을 때)
CREATE TABLE emp_temp AS SELECT * FROM emp WHERE 1<>1; -- 테이블과 열만 복사 ( 데이터 x)
INSERT INTO emp_temp(empno, ename , job , mgr, hiredate , sal ,comm , deptno)
values(9999,'홍길동','president' , null , '2001/01/01', 5000,1000,10);
INSERT INTO emp_temp (empno, ename , job , mgr, hiredate , sal ,comm , deptno)
VALUES(1111,'성춘향', 'MANAGER' , null , '2002/01/05', 4000,NULL,20);
INSERT INTO emp_temp (empno, ename , job , mgr, hiredate , sal ,comm , deptno)
VALUES(2222,'이순신', 'MANAGER' , 9999 , '2001/01/07 ', 4000,NULL,20);
INSERT INTO emp_temp (empno, ename , job , mgr, hiredate , sal ,comm , deptno)
VALUES(3333,'심봉사', 'MANAGER' , 9999 , SYSDATE , 4000,NULL,30);
--서브쿼리로 INSERT 구현
--EMP , SALGRADE 테이블을 JOIN 후 급여 등급이 1인 사원만 EMP_TEMP 에 추가
INSERT INTO emp_temp(empno, ename , job , mgr, hiredate , sal ,comm , deptno)
SELECT E.EMPNO , E.ENAME , E.JOB , E.MGR , E.HIREDATE, E.SAL , E.COMM, E.DEPTNO
FROM EMP E , SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL AND S.GRADE =1;
SELECT * FROM EMP_TEMP ;
COMMIT;
UPDATE
--UPDATE : 테이블에 있는 데이터 수정
--
--UPDATE 테이블명
--SET 변경할 열이름 = 데이터 , 변경할 열이름 = 데이터...
--WHERE 변경을 위한 대상 행을 선별하기 위한조건
--DEPT_TEMP LOC열의 모든 값을 SEOUL 로 변경
UPDATE DEPT_TEMP
SET LOC = 'SEOUL';
--DEPT _TEMP 부서번호가 40번인 LOC 열의 값을 SEOUL로 변경
UPDATE DEPT_TEMP
SET LOC = 'SEOUL'
WHERE DEPTNO = 40;
--DEPT _TEMP 부서번호가 80번인 DNAME 은 SALES , LOC 는 CHICAGO 로 변경
UPDATE DEPT_TEMP
SET DNAME = 'SALES' , LOC = 'CHICAGO'
WHERE DEPTNO = 80 ;
--EMP_TEMP 사원들 중에서 급여가 2500이하인 사원만 추가수당을 50으로 수정
UPDATE EMP_TEMP
SET COMM = 50
WHERE SAL < 2500;
-- 서브쿼리를 사용하여 데이터 수정
--DEPT 테이블의 40번 부서 , DNAME , LOC 를 DEPT_TEMP 40번 부서의 DAME,LOC로 업데이트
UPDATE DEPT_TEMP
SET( DNAME , LOC ) =
(SELECT DNAME , LOC
FROM DEPT WHERE DEPTNO=40)
WHERE DEPTNO = 40 ;
728x90
반응형