Skip to content

DELETE

The DELETE statement can be used to remove rows from a table or from the base table of a view.

Syntax

sql
DELETE
    [FROM] {table_expr_clause} [t_alias]
    [WHERE clause];

Parameters

FROM table_expr_clause: Specifies the object from which rows should be removed. See the section "table_expr_clause" below.


t_alias (optional): Alias for the table, view, materialized view, subquery, or collection value. t_alias is mandatory if the table_expr_clause references object type attributes or methods.


WHERE clause: See the WHERE clause section below.

table_expr_clause

sql
{
  folder_name.table_name  
   | folder_name.view_name
   | (subquery)
}

Parameters

folder_name: The folder that contains the table or view.


table_name: The name of the table.


view_name: The name of the view. When using DELETE on an updatable view, data is removed from the underlying table.


subquery: A subquery. See the "subquery" section below.

Limitations of table_expr_clause

  • ORDER BY clause is not supported in the subquery of table_expr_clause
  • A set operator
  • A DISTINCT operator
  • An aggregate or analytic function
  • A GROUP BY, ORDER BY, CONNECT BY, or START WITH clause
  • A subquery in the SELECT list
  • JOIN

WHERE Clause

sql
WHERE condition

In general, the WHERE clause in a DELETE statement defines the rows to be deleted. Only rows that match the condition are removed. The condition may include object references and subqueries.

If the WHERE clause is omitted, all rows in the object are removed.

Parameter

condition: The condition that defines which rows should be deleted. See also WHERE.

Example 1 | DELETE ... WHERE

sql
create table mkw_doku.my_table1 (ord string, col1 integer);

insert into mkw_doku.my_table1 (select 'a' as ord, 10 as col1
                       union all 
                       select 'b' as ord,  20 as col1
                       union all
                       select 'c' as ord,  30 as col1
                       union all
                       select 'd' as ord,  40 as col1
                       union all
                       select 'f' as ord,  null as col1);
                         
delete from mkw_doku.my_table1 where col1 >= 30;  
select * from mkw_doku.my_table1;
+-----+------+
| ord | col1 |
+-----+------+
| a   | 10   |
| b   | 20   |
| f   | NULL |
+-----+------+

Example 2 | DELETE with Subquery

sql
CREATE TABLE mkw_doku.my_table1 (ord STRING, col1 INTEGER);

INSERT INTO mkw_doku.my_table1 
SELECT 'a', 10
UNION ALL 
SELECT 'b', 20
UNION ALL
SELECT 'c', 30
UNION ALL
SELECT 'd', 40
UNION ALL
SELECT 'f', NULL;

DELETE FROM (SELECT * FROM mkw_doku.my_table1) WHERE col1 >= 30 AND ord = 'd';  
SELECT * FROM mkw_doku.my_table1;
+-----+------+
| ord | col1 |
+-----+------+
| b   | 20   |
| c   | 30   |
| f   | NULL |
| a   | 10   |
+-----+------+