DML : 데이터의 삽입/갱신/삭제

Jane의 study note.·2022년 12월 2일
0

SQL (Oracle)

목록 보기
7/11

01 DML이란?

데이터를 직접 조작하는 방법
SELECT 문은 주로 데이터 출력을 위해 사용,
DML 명령어는 데이터를 직접 조작하는 데 사용됨

※ 실무 활용 팁 p192
1. 서브쿼리와 WHERE절을 분리해서 조회한 후 DML을 실행한다.
=> 먼저 서브쿼리만 조회해서 의도한 결과가 나오는지 확인
2. DML을 실행한 후 커밋은 필수(커밋전에 DML작업이 잘못되었다면 롤백(되돌리기,UNDO,REDO)실행)
3. DML을 잘못 실행하여 커밋했다면 데이터베이스 관리자(DBA)에게 도움을 요청한다.

02 INSERT : 행 삽입하기

[예제 8-1]departments 테이블에 department_id가 271, department_name이 Sample_Dept,
manager_id가 200, location_id가 1700인 행을 삽입해 보세요.
VALUES

INSERT INTO departments ( department_id, department_name, manager_id, location_id)
VALUES
(271, 'Sample_Dept', 200, 1700);
=> 컬럼을 다 명시안하고 values절에 열순서에 맞게 데이터값만 기술해도 새로운 행 삽입됨
(그러나 열이 누락되거나 데이터 값이 일치하지 않아 발생하는 오류의 발생부분을 알기 위해 가급적 열 이름을
모두 기술하는 것을 권장함 p186)

p184
[예제 8-2]departments 테이블에 department_id가 272, department_name이 Sample_Dept,
manager_id가 200, location_id가 1700인 행을 삽입해 보세요.

INSERT INTO departments
VALUES
(272, 'Sample_Dept', 200, 1700);

p185, departments 테이블의 속성과 제약 조건
=> DML 명령어를 사용할 때 주의를 기울여야 하는 부분
INSERT INTO departments
VALUES
(271, Sample_Dept, 200, 1700);
=> SQL 오류 "column not allowed here", Sample_Dept에 ''없어서 생긴 오류

p186, DML 명령어를 최종적으로 데이터베이스에 반영하려면 커밋(commit, 영구적으로 저장)을
해야함, 커밋하기 전까지 실행한 모든 DML은 데이터베이스에 반영되지 않는다.
commit;
=> or 상단의 DB의 모양의 체크 표시된 아이콘 클릭 or F11
비정상으로 셧다운되면 DB에 변경된 데이터는 반영되지 않음

03 UPDATE : 행 갱신하기

[예제 8-3] departments 테이블에 department_name이 'Sample_Dept'인 행을 찾아서 manager_id를 201,
location_id를 1800으로 변경하세요.

UPDATE departments
SET manager_id = 201,
location_id = 1800
WHERE department_name = 'Sample_Dept';

p188,
[예제 8-4] departments 테이블에서 department_id가 40인 manager_id와 location_id의 데이터값을
찾아내고 department_name이 'Sample_Dept'인 행의 manager_id와 location_id를 찾아낸 데이터 값과
동일하게 변경하세요.

UPDATE departments
SET (manager_id, location_id) = ( SELECT manager_id, location_id
FROM departments
WHERE department_id = 40)
WHERE department_name = 'Sample_Dept';

p189
UPDATE departments
SET department_id = null
WHERE department_name = 'Sample_Dept';
=> 업데이트 오류 :"cannot update (%s) to NULL"
제약조건에 위배되는 데이터 값 갱신하려할 때 , department_id는 기본 키라 null값을 가질 수 없음

04 DELETE : 행 삭제하기

WHERE절의 조건식을 추가하지 않으면 모든 행 데이터가 삭제됨

[예제 8-5]departments 테이블에서 department_name이 'Sample_Dept'인 행을 삭제하세요.

DELETE FROM departments
WHERE department_name = 'Sample_Dept';

서브쿼리를 이용한 삭제
DELETE FROM departments
WHERE department_id IN (SELECT department_id
FROM departments
WHERE department_name = 'Sample_Dept');

0개의 댓글