8장 DML : 데이터의 삽입/갱신/삭제

·2024년 1월 8일
0

모두의 SQL

목록 보기
7/10

DML이란?

  • DML

    • Data Manipulation Language 데이터 조작어
    • 트랜잭션을 다루는 명령어
    • DML의 종류
      명령어설명
      INSERT테이블에 새로운 행을 삽입한다.
      UPDATE테이블에 있는 행의 내용을 갱신한다.
      DELETE테이블의 행을 삭제한다.
  • 트랜잭션(transaction)

    • 데이터를 조작하여 저장하는 일련의 과정

INSERT : 행 삽입하기

  • INSERT

    • 테이블에 새로운 행을 삽입할 때 사용 (새로운 데이터를 행 단위로 입력)
      INSERT INTO 테이블 이름 [(열 이름 1, 열 이름 2, ...)]
      VALUES (데이터 값1, 데이터 값 2, ...);
      COMMIT;
    • INSERT 명령어를 실행했다고 해서 데이터베이스에 영구적으로 반영되는 것은 아님
      → 데이터베이스에 반영하려면 commit을 해야 함
  • departments 테이블에 department_id가 271, department_name이 ‘Sample_Dept’, manager_id가 200, location_id가 1700인 행을 삽입하기

    INSERT INTO departments (department_id, department_name, manager_id, location_id)
    VALUES
    (271, 'Sample_Dept', 200, 1700);
    COMMIT;
    • VALUES 절에는 테이블의 한 행에 삽입될 값을 기술
  • departments 테이블에 department_id가 272, department_name이 ‘Sample Dept’, manager_id가 200, location_id가 1700인 행을 삽입하기

    INSERT INTO departments
    VALUES
    (272, 'Sample_Dept', 200, 1700);
    COMMIT;
    • 열 이름을 모두 기술하지 않고 생략한 채로 열 순서에 맞게 데이터 값만 기술해도 새로운 행이 삽입됨
  • INSERT 명령어와 UPDATE 명령어로 데이터를 삽입하거나 갱신할 때는 입력되는 데이터의 수서, 데이터 타입과 제약 조건(NOT NULL, UNIQUE) 등에 주의해야 함

    INSERT INTO departments
    VALUES
    (272, Sample_Dept, 200, 1700);
    
    // INSERT 오류 발생 
    // Sample_Dept를 입력한 department_name의 데이터 타입이 VARCHAR2이므로 문자가 입력되어야 함

UPDATE : 행 갱신하기

  • UPDATE
    • 기존의 데이터 값을 다른 데이터 값으로 변경할 때 사용
      UPDATE 테이블 이름
      SET 열 이름 1 = 데이터 값 1 [, 열 이름 2 = 데이터 값 2, ...]
      [WHERE 조건식];
  • departments 테이블에 department_name이 ‘Sample_Dept’인 행을 찾아서 manager_id를 201, location_id를 1800으로 변경하기
    UPDATE departments
    SET manager_id = 201,
    		location_id = 1800
    WHERE department_name = 'Sample_Dept';
    COMMIT;
  • departments 테이블에서 department_id가 40인 manager_id와 location_id 데이터 값을 찾아내고, department_name이 ‘Sample_Dept’인 행의 manager_id와 location_id를 찾아낸 데이터 값과 동일하게 변경하기
    UPDATE departments
    SET (manager_id, location_id) = (SELECT manager_id, location_id
    																 FROM departments
    																 WHERE department_id = 40)
    WHERE department_name = 'Sample_Dept';
    COMMIT;
  • 제약 조건에 위배되는 데이터 값으로 갱신하려고 하면 오류가 발생되므로 주의해야 함
    UPDATE departments
    SET department_id = null
    WHERE department_name = 'Sample_Dept';
    
    // departments 데이터의 department_id는 기본키이므로 null 값을 가질 수 없는데 
    // null 값으로 갱신하려 하면 오류가 발생됨

DELETE : 행 삭제하기

  • DELETE
    • 테이블의 데이터를 삭제할 때 사용
      DELETE [FROM] 테이블 이름
      [WHERE 조건식];
      COMMIT;
    • WHERE 절을 생략하면 조건식이 없기 때문에 모든 데이터가 삭제되므로 주의해야 함
  • departments 테이블에서 department_name이 ‘Sample_Dept’인 행을 삭제하기
    DELETE FROM departments
    WHERE department_name = 'Sample_Dept';
    COMMIT;
    
    DELETE FROM departments
    WHERE department_id IN (SELECT department_id
    												FROM departments
    												WHERE department_name = 'Sample_Dept');
    COMMIT;

0개의 댓글