DELETE 명령문은 오라클에서 데이터를 삭제할 때 사용되는 기본 문법입니다.
해당 내용까지 학습하면 DB작업 시 기본이 되는 읽기(SELECT), 쓰기(INSERT), 수정(UPDATE), 삭제(DELETE)를 전부 학습하게 되는 시간이니 만큼 집중하여 포스팅을 읽고 실습해주시면 감사하겠습니다.
해당 명령문의 사용방법을 익히기 위해서 샘플로 활용할 데이터베이스는 오라클 설치 시 기본으로 제공되는
scott 계정에 있는 테이블을 기반으로 해서 작성하도록 하겠습니다.
1. DELETE 명령어
DELETE문은 오라클에서 데이터를 삭제할 때 사용하는 명령어입니다. 해당 명령어의 경우 기존에 있는 데이터를 삭제하기 위해서 사용되기 때문에 해당 명령문을 사용하면 데이터를 복구하는데 많은 어려움이 따르니 해당 명령어를 입력할 때는 더더욱 신중하게 작업하시길 당부드립니다.
(1) 문법
DELETE 테이블명
WHERE 조건;
DELETE문의 기본 문법입니다.
DELETE문 바로 옆에는 삭제 대상이 되는 테이블명을 작성합니다.
WHERE은 조건을 작성하는 부분입니다. 조건은 다양하게 설정할 수 있지만 일반적으로는 컬럼 = 값과 같이 특정 컬럼에 해당하는 값을 작성합니다.
2. 데이터 삭제하기
실제 예제를 진행해보면서 DELETE문의 사용방법에 대해서 알아보도록 하겠습니다.
(2-1) 데이터 삭제하기
데이터를 삭제하기전 삭제 대상이 되는 샘플데이터를 만들어 보도록 하겠습니다.
아래의 SQL문을 실행해주세요.
INSERT INTO EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES(9990, 'TOM', 'ANALYST', 9990, SYSDATE, 5000, 10, 20);
COMMIT;
해당 SQL문 하단을 보면 COMMIT; 이라는 키워드가 있습니다. COMMIT명령어를 실행하면 INSERT문의 실행을 최종적으로 ORACLE에 적용한다는 의미 정도로 이해해주시면 감사하겠습니다. (추후 ROLLBACK과 함께 포스팅할게요!)
해당 SQL문을 실행한 뒤 다음의 명령어를 통해 데이터가 정상적으로 적용되어 있음을 확인해보겠습니다.
SELECT *
FROM EMP
WHERE EMPNO = 9990;
INSERT문이 정상적으로 적용되어 있다면 해당 SQL문을 실행했을 때 아래의 결과를 확인해볼 수 있습니다.
이제 이렇게 추가된 데이터를 삭제해보도록 하겠습니다. 아래의 SQL문을 확인해주세요.
DELETE FROM EMP
WHERE EMPNO = 9990;
소스코드를 살펴보도록 하겠습니다.
DELETE FROM EMP : EMP 테이블에 있는 데이터를 삭제하려고 합니다.
WHERE EMPNO = 9990 : 삭제 대상이 되는 데이터는 EMPNO값이 9990입니다.
이때 조건에 해당하는 WHERE 절을 작성하지 않을 경우 삭제의 대상이 되는 테이블인 EMP 테이블 내의 모든 데이터가 삭제됩니다. (조건이 없으므로)
따라서 의도하여 특정 테이블의 데이터를 전부 삭제하지 않는 한 DELETE에는 WHERE을 꼭 사용해주셔야 합니다.
(2-2) 데이터 삭제하기 실행결과
위에서 작성한 SQL문을 정상적으로 실행했으면 위와 같이 1 행이 삭제되었다는 메시지를 확인할 수 있습니다.
이제 해당 데이터가 정말로 삭제된 것이 맞는지 조회를 해봐야겠죠? 아래 SQL문은 실행해주세요.
SELECT *
FROM EMP
WHERE EMPNO = 9990;
해당 SQL문을 실행시키면 검색되는 데이터를 확인할 수 없습니다.
즉, 의도한 대로 정상적으로 데이터가 삭제되었습니다.
3. 다중 데이터 삭제, 다중 조건
DELETE문의 경우 위와 같이 검색조건에 따라 1건의 데이터만 삭제할 수 있고 여러 건의 데이터는 물론 삭제 대상이 되는 테이블의 전체 데이터도 삭제할 수 있습니다.
이번에는 여러 조건을 활용하여 여러 개의 데이터를 삭제해보도록 하겠습니다.
(3-1) 다중 데이터 삭제
먼저 삭제 대상이 될 데이터부터 추가해보도록 하겠습니다.
아래의 SQL문을 실행시켜주세요.
INSERT INTO EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES(9991, 'LINDA', 'TEST', 9991, SYSDATE, 5000, 10, 20);
INSERT INTO EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES(9992, 'JUN', 'TEST', 9992, SYSDATE, 5000, 10, 20);
COMMIT;
해당 SQL문을 살펴보면 총 2개의 데이터를 추가하게 되는데요.
데이터가 정상적으로 추가되었는지 아래의 SQL문을 통해 확인해보도록 하겠습니다.
SELECT *
FROM EMP
WHERE JOB = 'TEST';
이번에 새롭게 추가한 데이터를 보면 JOB의 값이 'TEST'로 동일한 것을 확인할 수 있는데요.
그렇기 때문에 추가한 데이터를 한꺼번에 조회하기 위해서 WHERE 조건에 JOB = 'TEST'라는 값을 사용해서 데이터가 정상적으로 추가됨을 확인해보았습니다.
이제 이렇게 추가된 2개의 데이터를 DELETE문을 통해 한꺼번에 지워보도록 하겠습니다.
데이터를 조회하거나(SELECT), 추가하거나(INSERT), 수정하는 것(UPDATE) 모두 중요하지만 무엇보다도 데이터를 삭제(DELETE)할 때는 WHERE절에 포함되는 조건을 유심히 살펴볼 필요가 있습니다.
특히 SELECT문과 DELETE문을 살펴보면 그 구조가 상당히 유사함을 확인해볼 수 있는데요.
아래의 SQL을 볼까요?
SELECT *
FROM EMP
WHERE JOB = 'TEST';
DELETE
FROM EMP
WHERE JOB = 'TEST';
해당 SQL을 보면 첫 번째줄에 해당하는 SELECT *와 DELETE 부분만 차이가 있고, FROM 이하는 동일한 구조를 보이고 있음을 확인할 수 있습니다. 여기서 우리가 생각해볼 수 있는점은 SELECT문을 통해 내가 삭제하고자 하는 데이터를 충분히 살펴보고, 삭제를 해도 되겠다는 판단이 들때 첫번째 줄에 해당하는 SELECT 문만 바꾸면 동일한 결과값을 얻을 수 있다는 점인데요. 이제 해당 내용을 바탕으로 DELETE문을 만들어 보겠습니다.
추가된 데이터를 보면 다른 데이터와 다른 게 JOB의 값이 'TEST'임을 확인할 수 있습니다. 그리고 이때 사용되는 JOB의 값은 이번에 추가된 2개의 데이터 외에는 없는 것을 확인할 수 있는데요. 전체 데이터를 보면 아래와 같습니다.
(데이터의 내용은 차이가 있을 수 있습니다.)
다음은 SCOTT계정에 있는 EMP 테이블의 데이터입니다. 아까 말씀드린 바와 같이 JOB의 값이 TEST인 데이터는 2개만 유일합니다. 따라서 해당 값만을 가지고도 충분히 원하는 DELETE문을 만들어 볼 수 있을 것 같은데요.
아래의 SQL문을 작성한 후 실행해보도록 하겠습니다.
DELETE FROM EMP
WHERE JOB = 'TEST';
(3-2) 다중 데이터 삭제 실행결과
해당 SQL문을 실행하면 2개 행이 삭제되었다는 메시지를 확인할 수 있습니다.
우리가 조건을 걸었던 JOB의 값이 TEST인 데이터는 2건만 있었기 때문에 의도한 대로 2개의 데이터가 정상적으로 삭제됨을 확인할 수 있습니다. 이제 SELECT문을 통해 정상적으로 데이터가 삭제되어 있는지 확인해보도록 하겠습니다.
SELECT *
FROM EMP;
실행결과를 살펴보면 JOB의 값이 'TEST'인 데이터는 모두 지워졌음을 확인할 수 있습니다.
4. DELETE문 작성 시 참고사항
지금까지 SELECT, INSERT, UPDATE, DELETE문까지 배웠습니다. 해당 내용만 알고 있어도 ORACLE의 다양한 데이터들을 직접 컨트롤할 수 있습니다. 마지막으로 DELETE문을 작성할 때 참고사항을 작성하는 것으로 이번 포스팅을 마치도록 하겠습니다.
(4-1) SELECT문을 적극 활용
DELETE문은 데이터를 직접적으로 삭제하는 명령어입니다. 그렇기 때문에 다른 명령문을 사용하는 것보다 더 많은 주의를 필요로 합니다. 그렇기 때문에 DELETE문을 사용할 때 '이 조건만 있으면 삭제할 때 큰 문제가 되지 않아.' 라던가 '내가 이 테이블에 있는 데이터는 다 알고 있어! 확인하지 않아도 된다니깐?' 이런 생각은 가급적 멀리하시고, DELETE문을 작성하기 전에 반드시 SELECT문을 통해 삭제 대상이 되는 데이터를 먼저 확인하는 습관을 들이시는 것을 권해드립니다.
(4-2) 오타를 만드세요.
해당 내용은 INSERT, UPDATE문과 마찬가지로 DELETE문도 일부러 오타를 내서 실수로 실행되지 않도록 주의해주세요. 저의 경우에는 DELETE문을 작성할 때 꼭 SELECT문으로 DELETE문을 만들어두곤 합니다. 위에서도 언급했듯이 2개의 구문에는 큰 차이점이 없기 때문에 가급적 DELETE문이 실수로라도 실행되지 않도록 많은 노력을 하고 있습니다.
(4-3) 첫 번째 DELETE는 최소한의 범위로
해당 내용은 UPDATE문 포스팅에서도 언급한 내용입니다. DELETE문을 직접적으로 사용한다고 하면 보통 여러 건(또는 대량)의 데이터를 한꺼번에 지워야 할 경우에 사용하게 될 경우가 높습니다. 특히 DELETE문은 UPDATE문과는 다르게 한번 잘못 실행되면 지워진 데이터를 찾는데 상당한 어려움을 겪게 됩니다. (UPDATE문의 경우 데이터를 찾을 수라도 있죠.. ㅎ) 그렇기 때문에 원하는 DELETE문을 작성했다면 조금 더 검색조건을 좁혀서 1건의 DELETE문이 의도한 대로 실행되는지를 확인한 뒤 작업을 진행하는 것을 권해드립니다.
'DB > Oracle' 카테고리의 다른 글
[ORACLE] [오라클 문법] 06. CREATE TABLE(테이블 생성) 사용방법 & 예제 (0) | 2022.04.07 |
---|---|
[ORACLE] [오라클 문법] 04. UPDATEA문(수정) 사용방법 & 예제 (0) | 2022.03.27 |
[ORACLE] [오라클 문법] 03. INSERT문(추가) 사용방법 & 예제 (0) | 2022.03.26 |
[ORACLE] [오라클 문법] 02. SELECT문(조회) 사용방법 & 예제 (0) | 2022.03.25 |
[ORACLE] [오라클 문법] 01. DESC문 사용방법 & 예제 (0) | 2022.03.24 |