Database/Oracle

DML(데이터 조작어, Data Manipulation Language) 와 DDL(데이터 정의어, Data Definition Language) 정리

Leonardo Go 2011. 9. 1. 17:57

1. 데이터 조작하기(DML)

데이터를 조작하는 역할을 담당하는 SQL을 DML(Data Manipulation Language)이라고 한다. 이것은 데이터를 조회, 저장, 삭제할 때 사용되는 SQL 문장들을 말한다.

▷ 데이터의 조회 : SELECT
▷ 데이터의 삭제 : DELETE
▷ 데이터의 저장 : INSERT(신규 데이터 입력)
                        : UPDATE(기존 데이터 수정)


 
1) SELECT 문
SELECT 문은 바로 테이블에 저장된 데이터를 조회하는데 사용되는 가장 기본적인 SQL문장이다.
[구문형식]
SELECT 컴럼1, 컬럼2, ...
FROM 테이블1, 테이블2, ...
WHERE 조건들;
SELECT 다음에 선택하고자 하는 컬럼 이름을 나열하고 , FROM 뒤에는 선택하고자 하는 테이블명을 나열한다. WHERE 절에는 조건식을 추가할수 있는데, 이 조건식을 만족하는 데이터들만 조회된다. WHERE 절은 생략이 가능한데, 이럴 경우에는 테이블에 있는 모든 데이터(모든 로우)들이 조회된다. 하지만 SELECT와 FROM은 생략할 수 없다.

2) INSERT 문
테이블에 새로운 데이터를 넣을때 사용하는 SQL 문장이다.
[구문형식]
INSERT INTO 테이블명1 (컬럼1_1, 컬럼1_2,...)
VALUES (컬럼1_1 값, 컬럼1_2값, ...);

[구문형식]
INSERT INTO 테이블명1
VALUES (컬럼1_1 값, 컬럼1_2값, ...);

컬럼 리스트와 그컬럼에 들어갈 값의 순서는 정확히 맞아야 한다.
또한 두 번째 유형처럼 컬럼 리스트의 생략이 가능한데, 이런 경우에는 테이블에 있는 모든 컬럼에 데이터를 넣는다는 의미이다.

[구문형식]
INSERT INTO 테이블명1 (컬럼1, 컬럼2,...)
SELECT 컬럼2_1, 컬럼2_2, ...
FROM 테이블2
WHERE ...;
이것은 제3의 테이블에 있는 데이터를 선택해서 새로운 데이터를 넣는 형태이다.
이와 같은 형태의 경우 INSERT 문장은 비록 하나지만 실제로 입력되는 값은 1로우 이상이 가능하다.

3) UPDATE 문
기존에 테이블에 저장되어 있는 데이터를 새로운 값으로 변경할 떄 사용하는 SQL문장
[구문형식]
UPDATE 테이블명
      SET 변경컬럼1 = 변경하고자 하는 값,
             변경컬럼2 = 변경하고자 하는 값,
             ...
      WHERE  조건절..;

4) DELETE 문
데이터를 삭제할 떄 사용하는 SQL문장
[구문형식]
DELETE [FROM] 테이블
  WHERE 조건...;
DELETE 다음에 삭제하고자 하는 테이블명을 명시하며(FROM은 생략 가능하다), 특정 조건에 맞는 데이터만 삭제하고자 할 경우에는 WHERE 절을 추가한다. DELETE 역시 WHERE 절을 생략하면 테이블 전체 데이터가 삭제된다.

5) COMMIT 문
데이터 변경 작업(INSERT, UPDATE, DELETE)을 한 뒤, COMMIT을 실행하면 변경된 데이터들이 데이터 파일에 반영된다.
[구문형식]
COMMIT [WORK] [TO SAVEPOINT savepoint_name];

[]로 표시된 부분은 생략이 가능하다. 그러므로 'COMMIT;'이나 'COMMIT WORK;'는 동일한 효과를 가진다. SAVEPOINT는 특정 시점까지 작업한 내용을 반영할 경우 사용한다. COMMIT으로 반영되는 데이터는 이전 COMMIT이나 ROLLBACK을 실행한 시점부터 현재 COMMIT을 실행하는 동안에 이루어진 내용을 반영한다.

6) ROLLBACK 문
COMMIT과는 반대의 개념으로, 변경된 데이터들을 변경 전 상태로 되돌리는 역할을 한다. 앞에서 예를 든 경우처럼 원하지 않는 데이터까지 삭제했을 경우, ROLLBACK 문을 실행하면 이전 ROLLBACK이나 COMMIT이 실행된 시점 이후에 변경된 사항은 모두 원상태로 되돌아간다.

[구문형식]
ROLLBACK [WORK] [TO SAVEPOINT savepoint_name];

2.객체 조작하기(DDL)
DDL(Data Definition Language)은 데이터베이스 객체들을 생성하는데 사용되는 SQL문이다. 데이터베이스 객체에는 데이터베이스, 테이블, 인덱스, 뷰, 트리거 등이 있으며 이를 생성하는 데도 SQL 문이 사용되는데, 이떄 사용되는 SQL 문장들을 DDL이라고 한다. DDL에는 대표적으로 CREATE, DROP, ALTER, TRUNCATE 등 네 개의 문장이 있다.

1) CREATE 문
데이터베이스 객체들을 생성할 때 사용한다.
'CREATE 객체종류 객체명...'
2) DROP 문
CREATE와는 반대로 이미 생성된 객체들을 삭제할 때 사용한다. 삭제한다고 해서 DELETE와 혼동하면 안 된다. DELETE는 테이블 상의 데이터르 삭제할 떄 사용하는 것이고, DROP은 객체 자체를 데이터베이스에서 영구히 없앨 때 사용하는 문장이다.  즉 객체를 소멸시킨다고 할 수 있다.
'DROP 객체종류 객체명...'

3) ALTER 문
기존에 생성된 객체를 변경할 때 사용하는 문장이다.

4) TRUNCATE 문
TRUNCATE 문은 DELETE 문과 동일한 역할을 한다. 즉 테이블에 있는 데이터들을 삭제할 때 사용된다. 하지만 차이점이 있다. TRUNCATE 문을 사용하여 데이터를 삭제했을 경우에는 ROLLBACK을 사용하여 데이터를 복구할 수 없다. TRUNCATE가 실행되면서 자동 COMMIT이 되기 때문이다.

▶ DELETE보다 수행 속도가 빠르며 수행 비용이 적다.
▶ 테이블에 있는 인덱스나 트리거에 영향을 주지 않고 데이터만 삭제한다.
▶ DROP은 테이블에 있는 데이터를 삭제함은 물론 테이블 구조까지 소멸시키는 반면 DELETE는 메모리상에 존재하는 테이블의 데이터를 삭제한다. TRUNCATE는 테이블 구조는 그대로 두고 메모뿐만 아니라 데이터 파일에 있는 데이터까지 삭제하지만 테이블 구조는 그대로 보존한다.

TRUNCATE는 DROP과 DELETE의 중간에 위치한 역할을 수행한다고 할 수 있다. TRUNCATE문은 또한 테이블과 클러스터(cluster)에만 적용이 가능하며 그 형태는 다음과 같다.

[구문형식]
TRUNCATE TABLE 테이블명...


[구문형식]
TRUNCATE CLUSTER 클러스터명...