Chapter 4 데이터 조작어(DML)
DML(Data Manipulation Language) 명령은 데이터를 입력,수정,삭제하는 SQL명령어이다. 데이터베이스에 영구적으로 반영되지 않은 데이터 조작 명령어들을 TRANSACTION이라고 하며 오라클에서는 이를 하나의 논리적 작업 단위로 사용한다.
명 령 어 |
설 명 |
INSERT |
테이블에 새로운 행 추가 |
UPDATE |
테이블의 행 내용을 변경 |
DELETE |
테이블의 행 삭제 |
COMMIT |
저장되지 않은 모든 변경 사항을 Database에 저장 |
SAVEPOINT |
savepoint 설정 |
ROLLBACK |
저장되지 않은 보든 변경 사항을 취소 |
PLT 4.1 INSERT
INSERT INTO table_name [(column1[, column2, . . . . . ])]
VALUES (value1[, value2, . . . . . . ]); |
n VALUES절을 가지는 INSERT문장은 한번에 오직 하나의 행만을 추가한다.
n 모든 행에 값을 갖는 새로운 행을 삽입할 수 있기 때문에 column list는 INSERT절에 필요하지 않다. 하지만 테이블에 정의된 순서에 따라 값을 나열해야 한다.
n 명확성을 위해 INSERT절에 column list를 사용하면 좋다.(권장)
n 문자와 날짜는 단일 따옴표 안에 쓰나, 수치 값은 사용하지 않는다.
n INSERT 절의 column은 선택적으로 기입할 수 있다. 이럴 경우 열중 NOT NULL 제약 조건이 있는 열은 반드시 포함하여야 한다.
SQL> DESC emp
Name Null? Type
------------------------------- -------- ----
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NOT NULL NUMBER(2)
SQL> INSERT INTO emp
2 VALUES (1111,'YOONJB','',NULL,SYSDATE,3000,NULL,10);
1 row created. |
NULL 값 입력
자료형에 관계없이 사용 가능하다.
암시적 방법
SQL> INSERT INTO dept(deptno,dname)
2 VALUES (50,'DEVELOPMENT');
|
명시적 방법
SQL> INSERT INTO dept
2 VALUES(60,'',NULL);
|
특정 날짜 값 삽입
형식 DD-MON-YY는 항상 날짜 값을 입력할 때 사용한다. 이 형식은 현재 세기에 대한 DEFAULT 세기를 다시 호출한다. 또한 날짜가 시간 정보를 포함하므로 DEFAULT 시간은 자정 (00:00:00 )이다. 날짜를 다른 세기로 입력하거나 또는 특정 시간을 요구 한다면 TO_DATE함수를 사용하여라.
날짜 변환식 |
변환된 결과 |
TO_DATE('1999','YYYY') |
|
TO_DATE('99','YY') |
|
TO_DATE('02','MM') |
|
TO_DATE('13','DD') |
|
TO_DATE('10','HH24') |
|
치환 변수를 사용하여 값 입력
SQL*Plus의 치환 변수를 사용하여 사용자가 상호 작용으로 값을 추가할 수 있다. 날짜와 문자 값은 단일 인용 부호를 사용하여 감싸는 것이 사용하기에 편하고 SCRIPT로 작성하여 사용하면 입력시 매우 유용하다.
SQL> ed dept_insert
INSERT INTO dept (deptno,dname,loc)
VALUES (&department_id,'&department_name','&location');
SQL> @dept_insert
Enter value for department_id: 70
Enter value for department_name: EDUCATION
Enter value for location:
old 2: VALUES (&department_id,'&department_name','&location')
new 2: VALUES (70,'EDUCATION','
1 row created. |
다른 테이블로부터 행 복사
기존의 테이블로부터 값을 가져와 테이블에 추가하기 위해서 INSERT문장을 사용할 수 있다. 즉 VALUES절에서 subquery를 사용할 수 있다.
INSERT INTO table_name [column1[,column2, . . . .]] subquery; |
INSERT절의 열의 개수와 서브쿼리의 열의 개수가 좌측부터 1대1대응하며 자료형과 길이가 같아야 한다.
PLT 4.2 UPDATE
n UPDATE문장으로 기존의 행을 갱신합니다.
n 일반적으로 단일 행을 식별하기 위해서 기본 키(primary key)를 사용합니다. 다른 열을 사용하면 원하지 않는 여러 행이 갱신될 수 있습니다.
n 특정 열이나 행은 WHERE절을 이용하여 갱신할 수 있다.
UPDATE table_name
SET column1 = value1 [,column2 = value2, . . . . . . .]
[WHERE condition]; |
SQL> UPDATE emp
2 SET deptno = 20, sal = 3500
3 WHERE empno = 7788;
1 row updated. |
다중 열 SUBQUERY로 갱신
다중 열 SUBQUERY는 UPDATE문장의 SET절로 구현할 수 있다.
UPDATE table_name
SET (column1, column2, . . . . ) =
( SELECT column1,column2, . . .
FROM table_name
WHERE coundition)
[WHERE condition]; |
SQL> UPDATE emp
2 SET (job,sal) = (SELECT job,sal
3 FROM emp
4 WHERE ename = 'SCOTT')
5 WHERE ename = 'JONES';
1 row updated. |
다른 테이블을 근거로 한 행 갱신
다른 테이블의 값을 근거로 하는 테이블에서 행을 갱신하기 위해 UPDATE문장에서 SUBQUERY를 사용한다.
SQL> UPDATE employee
2 SET deptno = (SELECT deptno
3 FROM emp
4 WHERE empno = 7902)
5 WHERE job = (SELECT job
6 FROM emp
7 WHERE empno = 7902);
2 rows updated. |
PLT 4.3 DELETE
n DELETE 문장을 사용하여 테이블로부터 기존의 자료를 삭제할 수 있다.
n WHERE절을 명시하여 특정 행이나 행들을 삭제할 수 있다.
n WHERE절을 생략하면 테이블의 모든 행이 삭제 된다.
DELETE [FROM] table_name
[WHERER condition]; |
SQL> DELETE emp
2 WHERE TO_CHAR(hiredate,'YY') = '83';
1 row deleted. |
다른 테이블을 근거로 한 행 삭제
다른 테이블을 값을 근거로 행을 삭제하기 위해서는 SUBQUERY를 사용하여야 한다.
SQL> DELETE emp
2 WHERE deptno = (SELECT deptno
3 FROM dept
4 WHERE dname = 'SALES');
5 rows deleted.
|
'DataBase > Oracle' 카테고리의 다른 글
Chapter 5 데이터 조회 - PLT 5.1 SELECT문의 기본 사용법 (0) | 2008.04.17 |
---|---|
PLT 4.4 데이터베이스 TRANSACTION (0) | 2008.04.17 |
PLT 3.3 Role (0) | 2008.04.17 |
Chapter 3 Oracle 사용자 관리 - PLT 3.1 사용자 생성 (0) | 2008.04.17 |
PLT 2.5 SYNONYM (0) | 2008.04.17 |