배타브 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
반응형