2011년 6월 1일 수요일

Chapter 4 데이터 조작어(DML) - PLT 4.1 INSERT, UPDATE, DELETE

DML(Data Manipulation Language) 명령은 데이터를 입력,수정,삭제하는 SQL명령어이다. 데이터베이스에 영구적으로 반영되지 않은 데이터 조작 명령어들을 TRANSACTION이라고 하며 오라클에서는 이를 하나의 논리적 작업 단위로 사용한다.
명 령 어설    명
INSERT테이블에 새로운 행 추가
UPDATE테이블의 행 내용을 변경
DELETE테이블의 행 삭제
COMMIT저장되지 않은 모든 변경 사항을 Database에 저장
SAVEPOINTsavepoint 설정
ROLLBACK저장되지 않은 보든 변경 사항을 취소


PLT 4.1 INSERT
INSERT INTO table_name [(column1[, column2, . . . . . ])]
VALUES  (value1[, value2, . . . . . . ]);

  • VALUES절을 가지는 INSERT문장은 한번에 오직 하나의 행만을 추가한다.
  • 모든 행에 값을 갖는 새로운 행을 삽입할 수 있기 때문에 column list는 INSERT절에 필요하지 않다. 하지만 테이블에 정의된 순서에 따라 값을 나열해야 한다.
  • 명확성을 위해 INSERT절에 column list를 사용하면 좋다.(권장)
  • 문자와 날짜는 단일 따옴표 안에 쓰나, 수치 값은 사용하지 않는다.
  • 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')
1999/02/01 00:00:00
TO_DATE('99','YY')
1999/02/01 00:00:00
TO_DATE('02','MM')
1999/02/01 00:00:00
TO_DATE('13','DD')
1999/02/13 00:00:00
TO_DATE('10','HH24')
1999/02/01 10:00:00


치환 변수를 사용하여 값 입력
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: ATLANTA
old   2: VALUES (&department_id,'&department_name','&location')
new   2: VALUES (70,'EDUCATION','ATLANTA')
1 row created.


다른 테이블로부터 행 복사
기존의 테이블로부터 값을 가져와 테이블에 추가하기 위해서 INSERT문장을 사용할 수 있다. 즉VALUES절에서 subquery를 사용할 수 있다.
INSERT INTO table_name  [column1[,column2, . . . .]]  subquery;


INSERT절의 열의 개수와 서브쿼리의 열의 개수가 좌측부터 1대1대응하며 자료형과 길이가 같아야 한다.
PLT 4.2 UPDATE
  • UPDATE문장으로 기존의 행을 갱신합니다.
  • 일반적으로 단일 행을 식별하기 위해서 기본 키(primary key)를 사용합니다. 다른 열을 사용하면 원하지 않는 여러 행이 갱신될 수 있습니다.
  • 특정 열이나 행은 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
  • DELETE 문장을 사용하여 테이블로부터 기존의 자료를 삭제할 수 있다.
  • WHERE절을 명시하여 특정 행이나 행들을 삭제할 수 있다.
  • 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.

댓글 없음:

댓글 쓰기

ETL 솔루션 환경

ETL 솔루션 환경 하둡은 대용량 데이터를 값싸고 빠르게 분석할 수 있는 길을 만들어줬다. 통계분석 엔진인 “R”역시 하둡 못지 않게 관심을 받고 있다. 빅데이터 역시 데이터라는 점을 볼때 분산처리와 분석 그 이전에 데이터 품질 등 데이...