SQL - 데이터 조작어(DML)

AIR·2024년 1월 16일

데이터 추가

-- 테이블 생성
CREATE TABLE DEPT_TEMP AS
SELECT *
FROM DEPT;

-- 테이블 삭제
DROP TABLE DEPT_TEMP;

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

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

SELECT *
FROM DEPT_TEMP;

-- 테이블에 NULL 데이터 입력
INSERT INTO DEPT_TEMP
VALUES (70, 'WEB', NULL);

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

-- NULL의 암시적 입력
INSERT INTO DEPT_TEMP(DEPTNO, LOC)
VALUES (90, 'INCHEON');

-- 테이블에 날짜 데이터 입력
-- WHERE 1<>1 은 항상 false가 되어, 같은 열 구조를 가지지만 데이터는 복사하고 싶지 않을 때 사용
CREATE TABLE EMP_TEMP AS
SELECT *
FROM EMP
WHERE 1 <> 1;

INSERT INTO EMP_TEMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES (9999, '홍길동', 'PRESIDENT', NULL, '2001/01/01', 5000, 1000, 10);
SELECT *
FROM EMP_TEMP;

INSERT INTO EMP_TEMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES (1111, '성춘향', 'MANAGER', 9999, '2001-01-05', 4000, NULL, 20);

-- TO_DATE 함수
INSERT INTO EMP_TEMP(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES (2111, '이순신', 'MANAGER', 9999, TO_DATE('07/01/2001', 'DD/MM/YYYY'), 4000, NULL, 20);

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

-- 서브쿼리(INSERT문)
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;

데이터 수정

-- 데이터 수정
CREATE TABLE DEPT_TEMP2 AS
SELECT *
FROM DEPT;

SELECT *
FROM DEPT_TEMP2;

-- 데이터 전체 수정
UPDATE DEPT_TEMP2
SET LOC = 'SEOUL';

ROLLBACK;

-- 데이터 일부분만 수정
UPDATE DEPT_TEMP2
SET DNAME = 'DATABASE',
    LOC   = 'SEOUL'
WHERE DEPTNO = 40;

-- 서브쿼리 사용
UPDATE DEPT_TEMP2
SET (DNAME, LOC) = (SELECT DNAME, LOC FROM DEPT WHERE DEPTNO = 40)
WHERE DEPTNO = 40;

UPDATE DEPT_TEMP2
SET LOC = 'SEOUL'
WHERE DEPTNO = (SELECT DEPTNO FROM DEPT_TEMP2 WHERE DNAME = 'OPERATIONS');

SELECT *
FROM DEPT_TEMP2;

데이터 삭제

-- 데이터 삭제
CREATE TABLE EXP_TEMP2 AS
SELECT *
FROM EMP;

SELECT *
FROM EXP_TEMP2;

-- 데이터 일부 삭제
DELETE
FROM EXP_TEMP2
WHERE JOB = 'MANAGER';

-- 서브쿼리 사용
DELETE
FROM EXP_TEMP2
WHERE EMPNO IN (SELECT E.EMPNO
                FROM EXP_TEMP2 E,
                     SALGRADE S
                WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL
                  AND S.GRADE = 3
                  AND E.DEPTNO = 30);

-- 데이터 전체 삭제
DELETE
FROM EXP_TEMP2;

-- DELETE문은 기존에 존재하는 데이터를 삭제하는 명령어이므로
-- DELETE문이나 WHERE절을 사용한다면 SELECT문을 사용하며 검증을 거친 후에 실행
profile
백엔드

0개의 댓글