오라클, 데이터조작, DML(Data Manipulation Language), 단일, 복수행입력, INSERT, UPDATE, DELETE, MERGE
http://ojc.asia/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=637
10. DML(Data Manipulation Language)
10.1 DML 개요
DML명령문은 스키마 오브젝트의 데이터를 접근하고 조작하는 명령문으로 다음과 같은 명령어들이 있다.
SELECT : 테이블의 데이터에 대해 접근 후 추출만 가능
INSERT : 테이블에 행을 삽입하기 위한 명령어
UPDATE : 테이블의 데이터를 수정하기 위한 명령어
DELETE : 테이블의 데이터를 삭제하기 위한 명령어
MERGE : 두 테이블의 데이터를 하나의 테이블로 병합하기 위한 명령어
10.2 INSERT 명령어
n 테이블에 데이터를 입력하기 위한 명령어
n 테이블에 데이터를 입력하기 위해서는 사용자 소유의 테이블이거나 테이블에 대해 INSERT 권한이 있어야 한다.
10.2.1 단일행 입력
[기본 형식]
INSERT INTO table_name [(column_name1, column_name2,,, )]
VALUES (value1, value2, ,,)
n 문자데이터 및 날짜 데이터는 VALUES 구에서 단일 따옴표(‘)로 싸야 한다.
n 테이블의 모든 칼럼에 대해 데이터를 삽입하는 경우에는 INTO 테이블이름 다음에 칼럼을 기술하지 않아도 되고 VALUES절에서 테이블에 정의된 칼럼의 순서대로 값을 기술하면 된다. (추후 테이블에 칼럼이 추가 된다면 오류 발생한다)
n 테이블의 일부 칼럼에만 값을 입력하는 경우에는 INTO 테이블이름 다음에 반드시 칼럼을 기술해야 한다.
n 칼럼에 NULL을 입력하는 방법은, INSERT INTO 테이블명 다음에 칼럼명 나열 시 NULL을 입력 할 칼럼을 기술하지 않으면 묵시적으로 NULL이 입력되고 명시적으로 VALUES절에서 NULL 또는 ‘’을 입력해 주면 된다.
n VALUES 절에는 현재 사용자 계정을 나타내는 USER, 칼럼의 기본값을 나타내는 DEFAULT와 SYSDATE와 같은 함수 사용 가능 하다.
n 날짜 데이터는 날짜데이터로 변환해서 입력하거나 문자열을 입력한다면 해당 시스템의 NLS_DATE_FORMAT에 맞추어 입력해야 한다.
10.2.2 복수행 입력(Multi Row Insert)
여러행을 한번에 입력하기 위한 방법은 INSERT … SELECT… 와 같이 서브쿼리를 이용하는 방법과 오라클9i 이후 사용가능한 INSERT ALL[FIRST] 등을 이용하는 방법이 있다.
서브쿼리를 이용한 다중행 입력
[기본 형식]
INSERT INTO table_name [(column_name1, column_name2,,, )]
Sub Query
n 서브쿼리는 SELECT문이며 서브쿼리의 결과(자신이나 다른 테이블의 SELECT 결과)로 넘어오는 레코드를 한번에 INSERT 한다.
n INSERT INTO 테이블명 다음에 칼럼을 기술하는 경우에는 해당 칼럼만 데이터를 INSERT 하겠다는 의미로 서브쿼리에서 SELECT 되는 칼럼 개수와 타입이 일치해야 한다. 칼럼을 기술 안하는 것은 테이블의 모든 칼럼에 대해 INSERT 하겠다는 의미이다.
n 서브쿼리의 결과로 SELECT되는 ROW가 없다면 테이블에 한건도 INSERT하지 않는다.
INSERT ALL/FIRST을 이용한 다중행 입력
[기본 형식]
INSERT ALL | FIRST
INTO [table] VALUES [(Column1, Column2,,,)]
INTO [table] VALUES [(Column1, Column2,,,)]
……
Sub Query
n Oracle 9i 이후에 사용 가능한 명령으로 하나의 테이블에 여러 데이터를 입력하거나, 여러 테이블에 하나의 INSERT 명령으로 동시에 데이터를 입력할 수 있다.
10.3 UPDATE 명령어
n 테이블의 데이터를 변경하기 위한 명령어
n 자신 Schema에서 만든 테이블 이거나 테이블에 대한 UPDATE 권한이 있어야 한다.
n WHERE 조건을 생략하면 테이블의 모든 레코드가 변경되므로 조심해야 한다.
n WHERE 조건은 칼럼명, 표현식, 상수, 서브쿼리, 비교연산자 등이 올 수 있다.
[기본 형식]
UPDATE [table_name | subquery]
SET column = value[,column = value]
[WHERE 조건]
10.4 DELETE 명령어
n 테이블 데이터를 삭제하기 위한 명령어
n 자신 Schema에서 만든 테이블이거나 테이블에 대한 DELETE 권한이 있어야 한다.
n WHERE 조건을 생략하면 테이블의 모든 레코드가 삭제되므로 조심해야 한다.
n WHERE 조건은 칼럼명, 표현식, 상수, 서브쿼리, 비교 연산자 등이 올 수 있다.
[기본 형식]
DELETE [FROM] table_name
[WHERE 조건]
10.5 MERGE 명령어
n 테이블 데이터를 병합하기 위한 명령어
n 병합되는 테이블에 데이터가 있는 경우에는 UPDATE, 없는 경우에 INSERT등의 로직을 구현할 수 있다.
[기본 형식]
MERGE INTO table_name alias
USING [table_name | view | subquery] alias
ON (조인 조건)
WHEN MATCHED THEN
UPDATE SET col1 = val1 [,col2 = val2…]
WHEN NOT MATCHED THEN
INSERT (column_list) VALUES (value_list)
n MERGE INTO 구 : 데이터가 update 되거나 insert될 테이블명(병합되는 테이블명)
n USING 구 : 머지되는 대상 table의 data와 비교한 후 update 또는 insert할 때 사용할 데이터 원본
n ON 구 : update나 insert를 하게 될때의 조건, 조건을 만족하는 레코드가 있으면 WHEN MATCHED 이하를 실행하고 없으면 WHEN NOT MATCHED 이하를 실행한다.
n WHEN MATCHED : ON 조건이 TRUE인 경우 수행할 내용
n WHEN NOT MATCHED : ON 조건이 false인 경우 수행할 내용
댓글 없음:
댓글 쓰기