hyeonga_code
Database_47_데이터 조작과 트랜잭션_DML 데이터 조작어 DELETE 본문
-- DML_Data Management Language 데이터 조작어
-- DELETE
/*
DELETE [FROM] table
[WHERE condition];
*/
-- 필요한 경우 한 번에 여러 행을 삭제할 수 있습니다.
-- 주의사항
-- WHERE 절을 생략하면 테이블의 모든 행이 삭제됩니다.
-- WHERE 절의 조건에 해앋하는 행이 없는 경우 '0 rows deleted.'라는 메세지가 반환됩니다.
-- 서브쿼리를 사용하면 다른 테이블의 값을 기반으로 행을 삭제할 수 있습니다.
DELETE FROM departments
WHERE department_name='finance';
/*
0개 행 이(가) 삭제되었습니다.
-- Finance의 앞글자가 대문자입니다.
*/
DELETE FROM departments
WHERE department_name='Finance';
/*
<오류>-------------------------------------------------------------------------------
명령의 281 행에서 시작하는 중 오류 발생 -
DELETE FROM departments
WHERE department_name='Finance'
오류 보고 -
ORA-02292: integrity constraint (HR.EMP_DEPT_FK) violated - child record found
---------------------------------------------------------------------------------------
-- 관련 자식 레코드가 존재합니다.
-- 삭제할 수 없습니다.
-- 자식 레코드를 관련 없는 데이터로 변경 후 삭제해야 합니다.
*/
-- 관련 자식 레코드의 부서를 변경합니다.
UPDATE employees
SET department_id=70
WHERE employee_id=113;
/*
1 행 이(가) 업데이트되었습니다.
*/
DELETE FROM departments
WHERE department_name='Finance';
/*
1 행 이(가) 삭제되었습니다.
*/
SELECT * FROM departments;
/*
DP_ID DP_NAME M_ID LO_ID
-------------------------------------------------------------------
40 Human Resource ( null ) 2500
30 Purchasing ( null ) ( null )
10 Administration 200 1700
20 Marketing 201 1800
50 Shipping 124 1500
60 IT 103 1400
80 Sales 149 2500
90 Executive 100 1700
110 Accounting 205 1700
190 Contracting ( null ) 1700
70 Public Relations 100 1700
-- 100 번 부서가 삭제되었습니다.
*/
-- 커밋합니다.
COMMIT;
-- 전체 데이터 삭제하기
--1)
SELECT * FROM sales_reps;
/*
EM_ID LAST_NAME SALARY COM_PCT JOB_ID DP_ID
--------------------------------------------------------------------
174 Abel 11000 0.3 SA_REP 80
176 Taylor 8600 0.2 SA_REP 80
178 Grant 7000 0.15 SA_REP ( null )
202 Fay 6000 ( null ) MK_REP 20
*/
--2)
DELETE FROM sales_reps;
/*
4개 행 이(가) 삭제되었습니다.
*/
--3)
SELECT * FROM sales_reps;
-- 아무것도 출력되지 않습니다.
--4)
ROLLBACK;
/*
롤백 완료.
*/
SELECT * FROM sales_reps;
/*
EM_ID LAST_NAME SALARY COM_PCT JOB_ID DP_ID
--------------------------------------------------------------------
174 Abel 11000 0.3 SA_REP 80
176 Taylor 8600 0.2 SA_REP 80
178 Grant 7000 0.15 SA_REP ( null )
202 Fay 6000 ( null ) MK_REP 20
*/
-- 서브쿼리로 다른 테이블 값을 조건으로 행을 삭제
DELETE FROM employees
WHERE department_id =
( SELECT department_id
FROM departments
WHERE department_name LIKE '%Public%'); -- 30 번 부서
/*
1 행 이(가) 삭제되었습니다.
*/
SELECT * FROM employees;
-- 70번 부서 사원 데이터가 모두 삭제되었습니다.
COMMIT;
'Oracle Database' 카테고리의 다른 글
Database_49_데이터베이스 STORAGE (0) | 2023.08.06 |
---|---|
Database_48_데이터 조작과 트랜잭션_DCL 제어어 (0) | 2023.08.05 |
Database_46_데이터 조작과 트랜잭션_DML 데이터 조작어 UPDATE (0) | 2023.08.04 |
Database_45_데이터 조작과 트랜잭션_DML 데이터 조작어 (0) | 2023.08.03 |
Database_44_데이터 조작과 트랜잭션_작업 단위 (0) | 2023.08.03 |