SQL의 DELETE 문은 데이터베이스 테이블에서 행(row)을 삭제하는 데 사용됩니다. WHERE 절을 함께 사용하면 어떤 레코드를 삭제할지 지정할 수 있으며, WHERE 절을 생략하면 테이블의 모든 행이 삭제되므로 각별히 주의해야 합니다.
데이터베이스에서 행을 삭제하는 작업은 매우 흔합니다. 예를 들어, 사용자가 웹사이트에서 회원 탈퇴를 결정했다면 해당 사용자의 데이터를 사용자 데이터베이스에서 제거해야 할 것입니다.
이 글에서는 SQL DELETE 문을 사용하여 테이블에서 원하는 행을 삭제하는 방법을 예제와 함께 자세히 살펴보겠습니다.
SQL 레코드 기본 개념 복습
데이터베이스는 여러 개의 테이블로 구성되며, 각 테이블은 고유한 레코드(record)를 저장합니다.
예를 들어, 회사 데이터베이스에는 직원, 공급업체, 부서, 급여 등에 관한 테이블이 포함될 수 있습니다. 각 테이블에는 개별 항목인 레코드가 저장되는데, 급여 테이블에는 직원에게 지급된 급여 내역 목록이 담기는 식입니다.
테이블에 새 레코드를 추가할 때는 SQL INSERT 문을 사용합니다. 이를 통해 원하는 컬럼에 특정 값을 가진 레코드를 추가할 수 있습니다.
다음은 SQL INSERT 명령문의 사용 예시입니다:
INSERT INTO company_departments (name, department_id) VALUES ('Payroll', 5);
그렇다면 테이블에서 행을 제거하려면 어떻게 해야 할까요? 이때 DELETE 문을 사용하면 됩니다.
SQL DELETE 문으로 테이블의 행 삭제하기
SQL DELETE 문은 테이블에서 하나 이상의 행을 제거합니다. 이 문장은 두 가지 요소로 구성됩니다. 첫째, DELETE 문을 적용할 테이블 이름을 반드시 지정해야 하고, 둘째, 선택적으로 레코드가 삭제되기 위해 충족해야 하는 조건(WHERE 절)을 지정할 수 있습니다.
DELETE 문의 기본 문법은 다음과 같습니다:
DELETE FROM table_name WHERE conditions_are_met;
주의할 점은 DELETE 문에는 "실행 취소(undo)" 기능이 없다는 것입니다. 한 번 데이터베이스에서 삭제된 레코드는 복구할 수 없습니다.
WHERE 절을 사용하면 어떤 레코드를 삭제할지 지정할 수 있습니다. WHERE 절의 문법은 SQL INSERT나 UPDATE 같은 다른 명령문에서 사용하는 것과 동일합니다.
또한 DELETE 문은 테이블 자체를 삭제하는 것이 아니라, 테이블 내부의 레코드만 삭제한다는 점도 기억하세요.
그럼 실제 예제를 통해 SQL DELETE 문의 동작 방식을 살펴보겠습니다.
조건에 맞는 행 삭제 예제
특정 조건에 맞는 레코드만 삭제하고 싶다면 WHERE 절을 지정하면 됩니다. 예를 들어, 마케팅(Marketing) 부서를 영업(Sales) 부서와 통합하기로 결정했다고 가정해 보겠습니다.
현재 테이블에는 다음과 같은 레코드가 저장되어 있습니다:
| name | title | department_id |
| John | Marketing | 2 |
| Rebecca | Sales | 3 |
DELETE 쿼리를 사용하여 목록에서 Marketing 부서를 삭제해 보겠습니다:
DELETE FROM company_departments WHERE title = 'Marketing';
SQL SELECT 문으로 레코드가 정상적으로 삭제되었는지 확인할 수 있습니다. 결과 집합은 다음과 같습니다:
| name | title | department_id |
| Rebecca | Sales | 3 |
Rebecca의 레코드는 삭제 조건(title = 'Marketing')에 해당하지 않으므로 영향을 받지 않았습니다. 반면 John의 레코드는 사라졌습니다. John이 마케팅 부서에 소속되어 있었기 때문입니다.
이번 예제에서는 단일 레코드를 삭제했습니다. 만약 마케팅 부서에 더 많은 직원이 있었다면 그들의 레코드도 모두 함께 삭제되었을 것입니다.
테이블의 모든 행 삭제 예제
이번에는 회사 조직 개편을 진행 중이라서 company_departments 테이블의 모든 레코드를 삭제하고 싶다고 가정해 보겠습니다. 이 경우 다음 명령을 사용할 수 있습니다:
DELETE FROM company_departments;
이 쿼리는 company_departments 테이블의 모든 행을 제거합니다. WHERE 절 없이 DELETE 명령을 실행하면 조건 검사 없이 테이블 내의 모든 행이 삭제되기 때문입니다.
삭제 후 company_departments 테이블에서 title이 'Marketing'인 직원을 조회하면 다음과 같이 아무 레코드도 남아 있지 않음을 확인할 수 있습니다:
| name | title | department_id |
(0 rows)
마무리
SQL DELETE 문은 데이터베이스에서 행을 삭제하는 데 사용됩니다. WHERE 절을 지정하지 않으면 테이블의 모든 행이 삭제되며, WHERE 절을 사용하면 삭제할 레코드를 정밀하게 제어할 수 있습니다.
이 글에서는 SQL에서 행이 생성되는 기본 원리를 살펴보고, DELETE 문을 사용하여 테이블에서 행을 삭제하는 방법을 알아보았습니다. 또한 특정 조건에 맞는 레코드만 삭제하는 방법과 테이블의 전체 데이터를 삭제하는 방법도 함께 다루었습니다.
SQL을 더 깊이 학습하고 싶다면 신뢰할 수 있는 온라인 강좌와 공식 문서를 활용해 보세요. 실제 데이터베이스 환경에서 다양한 쿼리를 직접 연습해 보는 것이 실력 향상에 큰 도움이 됩니다.