Open Source RDBMS - Seamless, Scalable, Stable and Free

한국어 | Login |Register

Versions available for this page: CUBRID 8.2.1 |  CUBRID 8.3.0 |  CUBRID 8.3.1 |  CUBRID 8.4.0 |  CUBRID 8.4.1 |  CUBRID 8.4.3 |  CUBRID 9.0.0 | 

DELETE

설명

DELETE 문을 사용하여 테이블 내에 레코드를 삭제할 수 있으며, WHERE 절과 결합하여 삭제 조건을 명시할 수 있다. 하나의 DELETE 문으로 하나 이상의 테이블을 삭제할 수 있다.

삭제할 테이블이 한 개인 경우에 한하여, LIMIT 절을 지정할 수 있다. LIMIT 절을 명시하면 삭제할 레코드 수를 한정할 수 있다. WHERE 절을 만족하는 레코드 개수가 row_count를 초과하면 row_count 개의 레코드만 삭제된다.

구문

<DELETE single table>

DELETE [FROM] table_name [ WHERE <search_condition> ] [LIMIT row_count]

 

<DELETE multiple tables FROM ...>

DELETE table_name[, table_name] ... FROM <table_specifications> [ WHERE <search_condition> ]

 

<DELETE FROM multiple tables USING ...>

DELETE FROM table_name[, table_name] ... USING <table_specifications> [ WHERE <search_condition> ]

  • <table_specifications> : SELECT 문의 FROM 절과 같은 형태의 구문을 지정할 수 있으며, 하나 이상의 테이블을 지정할 수 있다.
  • table_name : 삭제할 데이터가 포함되어 있는 테이블의 이름을 지정한다. 테이블의 개수가 한 개일 경우 앞의 FROM 키워드를 생략할 수 있다.
  • search_condition : WHERE 절을 이용하여 search_condition을 만족하는 데이터만 삭제한다. 생략할 경우 지정된 테이블의 모든 데이터를 삭제한다.
  • row_count : LIMIT 절에 삭제할 레코드 수를 명시하며, 0보다 큰 정수를 지정할 수 있다.
참고 사항
  • 여러 개의 테이블이 있는(multiple table) DELETE 문에서는 <table_specifications> 내에서만 테이블 별칭(alias)을 정의할 수 있고, <table_specifications> 밖에서는 <table_specifications> 내에서 정의한 테이블 별칭만 사용할 수 있다(예제 2 참고).
  • CUBRID 9.0 미만 버전에서는 <table_specifications>에 한 개의 테이블만 입력할 수 있다.
예제 1

CREATE TABLE a_tbl(

id INT NOT NULL,

phone VARCHAR(10));

INSERT INTO a_tbl VALUES(1,'111-1111'), (2,'222-2222'), (3, '333-3333'), (4, NULL), (5, NULL);

 

DELETE FROM a_tbl WHERE phone IS NULL LIMIT 1;

 

--delete one record only from a_tbl

SELECT * FROM a_tbl;

           id  phone

===================================

            1  '111-1111'

            2  '222-2222'

            3  '333-3333'

            5  NULL

 

--delete all records from a_tbl

DELETE FROM a_tbl;

예제 2

CREATE TABLE a_tbl(

id INT NOT NULL,

phone VARCHAR(10));

 

CREATE TABLE b_tbl(

id INT NOT NULL,

phone VARCHAR(10));

 

CREATE TABLE c_tbl(

id INT NOT NULL,

phone VARCHAR(10));

 

INSERT INTO a_tbl VALUES(1,'111-1111'), (2,'222-2222'), (3, '333-3333'), (4, NULL), (5, NULL);

 

INSERT INTO b_tbl VALUES(1,'111-1111'), (2,'222-2222'), (3, '333-3333'), (4, NULL);

 

INSERT INTO c_tbl VALUES(1,'111-1111'), (2,'222-2222'), (10, '333-3333'), (11, NULL), (12, NULL);

 

-- Below four queries show the same result.

--  <DELETE multiple tables FROM ...>

 

DELETE a, b FROM a_tbl a, b_tbl b

WHERE a.id=b.id;

 

DELETE a, b FROM a_tbl a INNER JOIN b_tbl b ON a.id=b.id

INNER JOIN c_tbl c ON b.id=c.id;

 

-- <DELETE FROM multiple tables USING ...>

 

DELETE FROM a, b USING a_tbl a, b_tbl b, c_tbl c

WHERE a.id=b.id AND b.id=c.id;

 

DELETE FROM a, b USING a_tbl a INNER JOIN b_tbl b ON a.id=b.id

INNER JOIN c_tbl c ON b.id=c.id;