오라클의 SQL의 데이터 조작어에는 데이터베이스를 갱신하는 세 가지 명령이 있습니다.
INSERT문은 릴레이션에 새로운 투플을 삽입하고, DELETE문은 릴레이션에서 기존의 투플을 삭제하며,
UPDATE문은 기존의 투플의 애트리뷰트 값들을 수정합니다.
01. INSERT문에 대하여
INSERT문은 기존의 릴레이션에 투플을 추가합니다. 참조되는 릴레이션에 투플이 추가되는 경우에는
참조 무결성 제약조건의 위배가 발생하지 않으나 참조하는 릴레이션에 투플이 추가되는 경우에는
참조 무결성 제약조건을 위배할 수 있습니다.
INSERT문은 릴레이션에 한 번에 한 투플씩 추가하는 것과 한 번에 여러 개의 투플들을
추가할 수 있는 것으로 구분합니다. 한 번에 한 투플씩 추가하는 INSERT문의 구문은 다음과 같습니다.
이 구문에서 애트리뷰트들이 리스트를 생략하는 경우에는 VALUES절의 값들의 순서가
릴레이션 내의 애트리뷰트들의 순서와 일치해야 합니다.
INSERT
INTO 릴레이션( 애트리뷰트1, ..., 애트리뷰트 n )
VALUES ( 값1, ..., 값 n ) ;
릴레이션을 정의할 때의 애트리뷰트들의 순서대로, 모든 애트리뷰트에 값을 명시하여
INSERT문을 작성하면 INSERT문에서 애트리뷰트 이름들을 생략할 수 있지만 좋은 습관은 아닙니다.
왜냐면 나중에 릴레이션에 어떤 애트리뷰트가 추가되면 그 INSERT문이 더 이상 동작하지 않기 때문입니다.
릴레이션에 한 번에 여러 개의 투플들을 입력하는 INSERT문의 구문은 다음과 같이 표현합니다.
INSERT문 내에 SELECT문의 수행 결과로 검색된 투플들이 한꺼번에 릴레이션에 입력됩니다.
이런 형식의 구문에는 VALUES절이 사용되지 않습니다.
INSERT
INTO 릴레이션( 애트리뷰트1, ..., 애트리뷰트 n )
SELECT ... FROM ... WHERE ... ;
다른 릴레이션으로부터 SELECT 한 결과를 어떤 릴레이션에 한꺼번에 추가하는 것이
아니고, 직접 다수의 투플을 추가하려면 투플 개수만큼의 INSERT문을 일일이 작성해야 합니다.
데이터베이스 외부에서 릴레이션에 다수의 투플을 쉽게 추가할 수 있도록
대부분의 DBMS들은 데이터 적재 명령(예, copy 명령)을 제공합니다.
02. DELETE문에 대하여
삭제 연산은 한 릴레이션으로부터 한 개 이상의 투플들을 삭제합니다.
참조되는 릴레이션의 삭제 연산의 결과로 참조 무결성 제약조건이 위배될 수 있으나,
참조하는 릴레이션에서 투플을 삭제하면 참조 무결성 제약조건을 위배하지 않습니다.
DELETE문의 구문은 다음과 같이 표현합니다. FROM절에 명시한 릴레이션으로부터
WHERE절을WHERE 절을 만족하는 투플들을 삭제합니다. WHERE 절을 생략하면 한 릴레이션에서 모든 투플들이
삭제되어 빈 릴레이션이 되므로 매우 신중하게 사용해야 합니다.
DELETE
FROM 릴레이션
[ WHERE 조건 ] ;
❶ DELETE문
Q. DEPARTMENT 릴레이션에서 4번 부서를 삭제하세요.
DELETE FROM DEPARTMENT
WHERE DEPTNO = 4 ;
실제로 어떤 투플들이 삭제되는가를 알아보기 위해서, DELETE문을 수행하기 전에 먼저
적절한 WHERE절을 포함한 SELECT문을 수행해보는 것을 권장합니다.
03. UPDATE문에 대하여
UPDATE문은 한 릴레이션에 들어 있는 투플들의 애트리뷰트 값들을 수정합니다.
UPDATE문은 수정된 애트리뷰트가 기본 키나 외래 키에 속하지 않는 한 어떤 무결성 제약조건도
위반하지 않습니다. 그러나 기본 키나 외래 키에 속하는 애트리뷰트의 값이 수정되면
참조 무결성 제약조건을 위배할 수 있습니다. 외래 키에 속하는 애트리뷰트의 값을 수정하는
UPDATE문은 수정 후의 새로운 외래 키 값이 참조되는 릴레이션에 존재하는
어떤 투플과 대응될 때에는 참조 무결성을 위배하지 않습니다.
기본 키의 값을 수정하는 UPDATE문은 기존의 투플을 삭제한 후에 새로운 투플을 삽입한 것과 개념적으로
동등하므로 기본 키가 삭제되었을 때 나타날 수 있는 문제가 UPDATE문에서도 발생할 수 있습니다.
UPDATE문의 구문은 다음과 같습니다.
WHERE절을 만족하는 한 개 이상의 투플들이 해당 릴레이션에서 수정됩니다. 이는 생략할 수 있습니다.
WHERE절을 생략하면 릴레이션 내의 모든 투플들이 수정됩니다.
하나의 UPDATE문에서 여러 애트리뷰트들의 값을 수정할 수 있습니다.
또한 값 대신에 식을 사용할 수 있습니다.
UPDATE 릴레이션
SET 애트리뷰트 = 값 또는 식[, ... ]
[ WHERE 조건 ] ;
❶ UPDATE문
Q. 사원번호가 2106인 사원의 소속 부서를 3번 부서로 옮기고, 급여를 5% 올리세요.
UPDATE EMPLOYEE
SET DNO = 3, SALARY = SALARY * 1.05
WHERE EMPNO = 2106 ;
EMPNO | EMPNAME | TITLE | MANAGER | SALARY | DNO |
2106 | 김창섭 | 대리 | 1003 | 2625000 | 3 |
3426 | 박영권 | 과장 | 4377 | 3000000 | 1 |
3011 | 이수민 | 부장 | 4377 | 4000000 | 3 |
1003 | 조민희 | 과장 | 4377 | 3000000 | 2 |
3427 | 최종철 | 사원 | 3011 | 1500000 | 3 |
1365 | 김상원 | 사원 | 3426 | 1500000 | 1 |
4377 | 이성래 | 사장 | ⋀ | 5000000 | 2 |
'💕IT 공부하기 > 데이터베이스' 카테고리의 다른 글
데이터베이스 설계와 개요에 대하여 (0) | 2022.08.31 |
---|---|
트리거(trigger)와 주장(assertion) 그리고 내포된 SQL (0) | 2022.08.30 |
SQL의 SELECT문에 대하여(3) (0) | 2022.08.27 |
SQL의 SELECT문에 대하여(2) (0) | 2022.08.26 |
SQL의 SELECT문에 대하여(1) (0) | 2022.08.25 |