본문 바로가기
SQL/개념

06. 데이터 조작어(DML)

by Merware 2023. 5. 8.

01. DML(데이터 조작 언어)

  • INSERT(삽입 - 행단위)
INSERT TO 테이블 VALUES(값1, 값2, ...)
  • UPDATE(변경 - 컬럼단위)
UPDATE 테이블
    SET 컬럼 = '값'
    WHERE 컬럼 = '조건값'
  • DELETE
DELETE FROM 테이블
WHERE 컬럼 = '조건값'

<aside> 💡 CRUD(CREATE, READ, UPDATE, DELETE)

</aside>


1. INSERT 문

DEPT 테이블을 복사해서 DEPT_TEMP 테이블 만들기

-- 실습 10-1
  CREATE TABLE "HR"."DEPT_TEMP"
   ( "DEPTNO" NUMBER(2,0),
        "DNAME" VARCHAR2(14 BYTE),
        "LOC" VARCHAR2(13 BYTE),
        CONSTRAINT "PK_DEPT_TEMP" PRIMARY KEY ("DEPTNO")
    );
SELECT * FROM DEPT_TEMP;

DROP TABLE DEPT_TEMP;

CREATE TABLE DEPT_TEMP
    AS SELECT * FROM DEPT;

DEPT_TEMP 테이블 전체 열 조회하기

-- 실습 10-2
SELECT * FROM DEPT_TEMP;

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

-- 실습 10-3
INSERT INTO DEPT_TEMP (DEPTNO, DNAME, LOC)
VALUES (50, 'DATABASE', 'SEOUL');

SELECT * FROM DEPT_TEMP;

INSERT문에 열 지정 없이 데이터 추가하기

-- 실습 10-4
INSERT INTO DEPT_TEMP
VALUES (60 , 'NETWORK', 'BUSAN');

SELECT * FROM DEPT_TEMP;

1) 테이블에 NULL 데이터 입력하기

NULL을 지정하여 입력하기

-- 실습 10-5
INSERT INTO DEPT_TEMP (DEPTNO, DNAME, LOC)
VALUES (70 , 'WEB', NULL);

SELECT * FROM DEPT_TEMP;

열 데이터를 넣지 않는 방식으로 NULL 데이터 입력하기

-- 실습 10-7
INSERT INTO DEPT_TEMP (DEPTNO, LOC)
VALUES (90 , 'INCHEON');

SELECT * FROM DEPT_TEMP;

2) 테이블에 날짜 데이터 입력하기

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

-- 실습 10-8
DROP TABLE EMP_TEMP;
CREATE TABLE EMP_TEMP
    AS SELECT *
         FROM EMP
        WHERE 1 <> 1
;--FALSE

SELECT * FROM EMP_TEMP;

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

-- 실습 10-9
INSERT INTO EMP_TEMP (EMPNO, ENAME, JOB,  MG, HIREDATE, SAL, COMM, DEPTNO)
VALUES (9999, '홍길동', 'PRESIDENT', NULL, '2001/01/01', 5000, 1000, 10);

SELECT * FROM EMP_TEMP;
ROLLBACK;

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

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

SELECT * FROM EMP_TEMP;

날짜 데이터 형식을 반대로 했을 때

-- 실습 10-11(에러-날자타입)
INSERT INTO EMP_TEMP (EMPNO, ENAME, JOB,  MG , HIREDATE, SAL , COMM, DEPTNO)
VALUES (2111, '이순신', ' MG', 9999, '07/01/2001', 4000, NULL, 20);

3) TO_DATE 함수 사용

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

-- 실습 10-12
INSERT INTO EMP_TEMP (EMPNO, ENAME, JOB,  MG, HIREDATE, SAL, COMM, DEPTNO)
VALUES (2111, '이순신', ' MG', 9999,
        TO_DATE('07/01/2001', 'DD/MM/YYYY'), 4000, NULL, 20);

SELECT * FROM EMP_TEMP;

4) SYSDATE 사용

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

-- 실습 10-13
INSERT INTO EMP_TEMP (EMPNO, ENAME, JOB,  MG, HIREDATE, SAL, COMM, DEPTNO)
VALUES (3111, '심청이', ' MG', 9999, SYSDATE, 4000, NULL, 30);

SELECT * FROM EMP_TEMP;

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

서브쿼리로 여러 데이터 추가하기

-- 실습 10-14
INSERT INTO EMP_TEMP (EMPNO, ENAME, JOB,  MG, HIREDATE, SAL, COMM, DEPTNO)
SELECT E.EMPNO, E.ENAME, E.JOB, E. MG, E.HIREDATE, E.SAL, E.COMM, E.DEPTNO
  FROM EMP E, SAL S
 WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL
   AND S.GRADE = 1;

SELECT * FROM EMP_TEMP;

2. UPDATE문

DEPT 테이블을 복사해서 DEPT_TEMP2 테이블 만들기

-- 실습 10-15
CREATE TABLE DEPT_TEMP2
    AS SELECT * FROM DEPT;

SELECT * FROM DEPT_TEMP2;
COMMIT;

1) 데이터 전체 수정하기

DEPT_TEMP2 테이블 업데이트하기

-- 실습 10-16
UPDATE DEPT_TEMP2
   SET LOC = 'SEOUL';

SELECT * FROM DEPT_TEMP2;

ROLLBACK으로 테이블 내용을 이전 상태로 되돌리기

-- 실습 10-17
ROLLBACK;

2) 데이터 일부 수정하기(WHERE절 활용)

테이블 데이터 중 일부분만 수정하기

-- 실습 10-18
UPDATE DEPT_TEMP2
   SET DNAME = 'DATABASE',
       LOC = 'SEOUL'
 WHERE DEPTNO = 40
;
ROLLBACK;
SELECT * FROM DEPT_TEMP2;

3) 서브쿼리를 사용하여 데이터 수정하기

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

-- 실습 10-19
UPDATE DEPT_TEMP2
   SET (DNAME, LOC) = (SELECT DNAME, LOC
                         FROM DEPT
                        WHERE DEPTNO = 30)
 WHERE DEPTNO = 40;

SELECT * FROM DEPT_TEMP2;
COMMIT;

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

-- 실습 10-20
UPDATE DEPT_TEMP2
   SET DNAME = (SELECT DNAME
                  FROM DEPT
                 WHERE DEPTNO = 40),
       LOC = (SELECT LOC
                FROM DEPT
               WHERE DEPTNO = 40)
 WHERE DEPTNO = 40;
 COMMIT;

SELECT *
  FROM DEPT_TEMP2
 WHERE DEPTNO = 40  ;

UPDATE문의 WHERE절에 서브쿼리 사용하기

-- 실습 10-21
UPDATE DEPT_TEMP2
   SET LOC = 'SEOUL'
 WHERE DEPTNO = (SELECT DEPTNO
                   FROM DEPT_TEMP2
                  WHERE DNAME='OPERATIONS');

SELECT * FROM DEPT_TEMP2;
UPDATE DEPT_TEMP2
   SET dname = 'PRODUCT'
WHERE DEPTNO = 40;

3. DELETE문

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

-- 실습 10-22
DROP TABLE EMP_TEMP2;
CREATE TABLE EMP_TEMP2
    AS SELECT * FROM EMP;

SELECT * FROM EMP_TEMP2;

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

-- 실습 10-23
DELETE FROM EMP_TEMP2
 WHERE JOB = ' MG';

SELECT * FROM EMP_TEMP2;

WHERE절에 서브쿼리를 사용하여 데이터 일부만 삭제하기

-- 실습 10-24
DELETE FROM EMP_TEMP2
 WHERE EMPNO IN (SELECT E.EMPNO
                   FROM EMP_TEMP2 E, SAL S
                  WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL
                    AND S.GRADE = 3
                    AND DEPTNO = 30);

SELECT * FROM EMP_TEMP2;

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

-- 실습 10-25
DELETE FROM EMP_TEMP2;

SELECT * FROM EMP_TEMP2;

'SQL > 개념' 카테고리의 다른 글

08. 데이터 정의어(DDL)  (0) 2023.05.09
07. 트랜잭션 제어와 세션(TCL)  (0) 2023.05.09
05. 서브쿼리  (0) 2023.05.03
04. 조인  (0) 2023.05.03
03. 다중행 함수와 데이터 그룹화  (0) 2023.05.03