DELETE

Anuncio
• Tutorial PostgreSQL...
• Referencia: Comandos SQL:
♦ ALTER TABLE: cambiar la definición de una tabla
♦ ANALYZE: colecta estadísticas sobre una bb.dd.
♦ CREATE INDEX: define un nuevo índice
♦ CREATE TABLE: define una nueva tabla
♦ DELETE: elimina filas de una tabla
♦ DROP TABLE: elimina una tabla
♦ EXPLAIN: muestra el plan de ejecución
♦ INSERT: crea nuevas filas en una tabla
♦ SELECT: obtiene filas de una tabla o vista
♦ TRUNCATE: vacía una tabla o un conjunto de ellas
♦ UPDATE: modifica filas de una tabla
♦ VACUUM: limpia y opcionalmente analiza una bb.dd.
• Tipos de datos...
• Funciones y Operadores...
DELETE
Nombre
DELETE -- elimina filas de una tabla
Sinopsis
DELETE FROM [ ONLY ] tabla [ [ AS ] alias ]
[ USING lista_using ]
[ WHERE condición | WHERE CURRENT OF nombre_cursor ]
[ RETURNING * | expresión_salida [ [ AS ] nombre_salida ] [,
...] ]
Descripción
DELETE elimina filas que satisfacen la clausula WHERE desde la tabla especificada. Si la clausula WHERE esta
ausente, el efecto es eliminar todas las filas en la tabla. El resultado es una tabla válida, pero vacía.
Recomendación: TRUNCATE es una extensión PostgreSQL que provee un mecanismo más
rápido para eliminar todas las filas de una tabla.
Por defecto, DELETE eliminará filas en la tabla especificada y sus tablas hijas. Si desea eliminar solo de la
tabla mencionada específicamente, debe usar la clausula ONLY.
Hay dos maneras de eliminar filas en una tabla usando la información contenida en otras tablas de la base de
datos: usando sub-selects, o especificando tablas adicionales en la clausula USING. Que técnica es más
apropiada depende de las circunstancias específicas.
DELETE
1
La clausula especial RETURNING causa que DELETE compute y retorne valores basados en cada fila
eliminada. Cualquier expresión usando las columnas de la tabla, y/o columnas de otras tablas mencionadas en
el USING, puede ser computada. La sintaxis de la lista RETURNING es idéntica a la de la lista de salida de
SELECT.
Debe tener privilegios DELETE en dicha tabla para poder eliminar, como también privilegios SELECT para
cualquier tabla en la clausula USING o de cuyos valores sean leidos en la condición.
Parámetros
ONLY
Si se especifica, se elimina filas solamente de la tabla nombrada. Cuando no se especifica, cualquier
tabla que herede de la nombrada también es procesada.
tabla
El nombre de una tabla existente (opcionalmente calificado por el esquema).
alias
Un nombre sustituto para la tabla destino. Cuando se provee un alias, oculta completamente el
nombre actual de la tabla. Por ejemplo, dado DELETE FROM foo AS f, el resto de la sentencia
DELETE deve referirse a esta tabla como f y no foo.
lista_using
Una lista de expresiones de tabla, lo que permite que columnas de otras tablas aparezcan en la
condición WHERE. Es similar a la lista de tablas que puede ser especificada en la Clausula FROM de
una sentencia SELECT; por ejemplo, un alias para el nombre de tabla puede ser especificada. No
repetir la tabla destino en la lista_using, salvo que desee hacer una junta con si misma.
condición
Una expresión que devuelve un valor del tipo boolean. Sólo las filas para las cuales esta expresión
devuelva true serán eliminadas.
nombre_cursor
El nombre del cursor a usar en una condición WHERE CURRENT OF. La fila a ser eliminada es la
más recientemente traída del cursor. El cursor debe ser una consulta no agrupada en la tabla destino
del DELETE. Note que WHERE CURRENT OF no puede ser especificado junto con una condición
Booleana. Ver DECLARE? para mayor información sobre el uso de cursores con WHERE CURRENT
OF.
expresión_salida
Una expresión para ser computada y retornada por el comando DELETE luego de que cada fila es
eliminada. La expresión puede usar cualquier nombre de columna de la tabla o de las tablas listadas
en el USING. Escribir * para retornar todas las columnas.
nombre_salida
Un nombre para usar para una columna retornadaA.
Descripción
2
Salidas
Al completarse exitosamente, un comando DELETE devuelve una etiqueta de comando de la forma
DELETE cantidad
Donde cantidad es el número de filas eliminadas. Si cantidad es 0, ninguna fila coincidió con la
condición (esto no es considerado un error).
Si el comando DELETE contiene una clausula RETURNING, el resultado será similar al de una sentencia
SELECT conteniendo las columnas y nombres definidas en la lista del RETURNING, computadas sobre las
filas eliminadas por el comando.
Notas
PostgreSQL permite referenciar columnas de otras tablas en la condición WHERE al especificar las otras tablas
en la clausula USING. Por ejemplo, para borrar todos las películas producidas por un productor dado, uno
puede hacer:
DELETE FROM peliculas USING productores
WHERE productor_id = productores.id AND productores.nombre = 'foo';
Lo que esta sucediendo esencialmente es una junta entre peliculas y productores, con las filas de
peliculas juntadas exitosamente siendo marcadas para eliminación. La sintaxis no es estándar. Un modo
más estándar para hacerlo es:
DELETE FROM peliculas
WHERE productor_id IN (SELECT id FROM productores WHERE nombre = 'foo');
En algunos casos el estilo de junta es más facil de escribir o más rápido de ejecutar que el estilo de sub-select.
Ejemplos
Eliminar todas las películas menos los musicales:
DELETE FROM peliculas WHERE genero <> 'Musical';
Limpiar la tabla peliculas:
DELETE FROM peliculas;
Eliminar las tareas completadas, retornando el detalle completo de cada fila eliminada:
DELETE FROM tareas WHERE estado = 'COMPLETADO' RETURNING *;
Borrar la fila de tarea en la cual el cursor c_tasks está actualmente posicionado:
DELETE FROM tareas WHERE CURRENT OF c_tasks;
Salidas
3
Compatibilidad
Este comando se ajusta al estándar SQL, exceptuando que las clausulas USING y RETURNING son
extensiones PostgreSQL.
Compatibilidad
4
Descargar