PostgreSQL ВИДАЛИТИ рядки з виділеного елемента

⚡ Розумний підсумок

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

  • 📋 Синтаксис: Умова DELETE FROM table WHERE видаляє відповідні рядки, а RETURNING може відобразити видалені дані.
  • 🎯 Одна умова: Одна речення WHERE видаляє лише ті рядки, які задовольняють один критерій.
  • ➕ Дві умови: Об'єднання двох тестів за допомогою оператора "І" звужує видалення до точних рядків.
  • 🔗 Пункт EXISTS: EXISTS видаляє рядки в одній таблиці на основі збігів записів в іншій таблиці.
  • 🖥️ pgAdmin: Ті ж самі запити на видалення виконуються візуально через редактор запитів pgAdmin.
  • 🤖 Безпека ШІ: Помічники штучного інтелекту додають правильну умову WHERE та попереджають перед видаленням всієї таблиці.

PostgreSQL Видалити рядки з виділення

Видалити запит в PostgreSQL

Команда Оператор DELETE 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 Видалити запит з однією умовою

Видалимо запис з id 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

З ІСНУЄТЬСЯ умову, ви можете ускладнити операцію ВИДАЛЕННЯ. Іноді може виникнути потреба видалити записи в одній таблиці на основі записів в іншій таблиці.

Оскільки речення 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.

Таблиця Книги тепер має такий вигляд:

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

Завантажте базу даних, яка використовується в цьому посібнику

Поширені запитання

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, щоб зберегти. Доки ви не зафіксуєте зміни, видалені рядки можна відновити, що захищає від помилкових видалень.

Зберігайте одну копію на групу, використовуючи прихований стовпець 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 для міжтаблицьних видалення та позначають оператори, яким відсутня умова, яка б очистила всю таблицю.

Так. AI Copilot перевіряє кожне ВИДАЛЕННЯ, попереджає, коли відсутній речення WHERE, та рекомендує транзакцію або попередній перегляд RETURNING, зменшуючи ризик випадкового видалення всієї таблиці.

Підсумуйте цей пост за допомогою: