В этом учебном материале вы узнаете, как использовать Oracle оператор DELETE с синтаксисом, примерами и практическими упражнениями.
Описание
Oracle оператор DELETE используется для удаления одной или нескольких записей из таблицы в Oracle.
Синтаксис
Синтаксис оператора DELETE в Oracle/PLSQL:
[WHERE conditions];
Параметры или аргументы
table
Таблица из которой вы хотите удалить записи.
WHERE conditions
Необязательный. Условия, которые должны быть выполнены для удаляемых записей. Если не предусмотрено никаких условий, то все записи из таблицы будут удалены.
Примечание
Вам не нужно перечислять поля в Oracle DELETE, поскольку вы удалите всю строку из таблицы.
Пример использования с одним условием
Рассмотрим простой Oracle пример DELETE, где в запросе DELETE есть только одно условие.
Например:
1 2 |
DELETE FROM customers WHERE last_name = 'John'; |
Этот пример DELETE удалит все записи из таблицы customers, где last_name является John.
Вы можете проверить количество строк, которые будут удалены. Вы можете определить количество строк, которые будут удалены, выполнив следующее Oracle предложение SELECT, перед выполнением удаления.
1 2 3 |
SELECT count(*) FROM customers WHERE last_name = 'John'; |
Пример использования двух условий
Рассмотрим пример, когда в DELETE просто два условия.
Например:
1 2 3 |
DELETE FROM customers WHERE last_name = 'Anderson' AND customer_id > 25; |
Этот пример DELETE удалит все записи из таблицы customers, где last_name является Anderson и customer_id больше 25.
Вы можете проверить количество строк, которые будут удалены. Вы можете определить количество строк, которые будут удалены, выполнив следующее предложение SELECT, перед выполнением удаления.
1 2 3 4 |
SELECT count(*) FROM customers WHERE last_name = 'Anderson' AND customer_id > 25; |
Пример использования условия EXISTS
Вы можете, также выполнять более сложные операции удаления.
Вы можете удалять записи в одной таблице на основе значений в другой таблице. Так как, при удалении, вы не можете перечислить более одной таблицы в FROM, вы можете использовать Oracle условие EXISTS.
Например:
1 2 3 4 5 6 |
DELETE FROM suppliers WHERE EXISTS ( SELECT customers.customer_name FROM customers WHERE customers.customer_id = suppliers.supplier_id AND customer_id > 25 ); |
Этот Oracle пример DELETE удалит все записи в таблице suppliers, где есть запись в таблице customers, чьи customer_id больше 25, а customer_id соответствует supplier_id.
Если вы хотите определить количество строк, которые будут удалены, вы можете запустить, перед выполнением удаления, следующее Oracle предложение SELECT.
1 2 3 4 5 6 |
SELECT COUNT(*) FROM suppliers WHERE EXISTS ( SELECT customers.customer_name FROM customers WHERE customers.customer_id = suppliers.supplier_id AND customer_id > 25 ); |
Часто задаваемые вопросы
Вопрос: Как бы написать запрос DELETE для удаления всех записей из TableA, чьи данные в field1 и field2 НЕ совпадают с данными в fieldx и fieldz из таблицы TableB?
Ответ: Вы можете попробовать что-то подобное для Oracle DELETE:
1 2 3 4 5 6 |
DELETE FROM TableA WHERE NOT EXISTS ( SELECT * FROM TableB WHERE TableA.field1 = TableB.fieldx AND TableA.field2 = TableB.fieldz ); |
Практическое упражнение № 1:
На основании таблицы contacts, удалить все записи из таблицы contacts, которые проживают в city 'Las Vegas' и чьи first_name является 'Jane'.
1 2 3 4 5 6 7 8 9 10 |
CREATE TABLE contacts ( contact_id number(10) not null, last_name varchar2(50) not null, first_name varchar2(50) not null, address varchar2(50), city varchar2(50), state varchar2(2), zip_code varchar2(10), CONSTRAINT contacts_pk PRIMARY KEY (contact_id) ); |
Решение для практического упражнения № 1:
Oracle DELETE, ниже, удалит эти записи из таблицы contacts:
1 2 3 |
DELETE FROM contacts WHERE city = 'Las Vegas' AND first_name = 'Jane'; |
Практическое упражнение № 2:
На основании таблицы contacts, удалить все записи из таблицы contacts, где contact_id больше или равна 5000 и менее 6000.
1 2 3 4 5 6 7 8 9 10 |
CREATE TABLE contacts ( contact_id number(10) not null, last_name varchar2(50) not null, first_name varchar2(50) not null, address varchar2(50), city varchar2(50), state varchar2(2), zip_code varchar2(10), CONSTRAINT contacts_pk PRIMARY KEY (contact_id) ); |
Решение для практического упражнения № 2:
Oracle DELETE, ниже, удалит эти записи из таблицы contacts:
1 2 3 |
DELETE FROM contacts WHERE contact_id >= 5000 AND contact_id < 6000; |
Или решение можно написать, используя условие BETWEEN следующим образом:
1 2 |
DELETE FROM contacts WHERE contact_id BETWEEN 5000 AND 5999; |