PostgreSQL Удалить строки из выбранного списка

⚡ Умное резюме

PostgreSQL Оператор DELETE удаляет одну или несколько строк из таблицы, а в сочетании с условием WHERE он применяется только к записям, соответствующим условию, в то время как отсутствие условия WHERE очищает все строки в таблице.

  • 📋 Синтаксис: Условие DELETE FROM table WHERE удаляет соответствующие строки, а условие RETURNING может отображать удаленные данные.
  • 🎯 Одно условие: Одно условие WHERE удаляет только те строки, которые удовлетворяют одному из условий.
  • Два условия: Объединение двух проверок с помощью оператора И позволяет сузить область удаления до определенных строк.
  • 🔗 Пункт EXISTS: Функция EXISTS удаляет строки в одной таблице на основании совпадений записей в другой таблице.
  • 🖥️ pgAdmin: Те же самые запросы на удаление выполняются визуально через редактор запросов pgAdmin.
  • 🤖 Безопасность ИИ: Искусственный интеллект добавляет правильное условие WHERE и выдает предупреждение перед полным удалением таблиц.

PostgreSQL Удалить строки из выбранного списка

Удалить запрос в PostgreSQL

УДАЛИТЬ оператор in PostgreSQL Используется для удаления одной или нескольких записей из таблицы. Чтобы удалить только выбранные строки из таблицы, PostgreSQL Позволяет комбинировать оператор DELETE с условием WHERE; в противном случае удаляет все записи в таблице.

PostgreSQL Удалить синтаксис запроса

Оператор DELETE можно определить, используя следующий синтаксис:

[ WITH [ RECURSIVE ] with-query [, ...] ]
DELETE FROM [ ONLY ] table-name [ * ] [ [ AS ] alias ]
    [ USING using-list ]
    [ WHERE condition(s) | WHERE CURRENT OF cursor-name]
    [ RETURNING * | output-expression [ [ AS ] output-name] [, ...] ]

Параметры

Доступны следующие параметры:

  • с запросомПредложение WITH позволяет ссылаться на один или несколько подзапросов по имени внутри запроса DELETE.
  • имя-таблицы: имя таблицы, из которой необходимо удалить записи.
  • псевдоним: замена имени целевой таблицы.
  • используя список: табличные выражения, позволяющие использовать столбцы из других таблиц в предложении WHERE.
  • условия): необязательно. Это условия, которые должны быть выполнены для удаления записей. Если этот раздел не указан, будут удалены все записи с именем таблицы.
  • имя курсора: курсор, используемый в условии WHERE CURRENT OF. Последняя строка, полученная с помощью этого курсора, будет удалена.
  • выходное выражение: выражение, которое будет обработано и возвращено оператором DELETE после удаления каждой строки.
  • имя вывода: имя, которое будет использоваться для возвращаемого столбца.

Обратите внимание, что поскольку оператор DELETE удаляет всю строку целиком, указывать имена столбцов не требуется.

PostgreSQL Удалить запрос с одним условием

Оператор DELETE можно использовать с одним условием, которое задается с помощью предложения WHERE. Рассмотрим таблицу Price со следующими данными:

Цена:

PostgreSQL Удалить запрос с одним условием

Удалим запись с идентификатором 4:

DELETE FROM Price
WHERE id = 4;

Приведенная выше команда удаляет записи, в которых идентификатор равен 4. Давайте проверим, было ли удаление успешным:

PostgreSQL Удалить запрос с одним условием

Строка с идентификатором 4 была удалена.

Удалить запрос с двумя условиями

PostgreSQL Оператор DELETE также может принимать два условия. Эти два условия следует объединить с помощью оператора AND. Мы будем использовать следующую таблицу:

Цена:

PostgreSQL Удалить запрос с двумя условиями

Рассмотрим пример, приведенный ниже:

DELETE FROM Price
WHERE id = 3
AND price = 300;

В приведенной выше команде мы удаляем строку, в которой идентификатор равен 3, а цена — 300. Теперь мы можем выполнить запрос к таблице:

SELECT * FROM Price;

Это возвращает следующее:

PostgreSQL Удалить запрос с двумя условиями

Запись с идентификатором 3 и ценой 300 была удалена.

PostgreSQL Запрос на удаление с использованием условия EXISTS

Достаточно воспользоваться ИИ-ассистентом СУЩЕСТВУЕТ В зависимости от условий, вы можете усложнить операцию DELETE. Иногда может возникнуть необходимость удалить записи в одной таблице на основании записей в другой таблице.

Поскольку предложение FROM не позволяет перечислять записи из более чем одной таблицы при выполнении удаления, предложение EXISTS становится очень полезным. У нас есть следующие две таблицы:

Книга:

PostgreSQL Запрос на удаление с использованием условия EXISTS

Цена:

PostgreSQL Запрос на удаление с использованием условия EXISTS

Затем мы можем запустить следующий запрос:

DELETE FROM Book
WHERE EXISTS
  (SELECT 1
    FROM Price
    WHERE Price.id = Book.id
    AND price < 250 );

Эта команда удаляет из таблицы Book строки, имеющие совпадающий идентификатор в таблице Price с ценой ниже 250.

Таблица Book теперь выглядит следующим образом:

PostgreSQL Запрос на удаление с использованием условия EXISTS

Запись с идентификатором 1 была удалена.

Как удалить строку в PostgreSQL используя pgAdmin

Те же запросы на удаление можно выполнить визуально через интерфейс pgAdmin, следуя приведенным ниже инструкциям:

При одном условии

Шаг 1) Войдите в свою учетную запись pgAdmin. Откройте pgAdmin и войдите в свою учетную запись, используя свои учетные данные.

Шаг 2) Создайте демонстрационную базу данных.

  1. На панели навигации слева нажмите «Базы данных».
  2. Нажмите Демо.

Удалить строку в PostgreSQL используя pgAdmin

Шаг 3) Введите приведенный ниже запрос в редакторе запросов:

DELETE FROM Price
WHERE id = 4;

Шаг 4) Нажмите кнопку «Выполнить».

Удалить строку в PostgreSQL используя pgAdmin

Шаг 5) Давайте проверим, была ли удалена эта строка:

Удалить строку в PostgreSQL используя pgAdmin

При двух условиях

Шаг 1) Войдите в свою учетную запись pgAdmin.

Шаг 2)

  1. На панели навигации слева нажмите «Базы данных».
  2. Нажмите Демо.

Удалить строку в PostgreSQL используя pgAdmin

Шаг 3) Введите запрос в редакторе запросов:

DELETE FROM Price
WHERE id = 3
AND price = 300;

Шаг 4) Нажмите кнопку «Выполнить».

Удалить строку в PostgreSQL используя pgAdmin

Шаг 5) Проверим, прошло ли удаление успешно:

Удалить строку в PostgreSQL используя pgAdmin

Использование условия EXISTS

Шаг 1) Войдите в свою учетную запись pgAdmin.

Шаг 2)

  1. На панели навигации слева нажмите «Базы данных».
  2. Нажмите Демо.

Удаление строки с использованием условия EXISTS в pgAdmin

Шаг 3) Введите запрос в редакторе запросов:

DELETE FROM Book
WHERE EXISTS
  (SELECT 1
    FROM Price
    WHERE Price.id = Book.id
    AND price < 250 );

Шаг 4) Нажмите кнопку «Выполнить».

Удаление строки с использованием условия EXISTS в pgAdmin

Шаг 5) Проверим, прошло ли удаление успешно:

Удаление строки с использованием условия EXISTS в pgAdmin

Загрузите базу данных, используемую в этом руководстве.

Часто задаваемые вопросы (FAQ)

Команда TRUNCATE мгновенно удаляет все строки и сбрасывает хранилище, но игнорирует условия WHERE и построчные триггеры. Команда DELETE удаляет выбранные строки с помощью условия WHERE, запускает построчные триггеры и может быть отменена внутри транзакции.

Добавьте условие USING: DELETE FROM member USING denylist WHERE member.phone = denylist.phone. Оно объединяет данные со второй таблицей и удаляет соответствующие строки, давая тот же результат, что и EXISTS, но с более понятным синтаксисом объединения таблиц.

Оператор RETURNING выводит столбцы из строк, только что удаленных в том же операторе. Напишите DELETE FROM Price WHERE id = 4 RETURNING *, и PostgreSQL Возвращает удаленные данные, чтобы приложения могли зарегистрировать или подтвердить изменение.

Да. Оберните операцию DELETE в транзакцию с помощью BEGIN, затем выполните ROLLBACK для отмены или COMMIT для сохранения. Пока вы не выполните COMMIT, удаленные строки можно восстановить, что защищает от ошибочного удаления.

Сохраняйте по одной копии для каждой группы, используя скрытый столбец ctid: DELETE FROM Price a USING Price b WHERE a.ctid < b.ctid AND a.id = b.id. Это удалит повторяющиеся строки, сохранив при этом одну запись.

Сначала выполните тот же фильтр, что и при выполнении запроса SELECT, или откройте транзакцию с помощью оператора BEGIN и используйте оператор RETURNING для проверки затронутых строк. RevПросмотр результата WHERE перед COMMIT предотвращает удаление большего количества строк, чем предполагалось.

Искусственный интеллект-помощники переводят простые правила на английском языке в оператор DELETE с правильным условием WHERE, предлагают операторы EXISTS или USING для удаления данных из разных таблиц и отмечают операторы, в которых отсутствует условие, необходимое для очистки всей таблицы.

Да. Искусственный интеллект-помощник анализирует каждое удаление, предупреждает об отсутствии условия WHERE и рекомендует транзакцию или предварительный просмотр с возвратом, снижая риск случайного удаления всей таблицы.

Подведем итог этой публикации следующим образом: