쯔이's Dev

DML(INSERT, UPDAT, DELETE) 본문

SQL/DML(INSERT, UPDATE, DELETE)

DML(INSERT, UPDAT, DELETE)

jjhim531 2024. 8. 29. 19:21
반응형

 

DQL
(QUERY 데이터 정의어)
SELECT
DML
(MANIPULATION 데이터 조작어)
INSERT, UPDATE, DELETE
DDL
(DEFINITION 데이터 정의어)
CREATE, ALTER, DROP
DCL
(CONTROL 데이터 제어어)
GRANT, REVOKE
TCL
(TRANSACTION 트랜잭션 제어어)
COMMIT, ROLLBACK

 

 [ [  데이터 조작 언어 ] ]

테이블 값을 삽입(INSERT), 수정(UPDATE), 삭제(DELETE)하는 구문

 1. INSERT 

테이블에 새로운 행을 추가하는 구문

[표현식]

1)

INSERT INTO 테이블명 VALUES ( 값, 값, 값.... )

테이블의 모든 컬럼에 대한 값을 직접 제시해서 한 행을 INSERT하고자 할 때

컬럼의 순번을 지켜서 VALUES에 값을 나열해야함

부족하게 값을 제시할 경우 OR 값을 더 많이 제시한 경우 => 에러


 2)

INSERT INTO 테이블명(컬럼, 컬럼, 컬럼..) VALUES(값, 값, 값...)

 

테이블에 내가 선택한 컬럼에 대한 값만 INSERT할 때 사용

그래도 한 행 단위로 추가되기 때문에 선택 안된 컬럼은 기본적으로 NULL이 들어감

=> NOT NULL 제약조건이 걸려있는 컬럼은 반드시 직접 값을 넣어줘야한다.

단, 기본값이 지정되어 있으면 NULL이 아닌 기본값이 들어감

 3)

INSERT INTO 테이블명 (서브쿼리);

VALUES에 직접 값을 명시하는 것 대신 서브쿼리로 조회된 값을 통째로 INSERT가능

 

 2.  INSERT    ALL

 두개 이상의 테이블에 각각 INSERT할 때 사용되는 서브쿼리가 동일한 경우

[표현식]

INSERT ALL
    INTO 테이블명1 VALUES(컬럼, 컬럼, 컬럼...)
    INTO 테이블명2 VALUES(컬럼, 컬럼...)
    서브쿼리;

EX)

INSERT ALL INTO emp_dept VALUES (
    emp_id,
    emp_name,
    dept_code,
    hire_date
) INTO emp_manager VALUES (
    emp_id,
    emp_name,
    manager_id
) ( SELECT
      emp_id,
      emp_name,
      dept_code,
      hire_date,
      manager_id
  FROM
      employee
  WHERE
      dept_code = 'D1'
  );

 3.  UPDATE 

테이블에 기록되어있는 기존의 데이터를 수정하는 구문

 *업데이트시에도 제약조건 잘 확인해야한다.

[표현식 1]

    UPDATE 테이블명
    SET 컬럼 = '값'
        컬럼 = '값'
        ...
    [WHERE 조건] -> 생략시 전체 모든 행의 데이터가 변경

EX1)

UPDATE emp_salary
SET
    salary = 7000000,
    bonus = 0.2
WHERE
    emp_name = '선동일'

EX2)

UPDATE emp_salary
SET
    salary = salary * 1.1;

 

[표현식 2]

UPDATE에서 서브쿼리사용

 UPDATE 테이블명
 SET 컬럼명 = (서브쿼리)
 WHERE 조건

EX) 방명수 사원의 급여와 보너스값을 유재식 사원의 급여와 보너스값으로 변경

UPDATE emp_salary
SET
    salary = (
        SELECT
            salary
        FROM
            emp_salary
        WHERE
            emp_name = '유재식'
    ),
    bonus = (
        SELECT
            bonus
        FROM
            emp_salary
        WHERE
            emp_name = '유재식'
    )
WHERE
    emp_name = '방명수';

EX2)ASIA지역에서 근무하는 사원들의 보너스값을 0.3으로 변경

UPDATE emp_salary
SET
    bonus = 0.3
WHERE
    emp_id IN ( -- 서브쿼리의 결과값이 여러개이므로 IN 사용
        SELECT
            emp_id
        FROM
                 emp_salary
            JOIN department ON ( dept_code = dept_id )
            JOIN location ON ( location_id = local_code )
        WHERE
            local_name LIKE 'ASIA%'
    );

 4.  DELETE 

테이블에 기록된 데이터를 삭제하는 구문(한 행 단위로 삭제가 된다.)

[표현식]

 DELETE FORM 테이블명
    [WHERE 조건] -> WHERE절 제시안하면 전체행 다 삭제됨

EX)

DELETE FROM department
WHERE
    dept_id = 'D1';
728x90
반응형