Buscar..
Introducción
La instrucción DELETE se utiliza para eliminar registros de una tabla.
Sintaxis
- ELIMINAR DE TableName [WHERE Condition ] [LIMIT count ]
ELIMINAR ciertas filas con DONDE
Esto eliminará todas las filas que coincidan con los criterios de WHERE
.
DELETE FROM Employees
WHERE FName = 'John'
ELIMINAR todas las filas
La omisión de una cláusula WHERE
eliminará todas las filas de una tabla.
DELETE FROM Employees
Consulte la documentación de TRUNCATE para obtener detalles sobre cómo el rendimiento de TRUNCATE puede ser mejor, ya que ignora los desencadenantes e índices y registros para simplemente eliminar los datos.
Cláusula TRUNCATE
Use esto para restablecer la tabla a la condición en la que se creó. Esto elimina todas las filas y restablece valores como el incremento automático. Tampoco registra cada eliminación de fila individual.
TRUNCATE TABLE Employees
BORRAR ciertas filas basadas en comparaciones con otras tablas
Es posible DELETE
datos de una tabla si coincide (o no coincide) con ciertos datos en otras tablas.
Asumamos que queremos DELETE
datos de la Fuente una vez que se carguen en Target.
DELETE FROM Source
WHERE EXISTS ( SELECT 1 -- specific value in SELECT doesn't matter
FROM Target
Where Source.ID = Target.ID )
Las implementaciones de RDBMS más comunes (p. Ej., MySQL, Oracle, PostgresSQL, Teradata) permiten unir tablas durante DELETE
permite una comparación más compleja en una sintaxis compacta.
Agregando complejidad al escenario original, asumamos que Aggregate se crea a partir de Target una vez al día y no contiene la misma ID, pero contiene la misma fecha. Supongamos también que queremos eliminar los datos de la Fuente solo después de que se haya completado el agregado del día.
En MySQL, Oracle y Teradata esto se puede hacer usando:
DELETE FROM Source
WHERE Source.ID = TargetSchema.Target.ID
AND TargetSchema.Target.Date = AggregateSchema.Aggregate.Date
En el uso de PostgreSQL:
DELETE FROM Source
USING TargetSchema.Target, AggregateSchema.Aggregate
WHERE Source.ID = TargetSchema.Target.ID
AND TargetSchema.Target.DataDate = AggregateSchema.Aggregate.AggDate
Básicamente, esto da como resultado INNER JOINs entre Source, Target y Aggregate. La eliminación se realiza en el origen cuando existen los mismos ID en el objetivo Y la fecha presente en el destino para esos ID también existe en el agregado.
La misma consulta también se puede escribir (en MySQL, Oracle, Teradata) como:
DELETE Source
FROM Source, TargetSchema.Target, AggregateSchema.Aggregate
WHERE Source.ID = TargetSchema.Target.ID
AND TargetSchema.Target.DataDate = AggregateSchema.Aggregate.AggDate
Las combinaciones explícitas pueden mencionarse en las declaraciones de Delete
en algunas implementaciones de RDBMS (por ejemplo, Oracle, MySQL) pero no se admiten en todas las plataformas (por ejemplo, Teradata no las admite)
Las comparaciones pueden diseñarse para verificar los escenarios de desajuste en lugar de combinar los con todos los estilos de sintaxis (observe NOT EXISTS
continuación)
DELETE FROM Source
WHERE NOT EXISTS ( SELECT 1 -- specific value in SELECT doesn't matter
FROM Target
Where Source.ID = Target.ID )