SQL Delete
SQL DELETE: 데이터베이스에서 데이터 삭제
SQL DELETE 문은 테이블에서 하나 이상의 행(row)을 삭제할 때 사용됩니다. 특정 조건을 만족하는 데이터만 삭제하거나, 조건을 생략하여 테이블의 모든 데이터를 삭제할 수 있습니다. DELETE는 데이터 자체를 삭제하지만, 테이블의 구조나 열은 그대로 유지됩니다.
1. 기본 SQL DELETE 문법
DELETE 문은 다음과 같은 구조를 가집니다:
DELETE FROM 테이블이름
WHERE 조건;
- 테이블이름: 데이터를 삭제할 테이블의 이름입니다.
- WHERE 조건: 삭제할 데이터를 선택하는 조건입니다. 이 조건을 생략하면 테이블의 모든 데이터가 삭제됩니다.
2. SQL DELETE 예제
2.1 특정 행 삭제
다음은 employees
테이블에서 id
가 1인 직원을 삭제하는 예제입니다.
DELETE FROM employees
WHERE id = 1;
이 쿼리는 id
가 1인 행을 삭제합니다.
결과 예시:
id | name | department | salary |
---|---|---|---|
2 | Jane Roe | HR | 5000 |
3 | Alice | Sales | 5500 |
2.2 여러 조건을 사용하여 삭제
다음은 employees
테이블에서 Sales
부서에 속한 직원 중 급여가 5,000 이하인 직원을 삭제하는 예제입니다.
DELETE FROM employees
WHERE department = 'Sales' AND salary <= 5000;
이 쿼리는 Sales
부서에 속하고, 급여가 5,000 이하인 직원을 삭제합니다.
결과 예시:
id | name | department | salary |
---|---|---|---|
2 | Jane Roe | HR | 5000 |
3 | Alice | Sales | 5500 |
3. DELETE와 WHERE 절
WHERE 절을 사용하여 삭제할 데이터를 필터링할 수 있습니다. WHERE 절을 생략하면 테이블의 모든 행이 삭제되므로 주의해야 합니다.
3.1 특정 조건을 만족하는 행 삭제
다음은 부서가 HR
인 모든 직원을 삭제하는 예제입니다.
DELETE FROM employees
WHERE department = 'HR';
결과 예시:
id | name | department | salary |
---|---|---|---|
3 | Alice | Sales | 5500 |
3.2 모든 행 삭제
WHERE 절 없이 DELETE
를 사용하면 테이블의 모든 행이 삭제됩니다. 테이블의 구조는 그대로 유지되지만, 데이터는 완전히 삭제됩니다.
DELETE FROM employees;
결과 예시:
id | name | department | salary |
---|---|---|---|
4. DELETE와 JOIN 사용
DELETE
문은 JOIN 절을 사용하여 여러 테이블을 결합하고, 그 결과에 따라 특정 테이블에서 데이터를 삭제할 수 있습니다. 이를 통해 복잡한 조건을
만족하는 행을 삭제할 수 있습니다.
예제: 두 테이블을 조인하여 삭제
다음 쿼리는 employees
테이블과 departments
테이블을 조인하여, 특정 부서에 속한 직원을 삭제하는 예제입니다.
DELETE e
FROM employees e
JOIN departments d ON e.department_id = d.id
WHERE d.department_name = 'Sales';
이 쿼리는 Sales
부서에 속한 직원들을 삭제합니다.
5. DELETE와 LIMIT 사용
일부 데이터베이스 시스템(MySQL 등)에서는 LIMIT 절을 사용하여 삭제할 행의 개수를 제한할 수 있습니다. 이를 통해 한번에 삭제되는 행의 수를 제어할 수 있습니다.
예제: 첫 2개 행 삭제
DELETE FROM employees
WHERE department = 'Sales'
LIMIT 2;
이 쿼리는 Sales
부서에서 처음 두 개의 행만 삭제합니다.
6. DELETE와 ORDER BY 사용
일부 데이터베이스(MySQL 등)에서는 ORDER BY와 LIMIT을 결합하여 특정 기준으로 정렬된 데이터를 선택적으로 삭제할 수 있습니다.
예제: 급여가 높은 순으로 상위 1명의 직원 삭제
DELETE FROM employees
ORDER BY salary DESC
LIMIT 1;
이 쿼리는 급여가 가장 높은 직원 한 명을 삭제합니다.
7. DELETE와 TRUNCATE의 차이점
DELETE와 TRUNCATE는 테이블에서 데이터를 삭제하는 방법이지만, 동작 방식에 차이가 있습니다.
- DELETE: 선택적으로 행을 삭제할 수 있으며, WHERE 절을 사용하여 특정 행만 삭제할 수 있습니다. 트랜잭션 제어가 가능하며, 각 행이 하나씩 삭제됩니다.
- TRUNCATE: 테이블의 모든 행을 삭제하지만, 트랜잭션을 제어할 수 없고, 조건을 지정할 수 없습니다. 테이블을 비우지만 테이블의 구조는 유지되며, 빠르게 처리됩니다.
DELETE 예제:
DELETE FROM employees WHERE department = 'HR';
이 쿼리는 HR
부서에 속한 직원만 삭제합니다.
TRUNCATE 예제:
TRUNCATE TABLE employees;
이 쿼리는 employees 테이블의 모든 데이터를 삭제하지만, 테이블 구조는 그대로 유지됩니다.
8. 실전 예제
예제 1: 특정 부서의 직원 삭제
DELETE FROM employees
WHERE department = 'HR';
이 쿼리는 HR 부서에 속한 모든 직원을 삭제합니다.
예제 2: 급여가 3,000 이하인 직원 삭제
DELETE FROM employees
WHERE salary <= 3000;
이 쿼리는 급여가 3,000 이하인 직원들을 삭제합니다.
예제 3: 특정 날짜 이전에 고용된 직원 삭제
DELETE FROM employees
WHERE hire_date < '2020-01-01';
이 쿼리는 2020년 1월 1일 이전에 고용된 직원들을 삭제합니다.
예제 4: 모든 데이터를 삭제
DELETE FROM employees;
이 쿼리는 employees 테이블에서 모든 데이터를 삭제합니다.
요약
SQL DELETE 문은 테이블에서 데이터를 삭제하는 데 사용되며, WHERE 절을 통해 조건을 지정하여 특정 데이터를 선택적으로 삭제할 수 있습니다. JOIN, LIMIT, ORDER BY와 같은 절을 활용하여 더욱 정교하게 데이터를 삭제할 수 있습니다. DELETE는 테이블의 데이터를 삭제하지만, 테이블 구조는 그대로 유지됩니다. 데이터를 삭제할 때는 주의가 필요하며, 특히 WHERE 절 없이 DELETE를 사용할 경우 테이블의 모든 데이터가 삭제될 수 있으므로 신중해야 합니다.