Видалення рядків з таблиці можна здійснити командою Модифікації DELETE. Варто враховувати, що вона може видаляти тільки цілі записи таблиці, а не індивідуальні значення того або іншого поля. Із цієї причини для даного оператора параметр поля є недоступним. Наприклад, для видалення всього вмісту таблиці STUDENTS, можна скористатися наступним:
DELETE FROM STUDENTS;
У процесі роботи частіше необхідно видаляти не всі дані, а тільки деякі певні рядки з таблиці. Для того щоб визначити, які рядки будуть вилучені, використають предикат, аналогічно тому, як це робиться для запитів. Наприклад, щоб видалити інформацію про студента Нагорний, можна використати наступну команду:
DELETE FROM STUDENTS
WHERE SNUM = 3416;
Тут як предикат використаний номер студентського квитка: дійсно, це поле фактично є первинним ключем таблиці, що дає гарантію видалення тільки одного запису. Використання поля SFAM, загалом кажучи, приводить до видалення декількох записів, тому що в таблиці могла зберігатися інформація про однофамільців.
У команді DELETE допускається використати предикат, що вибирає целую групу рядків. Наприклад, що випливає команда видаляє з таблиці USP всі дані, що ставляться до оцінок, отриманим 10/06/1999:
DELETE FROM USP
WHERE UDATE = 10/06/1999;
Нарешті, так само, як й у випадку з командою INSERT, допускається в предикаті використати вкладений запит. Найчастіше це необхідно, коли критерій, по якому вибираються дані для видалення, базується на іншій таблиці. Наприклад, якщо виникає необхідність у видаленні інформації про студентів з таблиці STUDENTS, причому для таких, у яких є трійки по кожному з навчальних предметів, то потрібно виконати наступне:
DELETE FROM STUDENTS
WHERE SNUM =
(SELECT SNUM
FROM USP
WHERE OCENKA = 3) ;
У цьому випадку подзапрос вибере всіх студентів, що мають трійки, з таблиці успішності, і в предикат основної команди поверне номера їхніх студентських квитків.
Допускається в предикаті команди DELETE використати й подзапросы, що дає можливість установити досить складні критерії того, які рядки будуть віддалятися. Крім того, дуже ефективно виконувати спочатку вторинні дії (перевірки й т.п.), після чого виконувати саме видалення. Хоча не можна посилатися на таблицю, з якої будуть віддалятися запису, у пропозиції FROM подзапроса, у предикаті допускається посилання на поточний рядок цієї таблиці, тобто можна використати співвіднесені подзапросы. Наприклад:
DELETE FROM STUDENTS
WHERE EXISTS
(SELECT *
FROM USP
WHERE OCENKA = 3
AND STUDENTS.SNUM = USP.SNUM) ;
Властиво вся команда видаляє інформацію, аналогічно попередньому прикладу. Зверніть увагу на те. Що частина предиката внутрішнього запиту посилається до таблиці STUDENTS. Це означає, що весь подзапрос буде виконуватися окремо для кожного рядка даної таблиці.
У цілому, структура команди DELETE досить проста для розуміння, тому більш докладно на ній зупинятися не будемо.