В этом учебном материале вы узнаете, как использовать оператор DELETE, с синтаксисом и примерами.
Описание
SQL оператор DELETE используется для удаления одной или нескольких записей из таблицы.
Синтаксис
Синтаксис оператора DELETE в SQL:
[WHERE conditions];
Параметры или аргументы
- table
- Таблица, из которой вы хотите удалить записи.
- WHERE conditions
- Необязательный. Условия, которые должны быть выполнены для удаления записей. Если никаких условий не предусмотрено, все записи в таблице будут удалены.
Примечание
Вам не нужно перечислять поля в операторе DELETE, так как вы удаляете всю строку из таблицы.
Пример оператора DELETE с одним условием
Если вы запустите оператор DELETE без условий в предложении WHERE, все записи из таблицы будут удалены. В результате вы чаще всего будете включать предложение WHERE, по крайней мере с одним условием, в свой оператор DELETE.
Давайте начнем с простого примера запроса DELETE, который имеет одно условие в предложении WHERE.
В этом примере у нас есть таблица suppliers со следующими данными:
supplier_id | supplier_name | city | state |
---|---|---|---|
100 | Yandex | Moscow | Moscow |
200 | Lansing | Michigan | |
300 | Oracle | Redwood City | California |
400 | Bing | Redmond | Washington |
500 | Yahoo | Sunnyvale | Washington |
600 | DuckDuckGo | Paoli | Pennsylvania |
700 | Qwant | Paris | Ile de France |
800 | Menlo Park | California | |
900 | Electronic Arts | San Francisco | California |
Введите следующий оператор DELETE:
1 2 |
DELETE FROM suppliers WHERE supplier_name = 'Yandex'; |
Будет удалена 1 запись. Снова выберите данные из таблицы поставщиков:
1 |
SELECT * FROM suppliers; |
Вот результаты, которые вы должны получить:
supplier_id | supplier_name | city | state |
---|---|---|---|
200 | Lansing | Michigan | |
300 | Oracle | Redwood City | California |
400 | Bing | Redmond | Washington |
500 | Yahoo | Sunnyvale | Washington |
600 | DuckDuckGo | Paoli | Pennsylvania |
700 | Qwant | Paris | Ile de France |
800 | Menlo Park | California | |
900 | Electronic Arts | San Francisco | California |
В этом примере удаляются все записи из таблицы suppliers, где supplier_name - Yandex.
Вы можете проверить количество строк, которые будут удалены. Вы можете определить количество строк, которые будут удалены, выполнив следующий запрос SELECT перед выполнением удаления:
1 2 3 |
SELECT COUNT(*) FROM suppliers WHERE supplier_name = 'Yandex'; |
Этот запрос вернет количество записей, которые будут удалены при выполнении оператора DELETE.
COUNT(*) |
---|
1 |
Пример - оператор DELETE с более чем одним условием
Вы можете иметь более одного условия в инструкции DELETE в SQL, используя либо условие AND, либо условие OR. Условие AND позволяет вам удалить запись, если все условия выполнены. Условие OR удаляет запись, если выполняется одно из условий.
Давайте рассмотрим пример использования оператора DELETE с двумя условиями с использованием условия AND.
В этом примере у нас есть таблица products со следующими данными:
product_id | product_name | category_id |
---|---|---|
1 | Pear | 50 |
2 | Banana | 50 |
3 | Orange | 50 |
4 | Apple | 50 |
5 | Bread | 75 |
6 | Sliced Ham | 25 |
7 | Kleenex | NULL |
Введите следующий оператор DELETE:
1 2 3 |
DELETE FROM products WHERE category_id = 50 AND product_name <> 'Pear'; |
Будет удалены 3 записи. Снова выберите данные из таблицы products:
1 |
SELECT * FROM products; |
Вот результаты, которые вы получите:
product_id | product_name | category_id |
---|---|---|
1 | Pear | 50 |
5 | Bread | 75 |
6 | Sliced Ham | 25 |
7 | Kleenex | NULL |
В этом примере удаляются все записи из таблицы products, у которых category_id равен 50, а product_name НЕ 'Pear'.
Пример - использование EXISTS с оператором DELETE
Вы также можете выполнять более сложные удаления.
Вы можете удалить записи в одной таблице на основе значений в другой таблице. Поскольку вы не можете перечислить более одной таблицы в предложении FROM при выполнении удаления, вы можете использовать предложение EXISTS.
В этом примере у нас есть таблица customer со следующими данными:
customer_id | first_name | last_name | favorite_website |
---|---|---|---|
4000 | Justin | Bieber | google.com |
5000 | Selena | Gomez | bing.com |
6000 | Mila | Kunis | yahoo.com |
7000 | Tom | Cruise | oracle.com |
8000 | Johnny | Depp | NULL |
9000 | Russell | Crowe | google.com |
И таблица orders со следующими данными:
order_id | customer_id | order_date |
---|---|---|
1 | 7000 | 2019/06/18 |
2 | 5000 | 2019/06/18 |
3 | 8000 | 2019/06/19 |
4 | 4000 | 2019/06/20 |
5 | NULL | 2019/07/01 |
Введите следующий оператор DELETE:
1 2 3 4 5 6 |
DELETE FROM orders WHERE EXISTS (SELECT * FROM customers WHERE customers.customer_id = orders.customer_id AND customers.last_name = 'Bieber'); |
Будет удалена 1 запись. Выберите данные из таблицы orders еще раз:
1 |
SELECT * FROM orders; |
Вот результаты, которые вы должны получить:
order_id | customer_id | order_date |
---|---|---|
1 | 7000 | 2019/06/18 |
2 | 5000 | 2019/06/18 |
3 | 8000 | 2019/06/19 |
5 | NULL | 2019/07/01 |
В этом примере удаляются все записи из таблицы orders, где в таблице customers есть запись с фамилией 'Bieber' и совпадающим значением customer_id в обеих таблицах. В этом примере была удалена запись для order_id = 4.