sql delete statement

The SQL DELETE statement is a critical component of managing data in a database. It is used to remove records from a table, providing an essential tool for database maintenance. In this article, we’ll explore the syntax and usage of the SQL DELETE statement, along with practical examples. If you’re looking to add data to a table, check out our guide on the SQL INSERT INTO statement. Or, if you need to modify existing data, read up on the SQL UPDATE statement.

SQL Delete Statement Syntax

sql delete statement

The basic syntax of the SQL DELETE statement is as follows:

DELETE FROM table_name
WHERE condition;
  • table_name: the name of the table from which you want to delete data.
  • condition: the condition that specifies which records to delete.

SQL Delete Statement Example

Suppose we have a table named employees with the following data:


To delete the record with id = 3, we can use the following SQL statement:

DELETE FROM employees
WHERE id = 3;

After executing this statement, the data in the employees table will look like this:


SQL Delete Statement with JOIN Clause

You can also use the JOIN clause with the DELETE statement to delete records from multiple tables. Here’s an example:

Suppose we have two tables named employees and departments, with the following data:


To delete all employees in the Sales department, we can use the following SQL statement:

DELETE employees
FROM employees
INNER JOIN departments
ON employees.department_id = departments.id
WHERE departments.name = 'Sales';

After executing this statement, the data in the employees table will look like this:


SQL Delete Statement with Subqueries

You can also use subqueries in the WHERE clause of the DELETE statement to delete data based on the results of a subquery. Here’s an example:

DELETE FROM employees
WHERE id IN (SELECT id FROM terminated_employees);

This statement will delete all records from the employees table where the id is in the list of ids returned by the subquery. In this case, the subquery returns the ids of all terminated employees, which will be used to delete their records from the employees table.

Limiting the Number of Rows to be Deleted

Similar to the UPDATE statement, you can also use the LIMIT clause in the DELETE statement to limit the number of rows to be deleted. Here’s an example:

DELETE FROM employees
WHERE salary < 50000

This statement will delete up to 10 records from the employees table where the salary is less than 50000.

Tips and Best Practices

When using the DELETE statement, it’s important to be cautious and take necessary precautions to avoid accidentally deleting important data. Here are some tips and best practices:

  • Always use the WHERE clause to specify which records to delete.
  • Test your DELETE statements in a development environment before executing them in production.
  • Take a backup of your data before deleting any critical data.
  • Use transactions to ensure that the DELETE statement is executed as a single, atomic operation.

Recovering Deleted Data

It is important to note that once data is deleted, it cannot be recovered unless a backup was taken before the delete operation. Therefore, it is crucial to take regular backups of the database to ensure that data can be recovered in case of accidental deletion or other data loss scenarios. Some databases also provide tools for recovering deleted data, but they can be complicated to use and not always effective.

Cascading Delete

Cascading delete is a feature that allows deleting related rows in child tables when a row in the parent table is deleted. This can be useful in database designs where tables have a parent-child relationship. For example, suppose we have a database that stores information about customers and their orders. The customer table is the parent table, and the orders table is the child table. If we delete a customer from the customer table, we may also want to delete all the orders associated with that customer from the orders table. Cascading delete can automatically perform this action for us.

To use cascading delete, we need to set up a foreign key constraint with the ON DELETE CASCADE option. This means that when a row in the parent table is deleted, all the related rows in the child table will be deleted automatically. Here’s an example:

CREATE TABLE customers ( id INT PRIMARY KEY, name VARCHAR(50) );

CREATE TABLE orders ( id INT PRIMARY KEY, customer_id INT, order_date DATE, 
      FOREIGN KEY (customer_id) REFERENCES customers(id) ON DELETE CASCADE );

In this example, the orders table has a foreign key constraint that references the customers table. The ON DELETE CASCADE option ensures that when a customer is deleted from the customers table, all the related rows in the orders table will also be deleted.

Triggered Delete

It is also possible to create a trigger that is automatically executed when a delete operation is performed on a table. This can be useful for auditing purposes or for performing additional actions when a record is deleted. For example, we may want to keep a log of all deleted records for future reference.

Here’s an example of creating a trigger that logs all deleted records in a separate audit table:

CREATE TABLE employees ( id INT PRIMARY KEY, name VARCHAR(50), 
                       department VARCHAR(50), salary INT );

CREATE TABLE employee_audit ( id INT PRIMARY KEY, employee_id INT, action VARCHAR(50), 
                              timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP );

CREATE TRIGGER delete_employee_trigger AFTER DELETE 
       ON employees FOR EACH ROW INSERT INTO employee_audit (employee_id, action) 
       VALUES (OLD.id, 'DELETED');

In this example, the delete_employee_trigger trigger is executed after a record is deleted from the employees table. The trigger inserts a new row into the employee_audit table with information about the deleted record, including the employee ID and the action performed.


We’ve covered the basics of the SQL DELETE statement, including how to use the WHERE clause to delete specific records, how to use subqueries to delete data based on the results of a query, and how to limit the number of rows to be deleted. We’ve also discussed some tips and best practices for using the DELETE statement safely and effectively. If you want to further refine your skills in SQL, you may want to learn about aggregate functions like SQL MIN, MAX, COUNT, AVG, and SUM statements. You can also explore how to filter data using SQL LIKE and wildcards, or how to use the SQL IN and BETWEEN operators.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *