3) DELETE: 행 삭제
문법은 아래와 같다.
delete
[from] table_name -- 서브쿼리 못 옴
[where 조건]; -- 서브쿼리 올 수 있음
조건절 생략하면 전체 행 삭제
from절에 서브쿼리가 못 오는 이유는, 인라인뷰는 가상의 테이블이므로 가상의 테이블을 지우라는 의미가 될 수 없기 때문이다.
where의 조건절을 생략하면 전체 행 삭제가 된다.
예를 들어 emp_t11에서 deptno=1000인 부서를 삭제하라고 한다면
delete
from emp_t11
where deptno = 1000
commit;
하면 된다.
예제를 하나 풀어보자
student_t1 테이블에서 이미경과 같은 나이(출생년도가 같은)의 학생 정보를 삭제하여라
추가 예제이다.
student_t1 테이블에서 몸무게가 학년 별 평균 몸무게보다 많이 나가면 삭제하여라
★ TRUNCATE / DELETE / DROP 차이점
1. 복구 여부에 따라
- 복구 가능:drop(recyclebin), delete(undo, redo)
- 복구 불가: truncate
2. 객체 삭제 여부 ★
- 객체 삭제: drop
- 객체 삭제 안함: delete, truncate
3. 수행 속도(delete vs. truncate), 데이터가 많을수록 대체적으로
- 빠름: truncate (기록하지 않고 삭제하므로)
- 느림:delete(redo/undo 기록 후 삭제하므로)
4. 데이터 삭제 범위
- 일부 삭제 불가: drop, truncate
- 일부 가능: delete
※ 참고: delete 복구
select * from student_t1 --6건
가. delete 전 데이터 확인
select *
from student_t1 as of timestamp(to_timastamp('2023/11/08 15:25', 'YYYY/MM/DD HH24:MI')); --15건
나. 차집합을 구하기 보다는 원래 테이블 삭제(truncate 불가: 테이블 삭제 전 데이터가 원본 데이터임. 이걸 다시 복구하려고 함. 6건 데이터가 남아있는데 중복된 걸 제거하거나 하면 쿼리 다시 짜야해서 번거로우니 그냥 delete로 데이터 지워버리고 새롭게 raw data라고 판단이 되는 데이터를 넣는 것. 근데 truncate 하는 순간 as of timestamp로 가져오기 어려움)
delete from student_t1;
다. 데이터 삭제 전 테이블을 조회 후 현 테이블에 입력
insert into student_t1
select *
from student_t1 as of timestamp(to_timestamp('2023/11/08 15:25', 'YYYY/MM/DD HH24:MI'));
commit;
위 과정을 truncate를 했을 때로 테스트해보면
--truncate 시도
truncate table student_t1;
select * from student_t1;
select *
from student_t1 as of timestamp(to_timestamp('2023/11/08 15:40', 'YYYY/MM/DD HH24:MI')); -- 조회불가
ORA-01466 테이블 정의가 변경되었습니다. 데이터를 읽을 수 없습니다.
★이전 시점으로 돌아가는 select문은 그 시점 사이에 DDL(Truncate포함)이 수행된 경우라면 그 이전으로 돌아갈 수 없음.
'배우기 > 복습노트[oracle sql]' 카테고리의 다른 글
[실습문제] 2023. 11. 8.(수) 문제 풀이(4문제) (0) | 2023.11.10 |
---|---|
[복습] SQL | Oracle SQL의 분류(DDL, DML, DCL, TCL, DQL) 중 DML의 MERGE + 복습후기(20231108) (0) | 2023.11.10 |
[복습] SQL | Oracle SQL의 분류(DDL, DML, DCL, TCL, DQL) 중 DML의 UPDATE (0) | 2023.11.09 |
[복습] SQL | Oracle SQL의 분류(DDL, DML, DCL, TCL, DQL) 중 DML의 INSERT (0) | 2023.11.09 |
[실습문제] 2023. 11. 7.(화) 문제 풀이(3문제) (0) | 2023.11.09 |