DELETE 문을 사용하면 테이블의 기존 행을 삭제할 수 있다.
DELETE
FROM {table | view | subquery} [t_alias]
WHERE condition;
아래 쿼리는 t1 테이블에서 10번 부서를 삭제한다.
DELETE FROM T1 WHERE DEPTNO = 10;
아래는 T1 테이블을 조회한 결과다.
10번 부서가 삭제된 것을 확인할 수 있다.
SELECT * FROM T1;
아래 쿼리는 사원이 존재하지 않는 부서를 삭제한다.
DELETE
FROM T1 A
WHERE NOT EXISTS (SELECT 1 FROM EMP X WHERE X.DEPTNO = A.DEPTNO);
WHERE 절을 기술하지 않으면 테이블의 모든 행이 삭제된다.
DELETE FROM T1;
[실수 방지]
UPDATE 문과 DELETE 문은 수행하기 전에 갱신 또는 삭제할 행을 반드시 확인해야 한다.
먼저 SELECT 문을 작성하고, SELECT 문을 UPDATE 문이나 DELETE 문으로 변경하는 방식을 사용해야 실수를 방지할 수 있다.
아래 쿼리는 SELECT 문으로 갱신할 행과 값을 확인한 후, UPDATE 문으로 변경하는 과정을 보여준다.
강조한 부분을 변경하면 된다.
SELECT A.*
, (SELECT SUM (X.COMM)
FROM EMP X
WHERE X.DEPTNO = A.DEPTNO)
FROM T1 A
WHERE EXISTS (SELECT 1
FROM EMP X
WHERE X.DEPTNO = A.DEPTNO);
UPDATE T1 A
SET A.SAL = (SELECT SUM (X.SAL)
FROM EMP X
WHERE X.DEPTNO = A.DEPTNO)
WHERE EXISTS (SELECT 1
FROM EMP X
WHERE X.DEPTNO = A.DEPTNO);
DELETE 문도 SELECT 문으로 삭제할 행을 확인한 후 DELETE 문으로 변경하는 편이 바람직하다.
SELECT A.*
FROM T1 A
WHERE NOT EXISTS (SELECT 1
FROM EMP X
WHERE X.DEPTNO = A.DEPTNO);
DELETE
FROM T1 A
WHERE NOT EXISTS (SELECT 1
FROM EMP X
WHERE X.DEPTNO = A.DEPTNO);
불친절한 SQL 프로그래밍저자정희락출판디비안(DBian)발매2018.09.10.
'IT' 카테고리의 다른 글
[오라클, Oracle] DML 문 - DML 에러 로깅 (0) | 2020.05.04 |
---|---|
[오라클, Oracle] DML 문 - MERGE 문 (0) | 2020.05.04 |
[오라클, Oracle] DML 문 - UPDATE 문 (0) | 2020.05.02 |
[오라클, Oracle] DML 문 - INSERT 문 (0) | 2020.05.02 |
[오라클, Oracle] PIVOT 절과 UNPIVOT 절 - 활용 예제 (0) | 2020.05.02 |