• 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