Saltar a contenido

La sentencia DELETE de PostgreSQL permite borrar una o más filas de una tabla.

A continuación se muestra la sintaxis básica de la sentencia DELETE:

DELETE FROM table_name
WHERE condition;Code language: SQL (Structured Query Language) (sql)

En esta sintaxis:

  • En primer lugar, especifique el nombre(nombre_tabla) de la tabla de la que desea eliminar datos después de las palabras clave DELETE FROM.
  • En segundo lugar, especifique una condición en la cláusula WHERE para determinar qué filas eliminar.

La cláusula WHERE es opcional. Si omite la cláusula WHERE, la sentencia DELETE eliminará todas las filas de la tabla.

La sentencia DELETE devuelve el número de filas eliminadas. Devuelve cero si la sentencia DELETE no ha eliminado ninguna fila.

Para devolver al cliente la(s) fila(s) eliminada(s), utilice la cláusula RETURNING como se indica a continuación:

DELETE FROM table_name
WHERE condition
RETURNING (select_list | *)Code language: SQL (Structured Query Language) (sql)

El asterisco(*) permite devolver todas las columnas de la(s) fila(s) eliminada(s). Si desea devolver los valores de una columna específica, también puede especificarlos después de la palabra clave RETURNING.

Por ejemplo, la siguiente sentencia borra filas de una tabla y devuelve los valores del id de las filas borradas:

DELETE FROM table_name
WHERE condition
RETURNING id;Code language: SQL (Structured Query Language) (sql)

Si elimina datos de una tabla basándose en datos de otra tabla, puede utilizar la sentencia DELETE JOIN.

Para eliminar datos que tienen una relación de clave externa, utilice la opción ON DELETE CASCADE.

Tenga en cuenta que la sentencia DELETE elimina datos de una tabla pero no modifica la estructura de la misma. Si desea cambiar la estructura de una tabla, como eliminar una columna, debe utilizar la sentencia ALTER TABLE.

Ejemplos de sentencias DELETE en PostgreSQL

Exploremos algunos ejemplos de uso de la sentencia DELETE.

Creación de una tabla de ejemplo

Las siguientes sentencias crean una nueva tabla llamada todos e insertan algunos datos de ejemplo:

CREATE TABLE todos (
    id SERIAL PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    completed BOOLEAN NOT NULL DEFAULT false
);

INSERT INTO todos (title, completed) VALUES
    ('Learn basic SQL syntax', true),
    ('Practice writing SELECT queries', false),
    ('Study PostgreSQL data types', true),
    ('Create and modify tables', false),
    ('Explore advanced SQL concepts', true),
    ('Understand indexes and optimization', false),
    ('Backup and restore databases', true),
    ('Implement transactions', false),
    ('Master PostgreSQL security features', true),
    ('Build a sample application with PostgreSQL', false);

SELECT * FROM todos;Code language: SQL (Structured Query Language) (sql)

Salida:

 id |                   title                    | completed
----+--------------------------------------------+-----------
  1 | Learn basic SQL syntax                     | t
  2 | Practice writing SELECT queries            | f
  3 | Study PostgreSQL data types                | t
  4 | Create and modify tables                   | f
  5 | Explore advanced SQL concepts              | t
  6 | Understand indexes and optimization        | f
  7 | Backup and restore databases               | t
  8 | Implement transactions                     | f
  9 | Master PostgreSQL security features        | t
 10 | Build a sample application with PostgreSQL | f
(10 rows)Code language: SQL (Structured Query Language) (sql)

Uso de PostgreSQL DELETE para eliminar una fila de la tabla

La siguiente sentencia utiliza la sentencia DELETE para borrar una fila con el id 1 de la tabla todos:

DELETE FROM todos
WHERE id = 1;Code language: SQL (Structured Query Language) (sql)

La sentencia devuelve 1 indicando que se ha borrado una fila:

DELETE 1

La siguiente sentencia utiliza la sentencia DELETE para eliminar la fila con id 100:

DELETE FROM todos
WHERE id = 100;Code language: SQL (Structured Query Language) (sql)

Como la fila con el id 100 no existe, la sentencia DELETE devuelve 0:

DELETE 0

Uso de PostgreSQL DELETE para eliminar una fila y devolver la fila eliminada

La siguiente sentencia utiliza la sentencia DELETE para borrar la fila con id 2 y devolver la fila borrada al cliente:

DELETE FROM todos
WHERE id = 2
RETURNING *;Code language: SQL (Structured Query Language) (sql)

PostgreSQL devuelve la siguiente fila eliminada:

 id |              title              | completed
----+---------------------------------+-----------
  2 | Practice writing SELECT queries | f
(1 row)

Uso de PostgreSQL DELETE para eliminar varias filas de la tabla

La siguiente sentencia utiliza la sentencia DELETE para borrar todas las filas de la tabla todos con el valor en la columna completado true y devolver las filas borradas:

DELETE FROM todos
WHERE completed = true
RETURNING *;Code language: SQL (Structured Query Language) (sql)

Salida:

 id |                title                | completed
----+-------------------------------------+-----------
  3 | Study PostgreSQL data types         | t
  5 | Explore advanced SQL concepts       | t
  7 | Backup and restore databases        | t
  9 | Master PostgreSQL security features | t
(4 rows)


DELETE 4

Ha borrado cuatro filas de la tabla todos.

Uso de PostgreSQL DELETE para eliminar todas las filas de la tabla

La siguiente sentencia utiliza la sentencia DELETE sin una cláusula WHERE para borrar todas las filas de la tabla todos:

DELETE FROM todos;Code language: SQL (Structured Query Language) (sql)

Salida:

DELETE 4

La tabla todos ahora está vacía.

Resumen

  • Utilice la sentencia DELETE FROM para eliminar una o varias filas de una tabla.
  • Utilice la cláusula WHERE para especificar las filas que desea eliminar.
  • Utilice la cláusula RETURNING para devolver las filas eliminadas.