Akashic Records

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

오래된글/DataBase

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

Andrew's Akashic Records 2018. 4. 15. 22:30
728x90

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, . . . . . . ]);


  • 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.


728x90
Comments