데이터베이스/Oracle

데이터를 추가, 수정, 삭제하는 데이터 조작어

eunsour 2020. 7. 29.
반응형

DBMS - Oracle Database

VERSION - Oracle Database 11g Release 2

IDE - SQL Developer

 

실습용 데이터를 입력하지 않고, 오라클 데이터베이스를 설치하면 기본으로 제공되는 테이블과 계정들로 학습한 내용입니다. 


※ 테이블에 데이터 추가하기

1. 테이블에 데이터를 추가하는 INSERT문

INSERT INTO DEPT_TEMP (DEPTNO, DNAME, LOC) 
                VALUES(50, 'DATABASE', 'SEOUL'); 

SELECT * FROM DEPT_TEMP; 
INSERT문을 먼저 실행하고 SELECT문을 따로 실행해야 한다.

 

2. INSERT문으로 데이터 입력하기 (열 지정을 생략할 때)

INSERT INTO DEPT_TEMP  
        VALUES(60, 'NETWORK', 'BUSAN'); 

 

3. 테이블에 NULL 데이터 입력하기

:  INSERT문으로 새로운 데이터를 추가할 때 특정 열에 들어갈 데이터가 확정되지 않았거나 굳이 넣을 필요가 없는 데이터인 경우에는 NULL을 사용한다. NULL을 INSERT문에 지정하는 방법은 NULL을 직접 명시적으로 입력해 주는 방법과 대상 열을 생략하여 암시적으로 NULL이 입력되도록 유도하는 방식이 있다.

  (1) NULL의 명시적 입력

    ▶ NULL을 지정하여 입력하기

INSERT INTO DEPT_TEMP VALUES(70, 'WEB', NULL); 

SELECT * FROM DEPT_TEMP; 

    ▶ 빈 공백 문자열로 NULL을 입력하기

INSERT INTO DEPT_TEMP VALUES(80, 'MOBILE', ''); 

SELECT * FROM DEPT_TEMP; 

  (2) NULL의 암시적 입력

    : NULL이 들어가야 할 열 이름을 아예 입력하지 않는 것

INSERT INTO DEPT_TEMP (DEPTNO, LOC) 
                VALUES(90, 'INCHEON'); 
                
SELECT * FROM DEPT_TEMP; 

 

4. 테이블에 날짜 데이터 입력하기

▶ EMP 테이블을 복사해서 EMP_TEMP 테이블 만들기

CREATE TABLE EMP_TEMP
	AS SELECT * FROM EMP
    	WHERE 1 <> 1;
        
SELECT * FROM EMP_TEMP;
EMP 테이블과 같은 열 구조를 가지지만 데이터는 복사하고 싶지 않을 때 WHERE절의 조건을 1 <> 1로 만들어 결과 값이 항상 false가 되어 행이 만들어지지 않게끔 한다. 급하게 테이블 열 구조만 같은 테이블을 만들어야 할 경우에 유용하게 사용할 수 있다.

 

(1) INSERT문으로 날짜 데이터 입력하기 (날짜 사이에 / 입력)

INSERT INTO EMP_TEMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) 
            VALUES (9999, '홍길동', 'PRESIDENT', NULL, '2001/01/01', 
                    5000, 1000, 10); 
                    -- YYYY-MM-DD 형식으로도 날짜 데이터를 입력할 수 있다. 
                    
SELECT * FROM EMP_TEMP; 

결과 >>

날짜 데이터를 입력할 때 유의점
년/월/일 순서와 반대로 일/월/년 순서로 데이터를 입력하면 오류가 발생하고 데이터가 입력되지 않는다.

(2) TO_DATE 함수를 사용하여 날짜 데이터 입력하기 

INSERT INTO EMP_TEMP VALUES (1111, '이순신', 'MANAGER', 9999, 
                        TO_DATE('07/01/2001', 'DD/MM/YYYY'), 
                        4000, NULL, 20); 
                         
SELECT * FROM EMP_TEMP; 

결과 >>


(3) SYSDATE를 사용하여 날짜 데이터 입력하기 

INSERT INTO EMP_TEMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) 
            VALUES(2111, '심청이', 'MANAGER', 9999, SYSDATE, 4000, NULL, 30); 

SELECT * FROM EMP_TEMP; 

결과 >>


5. 서브쿼리를 사용하여 한 번에 여러 데이터 추가하기

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;    

결과 >>

# INSERT문에서 서브쿼리를 사용할 때 유의할 점은 다음과 같다.

  • VALUES절은 사용하지 않는다.
  • 데이터가 추가되는 테이블의 열 갯수와 서브쿼리의 열 갯수가 일치해야 한다.
  • 데이터가 추가되는 테이블의 자료형과 서브쿼리의 자료형이 일치해야 한다.

※ 테이블에 있는 데이터 수정하기

1. 데이터 전체 수정하기

UPDATE DEPT_TEMP2 
    SET LOC = 'SEOUL'; 
   
SELECT * FROM DEPT_TEMP2;

결과 >>

2. 수정한 내용을 되돌리고 싶을 때

ROLLBACK; 

SELECT * FROM DEPT_TEMP2; 

결과 >>

3. 데이터 일부분만 수정하기 

UPDATE DEPT_TEMP2 
    SET DNAME= 'DATABASE', 
        LOC = 'SEOUL' 
    WHERE DEPTNO = 40; 

SELECT * FROM DEPT_TEMP2; 

결과 >>

4. 서브쿼리를 사용하여 데이터 수정하기 

INSERT문과 마찬가지로 UPDATE문에서도 서브쿼리를 활용할 수 있다.

(1) 서브쿼리로 데이터 일부분 수정하기

UPDATE DEPT_TEMP2 
    SET (DNAME, LOC) = (SELECT DNAME, LOC 
                            FROM DEPT   
                        WHERE DEPTNO = 40) 
    WHERE DEPTNO = 40; 
     
SELECT * FROM DEPT_TEMP2; 

(2) WHERE절에 서브쿼리를 사용하여 데이터 수정하는 경우

UPDATE DEPT_TEMP2 
    SET LOC = 'SEOUL' 
  WHERE DEPTNO = (SELECT DEPTNO 
                    FROM DEPT_TEMP2 
                    WHERE DNAME = 'OPERATIONS'); 
                     
SELECT * FROM DEPT_TEMP2;              
UPDATE문 사용할 때 유의점
UPDATE문과 DELETE문은 테이블에 이미 존재하는 데이터를 수정하거나 삭제하는 기능을 수행하므로 SELECT문이나 INSERT문에 비해 위험성이 큰 명령어이다.
따라서 UPDATE문을 실행하기 전에 UPDATE문의 WHERE절을 검증하는 작업이 반드시 필요하다. 

※ 테이블에 있는 데이터 삭제하기

1. 데이터 일부분만 삭제하기

:  WHERE절을 사용하여 데이터 일부분만 삭제하기

DELETE FROM EMP_TEMP2 
    WHERE JOB = 'MANAGER'; 
SELECT * FROM EMP_TEMP2; 

2. 서브쿼리를 사용하여 데이터 삭제하기 

DELETE FROM EMP_TEMP2 
    WHERE EMPNO IN (SELECT E.EMPNO 
                        FROM EMP_TEMP2 E, SALGRADE S 
                      WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL 
                        AND S.GRADE = 3 
                        AND DEPTNO = 30); 
     
SELECT * FROM EMP_TEMP2; 

3. 데이터 전체 삭제하기 

DELETE FROM EMP_TEMP2; 

SELECT * FROM EMP_TEMP2; 

 

 

 

 

Reference

 
Do it! 오라클로 배우는 데이터베이스 입문
저자 : 이지훈
출판 : 이지스퍼블리싱
발매 : 2018.10.30

 

반응형

댓글