Поиск…
Вступление
Оператор DELETE используется для удаления записей из таблицы.
Синтаксис
- DELETE FROM TableName [WHERE Condition ] [LIMIT count ]
УДАЛИТЬ некоторые строки с ГДЕ
Это приведет к удалению всех строк, соответствующих критериям WHERE
.
DELETE FROM Employees
WHERE FName = 'John'
УДАЛИТЬ все строки
Опускание предложения WHERE
приведет к удалению всех строк из таблицы.
DELETE FROM Employees
См. Документацию TRUNCATE для получения подробной информации о том, как производительность TRUNCATE может быть лучше, поскольку она игнорирует триггеры, индексы и журналы, чтобы просто удалять данные.
Предложение TRUNCATE
Используйте это, чтобы сбросить таблицу до состояния, в котором она была создана. Это удаляет все строки и сбрасывает такие значения, как автоинкремент. Он также не регистрирует удаление каждой отдельной строки.
TRUNCATE TABLE Employees
УДАЛИТЬ некоторые строки на основе сравнений с другими таблицами
Можно DELETE
данные из таблицы, если они соответствуют (или не соответствуют) определенным данным в других таблицах.
Предположим, мы хотим DELETE
данные из Источника после его загрузки в Целевой.
DELETE FROM Source
WHERE EXISTS ( SELECT 1 -- specific value in SELECT doesn't matter
FROM Target
Where Source.ID = Target.ID )
Наиболее распространенные реализации RDBMS (например, MySQL, Oracle, PostgresSQL, Teradata) позволяют объединять таблицы во время DELETE
что позволяет более сложное сравнение в компактном синтаксисе.
Добавив сложность к исходному сценарию, предположим, что Aggregate построен из Target один раз в день и не содержит одного и того же идентификатора, но содержит ту же дату. Предположим также, что мы хотим удалить данные из Источника только после того, как совокупность будет заполнена в течение дня.
В MySQL, Oracle и Teradata это можно сделать, используя:
DELETE FROM Source
WHERE Source.ID = TargetSchema.Target.ID
AND TargetSchema.Target.Date = AggregateSchema.Aggregate.Date
В PostgreSQL используйте:
DELETE FROM Source
USING TargetSchema.Target, AggregateSchema.Aggregate
WHERE Source.ID = TargetSchema.Target.ID
AND TargetSchema.Target.DataDate = AggregateSchema.Aggregate.AggDate
Это по существу приводит к ВНУТРЕННЫМ СОЕДИНЕНИЯМ между Source, Target и Aggregate. Удаление выполняется для Источника, когда те же идентификаторы существуют в Целевом И дата, присутствующая в Целевом для этих идентификаторов, также существуют в Агрегате.
Тот же запрос также может быть написан (в MySQL, Oracle, Teradata) следующим образом:
DELETE Source
FROM Source, TargetSchema.Target, AggregateSchema.Aggregate
WHERE Source.ID = TargetSchema.Target.ID
AND TargetSchema.Target.DataDate = AggregateSchema.Aggregate.AggDate
Явные объединения могут упоминаться в Delete
в некоторых реализациях СУБД (например, Oracle, MySQL), но не поддерживаются на всех платформах (например, Teradata не поддерживает их)
Сравнение может быть спроектировано для проверки сценариев несоответствия, а не для сопоставления со всеми стилями синтаксиса (см. Ниже NOT EXISTS
)
DELETE FROM Source
WHERE NOT EXISTS ( SELECT 1 -- specific value in SELECT doesn't matter
FROM Target
Where Source.ID = Target.ID )