본문 바로가기

Programming/DataBase

SQL - DML

[DML]이란 무엇인가?

DML이란 SQL 문장 종류의 하나로서 Data Manipulation Language 약자로 데이터 조작언어란 의미.

- 모든 DML문장은 트랜젝션을 유발시킨다.

 

[SQL 문장의 종류]

 

[오라클 데이터 베이스 에서의 DML 정의]

DML문은다음과같은상황에실행된다.

-테이블에새로운행을입력할경우(INSERT)

-테이블에존재하는행의내용을변경할경우(UPDATE)

-테이블에존재하는행을삭제할경우(DELETE)

 

[DML 문법 정리]

1. INSERT 

 

 INSERT 기본 문법

 

INSERT INTO table [(column [, column...])]

VALUES (value [, value...]);

 

SELECT문을 사용하여 다른 테이블의 검색 결과를 삽입할 수 있다.


table : 테이블 이름

column : 데이터를 삽입  테이블의  이름

values : 삽입 실제  

 

  INSERT 예제 구문

 

- DEPARTMENTS 테이블에 있는 모든 컬럼에 각각의 값을 입력하는 문장.

- 테이블 열의 기본 순서대로 값을 나열.

- 위 문장에서는 모든 컬럼의 열을 명시적으로 표기 하였으나 생략 가능

- Data Type이 Number와 같은 경우 values 값에 홑따옴표 표기 하지 않는 것에 주의.(오라클 자체내에서 암묵적 형변환 일어남)

- 문자 및 날짜 값은 홑따옴표 표기.

 

③ Null값을 같은 INSERT

 

- 열 목록에서 널값을 가지고 있는 해당 열 목록을 생략 하면 values값에도 널값을 생략 할 수 있다.(암시적 방법)

 

 

- values 절에 널값을 표기 해서 직접 입력.(명시적 방법)

- NULL값에는 홑따옴표를 표기 하지 않음에 주의.(문자값이 절대 아니다.)

 

④ 특정 값 INSERT

 

- 여기서 특정 값이란 함수값을 지칭한다.

- 날짜 값을 가지고 있는 hire_date 컬럼에 sysdate(현재 날짜 및 시간을 표기하는 함수) 함수를 사용하여 입력.

- 컬럼의 데이터 타입에 맞는 함수를 values절에 사용할 수 있다.

 

⑤ 특정 날짜 값 INSERT

 

- 날짜 값을 입력 할때 기본 형식은 DD-MON-YY

- 날짜 값을 기본 형식이 아닌 다른 형식으로 입력 할 때는 to_date함수를 사용하여 원하는 포맷으로 변형 시킬수 있다.

- 다른 세기나 특정 시간(ex:1999) 에 맞추고 싶을 때 사용하면 좋다.

 

⑥ INSERT에 서브쿼리를 사용하여 다른 테이블로 부터 행 복사

 

- 서브쿼리를 사용하여 서브쿼리에서 검색된 내용의 내용을 그대로 sales_reps테이블에 입력하는 구문.

- INSERT절에 서브쿼리를 사용할 때는 values절 생략에 주의

- 서브쿼리의 컬럼절과 INSERT절의 컬럼절의 데이터 타입과 갯수를 동일 하게 해줘 야 한다.

- 서브쿼리를 사용 하는 목적은 언제나 UNKNOWN CONDITION을 찾는데 있다. 만약 해당 문장에서 서브쿼리에서 검색된 값이

  없다면 아무것도 INSERT되지 않는다.

 

2. UPDATE문

 

① UPDATE 기본 문법

UPDATE table

SET column = value[, column = value, ...]

[WHERE condition];

 

table : 테이블 이름

column : 데이터를 갱신할 테이블 열이름

value : 열의 값 또는 서브쿼리

condition : 갱신될 행 식별하며 열이름, 표현식, 상수, 서브쿼리, 비교 연산자로 구성.(생략가능 하나 반드시 표기 권장)

 

② UPDATE 예제 구문

- where절을 지정하여 EMPLOYEES 테이블의 113번 사원을 70번 부서로 변경하였다.

- 한개의 row가 업데이트 되었다는 결과를 볼 수 있다.

 

- where절을 지정하지 않고 UPDATE를 실시하여 COPY_EMP테이블의 부서번호를 모두 110번으로 변경 하였다.

- 22개의 row가 한꺼번에 업데이트 되었다는 결과를 볼 수 있다.

 

※ 한꺼번에 테이블의 컬럼을 수정하는 일은 거의 없다. 언제나 where절에 정확한 조건을 사용하여 정화하고 빠르게 원하는 데이터만 수정하는 것이 중요하다.

 

③ UPDADE에 서브쿼리를 사용하여 한꺼번에 두개의 열을 수정하기.

 

- EMPLOYEES테이블에 144번 사원의 부서번호와 급여를 각각의 서브쿼리의 검색결과에 맞게 변경하는 구문.

- SET절에 서브쿼리를 여러개 사용하여 동시에 여러개의 컬럼 값을 변경 할 수 있다.

- 여러개의 컬럼을 동시에 업데이트 하는 것이 절대 동시에 여러개의 레코드를 수정하는 것은 아님.

- 컬럼의 업데이트 결과 반환 값은 언제나 WHERE절에서 검색된 결과 값과 같다.

- 서브쿼리의 조건 검색에서 결과 값이 없으면 "0 rows updated"라는 결과값 반환.(에러메시지는 발생하지 않는다)

 

④ 서브쿼리를 이용한 다른 테이블을 기반으로 행 UPDATE

-EMPLOYEES테이블을 기반으로 WHERE절에 있는 사원번호가 200번인 사원의 부서번호와 동일 한 업무번호를 가지고 있는 모든 사원의 부서번호를 현재 100번사원의 부서번호로 모두 변경한다.

-위 문장을 실행하기 전에 EMPLOYEES 테이블과 구문의 구조와 동일 COPY_EMP를 가지고 있어야 한다.

 

3. DELETE 문

 

① DELETE 기본 문법

DELETE [FROM] table

[WHERE condition];

 

table : 테이블 이름

from절과 where절은 생략 가능.

 

② DELETE 예제 구문

- DEPARTMENTS 테이블에서 WHERE절에서 지정한 조건의 부서명이 Finance인 레코드를 1행 삭제 하였다.

- 조건절을 정확히 지정하여 원하는 데이터만 삭제 할 수 있다.

 

- 조건절을 지정하지 않아 COPY_EMP테이블의 모든 데이터를 삭제 하였다.(COPY_EMP의 모든 튜플 삭제됨)

- 테이블의 모든 데이터를 삭제 하고 싶을 때 사용할 수 있다.

※ DELETE를 사용하여 테이블의 모든 데이터를 삭제하는 것은 비추천, TRUNCATE(DDL)를 사용하는 것이 더 확실 하고 속도가 빠르다.

 

③ 서브쿼리를 사용하여 다른 테이블을 기반으로 한 DELETE

- 서브쿼리를 사용하여 다른 테이블의 데이터 값을 기반으로 생성된 테이블의 데이터를 삭제 할 수 있다.

- 부서명에 문자열 Public가 포함된 부서번호와 같은 부서번호를 가지고 있는 EMPLOYEES 테이블의 데이터를 삭제 한다.

'Programming > DataBase' 카테고리의 다른 글

내장 SQL  (0) 2013.06.26
SQL - DCL  (0) 2013.06.26
SQL - JOIN  (0) 2013.06.26
sql - select 문  (0) 2013.06.26
SQL - DDL(Data Define Language)  (0) 2013.06.26