SQL

SQL 문법 정리 : 데이터조작

Nova 2021. 2. 22. 16:34

SQL 문법 정리 : 데이터조작(INSERT, UPDATE, UPDATE JOIN,DELETE,UPSERT,EXPORT,IMPORT)

INSERT

테이블이 만들어지면 빈 공간이 만들어 지는 것이며 테이블 안에 테이터를 INSERT하는 것이 필요하다.

 

INSERT

   INTO

         TABLE_NAME

VALUES

(

  VALUE1

  ,VALUE2

  ,VLAUE3

 ,........

)

;

 

INSERT

   INTO

          TABLE_NAME

(

   COLUMN1

  ,COLUMN2

)

VALUES

(

 VALUE1

,VALUE2

)

;

 

*테이블을 테이블에 입력하는 경우

CREATE TABLE LINK_TMP AS

SELECT * FROM LINK WHERE 0=1

(#LINK테이블의 스키마(껍데기)만 가져와서 LINK_TMP테이블을 생성한다.)

(#LINK_TMP테이블 구조는 LINK와 같고 데이터는 0건이 된다.)

 

INSERT

    INTO LINK_TMP

SELECT *

  FROM LINK

;

(#LINK_TMP 테치블에 입력SELECT문을 작성함)

 

UPDATE

테이블의 존재하는 데이터를 수정하는 작업이다. 업무를 처리하는데 필수적인 것이며 동시성에 유의해야 한다.

UPDATE는 대상 행에 대해서 락을 잡는다.

락이란 다른 사용자는 해당 행에 대해서 작업을 하지 못한다는 것이다. 즉 UPDATE를 한 후 재빨리 COMMIT을 하지 않는다면 RDBMS의 동시성이 낮아진다.

UPDATE

         TABLE_NAME

SET  COLUMN_1 = VALUES1

      ,COLUMN_2 = VALUE2

WHERE 조건  #대상조건

;

(#UPDATE할 테이블 지정 수정할 컬럼 및 값 입력)

 

UPDATE JOIN

UPDATE 시 다른 테이블의 내용을 참조 하고 싶을 때 UPDATE JOIN문을 사용한다. 복잡한 업무를 처리하는데 매우 유용한 방법이다

UPDATE

           TARGET_TABLE A

      SET A.COLUMN_1 = 표현식

   FROM REF_TABLE B      #참조테이블 지정

 WHERE A.COLUMN_1 = B.CLOUMN_1;

 

DELETE

DELETE문은 테이블에서 특정 데이터를 삭제하거나 테이블 내에 존재하는 모든 데이터를 삭제 할 수 있다.

DELETE

  FROM

          TARGET_TABLE A

WHERE 조건식

;

 

DELETE FROM

            LINK_TMP A

USING   LINK B   #LINK테이블과조인

WHERE  A.ID = B.ID

;

 

UPSERT

INSERT를 시도할 때 조건(상황)에 따라 UPDATE를 할수 있는 구문이다. 복잡한 업무 처리에 자주 사용한다.

INSERT INTO

                 TABLE_NAME(COLUMN_1) VALUES(VALUE_1)

ON CONFLICT TARGET ACTION;

(#INSERT 시도, 충돌시 다른 액션)

 

INSERT INTO

                 CUSTOMERS (NAME, EMAIL)

VALUES     #기존에 존재하는 NAME

(

'Microsft','hotline@microsfot.com'

)

ON CONFLICT (NAME) 충돌시(기존에 존재할 경우)

DO NOTHING; #아무것도 안함

 

UPSERT - UPDATE

INSERT INTO CUSTOMERS (NAME, EMAIL)

VALUES

(

'Microsft','hotline@microsfot.com'

) ON CONFLICT (NAME)

DO UPDATE

                SET EMAIL = EXCLUDED.EMAIL ||

                                                      ';' ||

                                CUSTOMERS.EMAIL

;

(#충돌시(기존에 존재할 경우) UPDATE함)

(#EXCLUDED.EMAIL은 위에서 INSERT시도한 EMAIL값을 가리킴)

 

EXPORT

데이블의 데이터를 다른 형태의 데이터로 추출하는 작업니다.

대표적으로 CSV형식으로 가장 많이 추출한다.

 

COPY CATEGORY(CATEGORY_ID, NAME, LAST_UPDATE)

#추출할 테이블과 컬럼을 지정한다

TO 'C:/tep/DB_CATEGORY.CSV'

#추출할 데이터를 저장할 파일을 지정한다 

DELIMITER ','  #구분자 지정

CSV HEADER #파일형식을 지정한다, HEADER 없이는 생략

;

 

IMPORT

IMPORT는 다른 형식의 데이터를 테이블에 넣는 작업을 말한다. 

데이터 구축시 자주 사용 된다.

 

COPY CATEGORY_IMPORT(CATEGORY, 'NAME', LAST_UPDATE)

FROM 'C:/tep/DB_CATEGORY.CSV'

DELIMITER ','           #'|'

CSV HEADER

;

 

(# 컬럼명(헤더)이 존재하지 않으므로 반드시 HEADER를 제거해야 한다.)

(# HEADER를 제거하지 않을 경우 가장 첫번째 데이터를 헤더로 인삭하여 한건이 누락된다)