DML문은 데이터베이스에 저장된 데이터를 추가하고 수정, 삭제 및 데이터를 추출하는 데에 사용되는 구문이다.

대표적인 DML문은 SELECT, INSERT, UPDATE, DELETE 구문으로 각각 데이터 검색, 추가, 수정, 삭제에 사용된다.

 

1. SELECT문

SELECT문은 테이블이나 뷰에서 데이터를 보여주는데 사용되는 SQL문이다.

SELECT문에는 중요한 키워드가 두 가지 있는데, 조회할 테이블이나 뷰를 명시하게 되는 FROM문과 검색할 데이터의 검색 조건을

지정하는 WHERE절이 바로 그것이다.

SELECT select_list
[ INTO new_table ]
FROM table_name
[ WHERE search_condition ]
[ GROUP BY group_by_expression ]
[ HAVING search_condition ]
[ ORDER BY order_expression [ ASC | DESC ] ]

SELECT문에는 여러가지 인자들이 사용되지만, 그 중에서 SELECT 다음에 보여줄 컬럼들의 리스트가 나오고, 다음에 FROM절에서 데이터를 가져올 대상 테이블이나 뷰를 지정하며, WHERE절에서 검색 조건을 지시하는 것이 가장 기본적인 SELECT문이다.

 

2. INSERT문

테이블에 새로운 행을 추가할때 INSERT문을 사용한다.

INSERT [ INTO ] table_or_view_name [ (column_list) ] VALUES [ data_values ]
-- 여러행 추가
INSERT INTO bak_Member (user_id, user_name, user_pwd, backup_date)
SELECT user_id, user_name, user_pwd, GETDATE()
FROM TB_Member

만약 column_list를 생략할 경우, 테이블 또는 뷰의 모든 열에 데이터가 입력된다.

column_list에 일부 컬럼만 지정할 경우, 제외된 나머지 컬럼에는 NULL이 삽입된다.

따라서 열목록에 지정되지 않은 모든 열은 NULL 값을 허용하거나, 혹은 기본값이 정의되어 있다면 기본값이 할당되어야 한다.

또한, VALUES 대신 SELECT문을 사용하여 다른 테이블로부터 복수개의 행을 한번에 복사(추가)할 수도 있다.

이때 주의할 점은 하위 질의의 선택항목이 INSERT문의 열 목록과 일치해야한다.

위의 예시처럼 GETDATE()와 같이 컬럼이 아닌 모든 행에 동일한 값을 지정할 수도 있되 데이터타입은 일치해야한다.

 

3. UPDATE문

테이블이나 뷰의 특정 행에서 데이터를 수정할 때 사용된다.

UPDATE {table | view}
SET { column = expression }
WHERE condition

SET 절 : 업데이트할 컬럼과 각 컬럼에 대한 새로운 값을 column_name = expression 형식으로 쉼표로 구분하여 나열한다.

WHERE 절 : 원본 테이블 및 뷰에서 업데이트할 행을 정의하는 검색 조건을 지정한다.

 

UPDATE문을 사용할때 주의해야할 점은 반드시 조건절을 주어서 전체 행이 변경되는 실수를 하지 않도록 해야한다.

 

4. DELETE문

DELETE문은 테이블이나 뷰의 데이터를 삭제할 때 쓰인다.

DELETE FROM {table | view}
WHERE condition

DELETE문 역시 삭제하려는 행 이외의 다른 행이 삭제되는 실수를 하지 않도록 조건절을 주거나 트랜잭션을 설정하여 작업하기를

권장한다.

 

5. TRUNCATE TABLE문

데이터의 건수가 많은 테이블의 모든 행을 삭제하고자 할때, 시퀀스를 초기화하고자 할때는 DELETE문 보다 TRUNCATE TABLE문을 사용한다.

많은 양의 데이터를 삭제할 때 DELETE문을 사용하면 꽤 오랜 시간이 필요할 것이다.

이때 DELETE문 대신 TRUNCATE TABLE문을 사용하면 테이블 데이터 및 인덱스가 확보했던 모든 공간을 즉시 해제한다.

모든 인덱스에 대한 배포 페이지도 해제하게 된다.

즉 개별 행 삭제를 로그로 남기지 않기 때문에 한번 삭제된 데이터는 ROLLBACK문으로 복구할 수 없다.

따라서 데이터를 삭제할 때에 DELETE를 사용할지 TRUNCATE를 사용할지 잘 판단하여 선택해야 한다.

TRUNCATE TABLE TB_Member