Skip to main content

DELETE

Learning Focus

Use this lesson to remove rows from DuckDB tables confidently using DELETE statements.

Basic Syntax

DELETE FROM table_name WHERE condition;
caution

Omitting WHERE deletes all rows from the table. Always confirm the affected rows with a SELECT before executing DELETE.

Examples

Example 1: Delete by Primary Key

DELETE FROM employees WHERE id = 4;

Example 2: Delete by Condition

-- Remove inactive employees
DELETE FROM employees WHERE active = false;

Example 3: Safe Pattern

-- Step 1: Preview
SELECT COUNT(*) FROM employees WHERE hire_date < DATE '2020-01-01';

-- Step 2: Delete
DELETE FROM employees WHERE hire_date < DATE '2020-01-01';

Example 4: Delete Using Subquery

DELETE FROM employees
WHERE id IN (
SELECT id FROM employees WHERE department = 'HR' AND salary < 60000
);

Example 5: Truncate (Delete All Rows Fast)

-- Removes all rows without logging individual deletions
DELETE FROM employees;
-- or equivalent:
TRUNCATE employees; -- supported in newer DuckDB versions

Common Pitfalls

PitfallConsequencePrevention
No WHERE clauseEntire table wipedAlways select first to confirm row count
Assuming soft-delete by defaultRows permanently removedUse active = false pattern for soft deletes
Deleting while iteratingUnexpected resultsUse subquery or staging table pattern

Quick Reference

DELETE FROM t WHERE id = 1;
DELETE FROM t WHERE active = false;
DELETE FROM t WHERE col IN (SELECT col FROM other);

What's Next