Programming/Database

[ORACLE 초급] DML - INSERT, UPDATE, DELETE (feat. 서브쿼리)

728x90
반응형

1. INSERT

테이블 생성

-- DEPT 테이블 복사해서 새로운 테이블 생성
CREATE TABLE DEPT_TEMP
    AS SELECT * FROM DEPT where 1 <> 1;

테이블 삭제

DROP TABLE 테이블 이름;

데이터 추가

-- 지정한 테이블의 열 순서와 자료형에 맞는 입력 데이터를 지정
-- 숫자는 바로 명시, 문자열은 작은따옴표('')안에 명시
INSERT INTO 테이블 이름 (열1, 열2, ..., 열N(선택))
VALUES (열1 값, 열2 값, ..., 열N 값);
  1. NULL의 명시적 입력

    데이터 값에 직접 NULL 입력해 추가 (문자열이나 날짜형이면 빈 공백 문자열('')로도 NULL 입력 가능)

     INSERT INTO DEPT_TEMP(DEPTNO, DNAME, LOC)
     VALUES (70, 'WEB', NULL);
  2. NULL의 암시적 입력

    열 데이터를 넣지 않는 형태

     INSERT INTO DEPT_TEMP(DEPTNO, DNAME)
     VALUES (70, 'WEB');
  3. 현재 날짜

    SYSDATE를 이용해 현재 시점의 날짜 입력

여러 데이터 추가 (feat. 서브쿼리)

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;

서브쿼리 INSERT의 유의점?

  • VALUES절은 사용하지 않음
  • 추가되는 테이블의 열 개수와 자료형, 서브쿼리 열 개수와 자료형이 일치해야 함

이 외에도 ALL 또는 FIRST 등의 옵션으로 한 번에 여러 데이터 추가 가능

MERGE문으로 같은 열 구조를 가지는 여러 테이블 또는 서브쿼리의 결과 데이터를 한 테이블에 병합하여 추가 가능

2. UPDATE

데이터 수정

-- 여러 열을 수정하려면 쉼표(,)로 구분
UPDATE 변경할 테이블
SET 변경할 열1 = 값, 변경할 열2 = 값, ..., 변경할 열N = 값
WHERE 변경할 행 조건

여러 데이터 수정 (feat. 서브쿼리)

-- 서브쿼리로 데이터 여러 개 수정 (두 개의 열 한 번에 수정)
UPDATE DEPT_TEMP
SET (DNAME, LOC) = (SELECT DNAME, LOC
                                        FROM DEPT
                                        WHERE DEPTNO = 40)
WHERE DEPTNO = 40;

-- 서브쿼리로 데이터 하나씩 수정
UPDATE DEPT_TEMP
SET DNAME = (SELECT DNAME
                         FROM DEPT
                         WHERE DEPTNO = 40),
      LOC   = (SELECT LOC
                         FROM DEPT
                         WHERE DEPTNO = 40)
WHERE DEPTNO = 40;

-- WHERE절에 서브쿼리 사용해 수정
UPDATE DEPT_TEMP
SET LOC = 'SEOUL'
WHERE DEPTNO = (SELECT DEPTNO WEHRE DEPT_TEMP WHERE DNAME = 'OPERATIONS');

3. DELETE

데이터 삭제

DELETE [FROM] 테이블 이름
WHERE 삭제할 행 조건 (생략 시 모든 데이터 삭제)

여러 데이터 삭제 (feat. 서브쿼리)

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

UPDATE, DELETE의 유의점?
데이터를 수정하거나 삭제하는 일은 위험성이 큰 명령어로, WHERE 절을 꼼꼼히 확인하는 작업이 필요.
따라서, UPDATE나 DELETE 실행 전 해당 조건이 맞는지 SELECT절로 결과 값을 확인 후 적용하기

728x90
반응형