SQL을 활용한 데이터 분석

INSERT, UPDATE, DELETE

INSERT, UPDATE, DELETE

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

  • INSERT 문은 테이블에 새로운 데이터를 입력하기 위해 사용하는 데이터 조작어이다.

INSERT INTO table_name (column1, column2, column3, ...) VALUE (value1, value2, value3, ...);

  • 새로운 데이터를 추가하기 위해서 사용할 명령어 INSERT INT ~ VALUES ~ 는 컬럼 명에 기술된 목록의 수와 VALUES 다음에 나오는 괄호에 기술한 값의 개수가 같아야한다.

컬럼 명을 생략한 INSERT 구문

  • 테이블에 로우를 추가할 때 모든 컬럼에 모두 자료를 입력하는 경우에는 컬럼 목록을 기술하지 않아도 된다.
  • 컬럼 목록이 생략되면 VALUES 절 다음의 값들이 테이블의 기본 컬럼 순서대로 입력된다.
  • 테이블의 컬럼 순서는 CREATE TABLE로 테이블을 생성할 때의 순서를 따른다.
  • 테이블의 기본 컬럼의 순서는 DESC 문으로 조회했을 때 보여지는 순서이다.

NULL 값 삽입하는 다양한 방법

  • 데이터를 입력하는 시점에서 해당 컬럼 값을 모르거나 확정되지 않았을 경우에는 NULL값을 입력해야한다.
  • NULL 값 삽입은 암시적인 방법과 명시적인 방법이 있다.
  • 암시적인 방법은 컬럼 명 리스트에 컬럼을 생략하는 것이다. 즉, 다른 컬럼은 값을 입력하지만 이렇게 생략한 컬럼에는 암시적으로 NULL 값이 할당된다.
  • 명시적인 방법은 VALUES 리스트에 명시적으로 NULL을 입력한다.
  • NOT NULL 제약조건이 지정된 컬럼은 NULL 값을 입력할 수 없다.
  • 컬럼에 NULL값을 허용하지 못하도록 하려면 컬럼에 제약조건을 지정해야 한다.
  • NULL 값을 갖는 컬럼을 추가하기 위해서 NULL 대신 ‘‘를 사용할 수 있다.

서브 쿼리로 데이터 삽입하기

  • INSERT INTO 다음에 VALUES 절을 사용하는 대신에 서브 쿼리를 사용 할 수 있다.
  • 이렇게 하면 기존의 테이블에 있던 여러 행을 복사해서 다른 테이블에 삽입할 수 있다.
  • 이 때 주의할 점은 INSERT 명령문에서 지정한 컬럼의 개수나 데이터 타입이 서브 쿼리를 수행한 결과와 동일해야 한다는 점이다.
  • 서브 쿼리로 데이터를 삽입하기 위해서 우선 테이블을 생성하되 데이터는 복사하지 않고 빈 테이블만 생성 한다
  • 테이블 구조만을 복사해서 내용을 갖지 않는 테이블에 서브 쿼리로 로우를 입력한다.

다중 테이블에 다중해 입력하기

  • INSERT ALL문을 사용하면 서브 쿼리의 결과를 조건 없이 여러 테이블에 동시에 입력할 수 있다.
  • INSERT ALL 명령문을 사용하면 두 번 쿼리문을 수행하지 않고도 하나의 쿼리문으로 두 개의 테이블에 원하는 컬럼 값을 삽입할 수 있다.
  • 주의할 점은 서브 쿼리의 컬럼명과 데이터가 입력되는 테이블의 컬럼명이 동일해야 한다는 점이다.

INSERT ALL INTO TABLE1 (COL1, COL2) INTO TABLE2 (COL1, COL2)
SELECT COL1, COL2 FROM TABLE3;

조건(WHEN)에 의해 다중 테이블에 다중 행 입력하기

  • INSERT ALL 명령문에 WHEN 절을 추가해서 조건을 제시하여 조건에 맞는 행만 추출하여 테이블에 추가

INSERT ALL 
WHEN HIREDATE > '1982/01/01' THEN INTO TABLE1 (COL1, COL2) 
WHEN SAL > '2000' THEN INTO TABLE2 (COL1, COL2)
SELECT COL1, COL2 FROM TABLE3;

테이블의 내용을 수정하기 위한 UPDATE 문

  • UPDATE 문은 테이블에 저장된 데이터를 수정하기 위해서 사용된다.
  • UPDATE 문은 기존의 행을 수정하는 것이다. 따라서 어떤 행의 데이터를 수정하는지 WHERE 절을 이용하여 조건을 지정한다.
  • 정말 테이블의 전체 행을 수정하려고 했던 것이 아니라면 큰 문제가 발생하므로 WHERE 절의 사용 유무를 신중히 판단하여야한다.

UPDATE TABLE1 SET COL1 = 'NEW VALUE' WHERE COL2 = 'OLD VALUE';

테이블에서 2개 이상의 컬럼 값 변경

  • 테이블에서 하나의 컬럼이 아닌 복수 개 컬럼의 값을 변경하려면 기존 SET 절에 콤마를 추가하고 컬럼 = 값을 추가 기술하면 된다.

서브 쿼리를 이용한 데이터 수정

  • UPDATE 문의 SET 절에서 서브 쿼리를 기술하면 서브 쿼리를 수행한 결과로 내용이 변경된다.
  • 이러한 방법으로 다른 테이블에 저장된 데이터로 해당 컬럼 값을 변경 할 수 있다.

UPDATE TABLE1 SET COL1 = (SELECT COL1 FROM TABLE2 WHERE TABLE2.COL2 = TABLE1.COL2);

UPDATE TABLE1 SET (COL1,COL2) = (SELECT COL1,COL2 FROM TABLE2 WHERE TABLE2.COL2 = TABLE1.COL2);

테이블에 불필요한 행을 삭제하기 위한 DELETE 문

  • DELETE 문은 테이블에 저장되어 있는 데이터를 삭제한다.
  • DELETE 문은 WHERE 절을 이용하여 삭제할 데이터를 지정한다.
  • DELETE 문은 테이블에 저장된 데이터를 삭제하는 것이다. 따라서 삭제할 데이터를 지정하는 절을 이용하여 삭제하는 것이 아니라면 정말 테이블의 전체 행을 삭제하려고 했던 것이 아니라면 신중히 판단하여야한다.

DELETE FROM TABLE1 WHERE COL1 = 'OLD VALUE';

서브 쿼리를 이용한 데이터 삭제

  • DELETE 문의 WHERE 절에서 서브 쿼리를 기술하면 서브 쿼리를 수행한 결과로 내용이 삭제된다.

DELETE FROM TABLE1 WHERE COL1 IN (SELECT COL1 FROM TABLE2);


© 2020. All rights reserved.

SIKSIK