Delete (SQL)
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
DELETE (SQL)는 SQL에서 테이블의 데이터를 삭제하는 데 사용되는 명령어이다. DELETE 문은 `DELETE FROM 테이블 이름 [WHERE 조건]` 형식을 따르며, WHERE 절에 맞는 행을 삭제한다. WHERE 절이 생략되면 테이블의 모든 행이 삭제된다. DELETE는 DML(데이터 조작 언어) 명령이므로, 트랜잭션 제어가 가능하며, 다른 테이블을 참조해야 하는 경우 서브 쿼리, USING 또는 FROM 절을 사용할 수 있다. 일반적으로 TRUNCATE TABLE보다 느리게 작동하며, 데이터베이스 트리거가 발생할 수 있다.
더 읽어볼만한 페이지
- SQL 키워드 - TRUNCATE (SQL)
TRUNCATE는 SQL에서 테이블 내의 모든 데이터를 빠르게 삭제하는 명령어로, 외래 키 제약 조건 무시, 테이블 잠금 방식, 트랜잭션 처리 방식 등 DELETE 명령어와 차이를 보이며, WHERE 절을 사용할 수 없어 테이블의 모든 행을 삭제하고, 일부 데이터베이스 시스템에서는 롤백이 불가능할 수 있다. - SQL 키워드 - Null (SQL)
Null은 SQL에서 데이터베이스 테이블 열의 값 부재를 나타내는 특별한 표식으로, 0이나 빈 문자열과 구별되며 삼진 논리와 관련된 특별한 처리 방식으로 인해 데이터베이스 설계 및 쿼리 작성 시 주의가 필요하고 SQL 표준 구현에 대한 논쟁이 존재한다.
| Delete (SQL) | |
|---|---|
| 데이터베이스 | |
| 종류 | 데이터베이스 |
| 하위 종류 | 데이터 조작 언어 |
| 일반 정보 | |
| 의미 | 테이블에서 행을 제거 |
| 관련 명령 | SELECT INSERT UPDATE |
| SQL 표준 | |
| SQL 표준 버전 | SQL:2003 이후 |
| 구문 | |
| 기본 구문 | DELETE FROM 테이블_이름 WHERE 조건; |
| 설명 | 테이블에서 조건을 만족하는 행을 삭제함. 조건이 생략되면 모든 행이 삭제됨. |
| 예시 | DELETE FROM 직원들 WHERE 부서 = '마케팅'; |
| 추가 구문 | DELETE FROM 테이블_이름; |
| 설명 | 테이블의 모든 행을 삭제함. 테이블 구조는 유지됨. |
| 주의 | "TRUNCATE TABLE 테이블_이름;" 명령은 DELETE보다 빠르지만, 롤백이 불가능함. |
| 주요 데이터베이스 시스템 지원 | |
| 지원 시스템 | MariaDB MySQL 오라클 PostgreSQL SQLite SQL 서버 |
2. 사용법
DELETE 문의 기본 구문은 다음과 같다.
sql
사람과 주소를 나타내는 간단한 데이터베이스가 있다고 가정해 보자. 여러 사람이 특정 주소에 살 수 있으며, 한 사람은 여러 주소에 살 수 있다. 이는 다대다 관계의 예시이다. 데이터베이스는 ''person''(사람), ''address''(주소), ''pa'' 세 개의 테이블로 구성되어 있다.
DELETE 문은 DML(데이터 조작 언어) 명령이므로, `COMMIT` 및 `ROLLBACK` 명령을 사용하여 트랜잭션을 제어할 수 있다.[6] `WHERE` 절을 사용하여 삭제할 레코드를 제한할 수 있으며, `WHERE` 절을 생략하면 테이블의 모든 행을 삭제한다.[6]
DELETE FROM 기본 테이블 [WHERE 조건식]
WHERE 절을 사용하여 삭제할 행을 특정 조건으로 제한할 수 있다. WHERE 절을 생략하면 테이블의 모든 행이 삭제된다.[6] DELETE 문은 결과 집합을 반환하지 않는다.[6]
DELETE 문 실행은 다른 테이블에 대한 삭제를 유발하는 트리거를 발생시킬 수 있다. 예를 들어, 외래 키로 연결된 두 테이블에서 참조되는 테이블의 행이 삭제되면, 참조 무결성을 유지하기 위해 참조하는 테이블의 해당 행도 함께 삭제될 수 있다. (Cascading constraints|전파 상수영어 참고)[6]
DELETE 시에 삭제 대상 외의 테이블을 참조하는 경우에는 서브 쿼리를 사용할 필요가 있지만, 데이터베이스에 따라 '''USING''' 또는 추가적인 '''FROM''' 절을 통해 테이블 참조를 추가할 수 있는 경우도 있다.[2][3][4]
DELETE FROM 기본 테이블 USING 보조 테이블 WHERE 기본 테이블.열 = 보조 테이블.열 ...
DELETE 문을 실행했을 때, 데이터베이스 트리거를 설정함으로써 다른 테이블도 함께 삭제할 수 있다. 예를 들어, 두 개의 테이블이 외래 키로 연결되어 있을 때, 한 테이블의 특정 행이 삭제되면 삭제된 행과 연결된 다른 테이블의 행도 트리거에 의해 자동으로 삭제되어 참조 무결성을 유지할 수 있다.[6]
3. 예제
DELETE FROM pies WHERE flavor='Lemon Meringue';
```
`pies` 테이블에서 `flavor` 열의 값이 'Lemon Meringue'인 행을 삭제한다.
```sql
DELETE FROM trees WHERE height < 80;
```
`trees` 테이블에서 `height` 열의 값이 80보다 작은 행을 삭제한다.
```sql
DELETE FROM mytable;
```
`mytable` 테이블의 모든 행을 삭제한다.
```sql
DELETE FROM mytable WHERE id IN (SELECT id FROM mytable2);
```
`mytable` 테이블에서 `id`가 `mytable2` 테이블에 존재하는 행을 서브쿼리를 사용하여 삭제한다.
```sql
DELETE FROM mytable WHERE id IN (value1, value2, value3, value4, value5);
```
`mytable` 테이블에서 `id`가 `value1`, `value2`, `value3`, `value4`, `value5` 값 중 하나와 일치하는 행을 삭제한다.
4. 연관 테이블을 사용한 예제
pid name (이름) 1 Joe (조) 2 Bob (밥) 3 Ann (앤) aid description (설명) 100 2001 Main St. (메인 스트리트 2001) 200 35 Pico Blvd. (피코 대로 35) pid aid 1 100 2 100 3 100 1 200
''pa'' 테이블은 person(사람) 테이블과 address(주소) 테이블을 연결하여 Joe (조), Bob (밥), Ann (앤)이 모두 메인 스트리트 2001에 살고, Joe (조)는 피코 대로에도 거주하고 있음을 보여준다.
Joe (조)를 데이터베이스에서 제거하려면 다음 두 개의 DELETE (삭제) 명령을 실행해야 한다.
```sql
DELETE FROM person WHERE pid=1;
DELETE FROM pa WHERE pid=1;
```
참조 무결성을 유지하기 위해 Joe (조)의 레코드는 ''person''(사람)과 ''pa''에서 모두 제거해야 한다. 데이터베이스는 트리거를 설정하여 ''person''(사람)에서 행이 삭제될 때마다 연결된 행이 ''pa''에서 삭제되도록 할 수 있다. 그러면 첫 번째 문장:
```sql
DELETE FROM person WHERE pid=1;
```
은 두 번째 문장을 ''자동으로'' 트리거한다.
```sql
DELETE FROM pa WHERE pid=1;
```
5. 특징
DELETE 문은 다음과 같은 특징을 가진다.
DELETE 문을 실행하면 다른 테이블을 삭제하도록 실행하는 트리거가 발생할 수 있다. 예를 들어, 두 테이블이 외래 키로 연결되어 있고 행이 참조된 테이블에서 삭제되면, 참조 무결성을 유지하기 위해 참조하는 테이블에서도 공통적으로 삭제가 이루어진다.
6. 성능
일반적으로 모든 행을 삭제하는 경우에는 DELETE보다 TRUNCATE TABLE 문이 더 빠르게 처리할 수 있다.
7. 관련 명령어
`TRUNCATE TABLE` 명령어는 테이블의 모든 행을 삭제하며, DBMS에 따라 메타데이터만 변경하기 때문에 `DELETE`보다 훨씬 빠르게 작동한다.[1] 이는 `TRUNCATE TABLE`이 일반적으로 제약 조건을 적용하거나 트리거를 실행하는 데 시간을 쓰지 않기 때문이다.[1]
DROP 명령어는 테이블 전체를 삭제하는 데 사용된다.[2]
8. 추가적인 정보 (일본어판 참고)
DELETE 실행 시, 삭제 대상 외 테이블을 참조해야 한다면 서브 쿼리를 사용할 필요가 있다. 하지만, 데이터베이스에 따라 '''USING''' 또는 추가적인 '''FROM''' 절을 통해 테이블 참조를 추가할 수 있는 경우도 있다.[2][3][4]
DELETE 문을 실행했을 때, 데이터베이스 트리거를 설정함으로써 다른 테이블도 함께 삭제할 수 있다. 예를 들어, 두 개의 테이블이 외래 키로 연결되어 있을 때, 한 테이블의 특정 행이 삭제되면 삭제된 행과 연결된 다른 테이블의 행도 트리거에 의해 자동으로 삭제되어 참조 무결성을 유지할 수 있다.
참조
[1]
웹사이트
SQL Delete Statement
https://www.w3school[...]
w3schools.com
[2]
웹사이트
DELETE
http://www.postgresq[...]
2009-09-23
[3]
웹사이트
DELETE Syntax
http://dev.mysql.com[...]
2014-12-08
[4]
웹사이트
DELETE (Transact-SQL)
http://msdn.microsof[...]
2009-09-23
[5]
웹인용
SQL Delete 문
http://www.w3schools[...]
w3schools.com
[6]
웹인용
DELETE(Transact-SQL) / SQL Server 2008 R2
http://msdn.microsof[...]
2010-11-13
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com