Как удалить данные из таблицы sql
Для удаления применяется команда DELETE :
Например, удалим строки, у которых id равен 9:
Или удалим все товары, производителем которых является Xiaomi и которые имеют цену меньше 15000:
Более сложный пример — удалим первые два товара, у которых производитель — Apple:
После первого оператора FROM идет выборка двух строк из таблицы Products. Этой выборке назначается псевдоним Selected с помощью оператора AS. Далее устанавливаем условие, что если Id в таблице Products имеет то же значение, что и Id в выборке Selected, то строка удаляется.
Если необходимо вовсе удалить все строки вне зависимости от условия, то условие можно не указывать:
SQL Оператор DELETE
SQL оператор DELETE используется для удаления одной или нескольких записей из таблицы.
Синтаксис
Синтаксис оператора DELETE в SQL:
Параметры или аргументы
Примечание
Вам не нужно перечислять поля в операторе 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 запись. Снова выберите данные из таблицы поставщиков:
Вот результаты, которые вы должны получить:
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 перед выполнением удаления:
Этот запрос вернет количество записей, которые будут удалены при выполнении оператора 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:
Будет удалены 3 записи. Снова выберите данные из таблицы 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.
Как удалить данные из таблицы sql
Время от времени возникает задача удаления записей из таблицы. Для этого в SQL предусмотрены операторы DELETE и TRUNCATE , из которых наиболее универсальным и безопасным является первый вариант.
Если условие отбора записей WHERE отсутствует, то будут удалены все записи указанной таблицы.
Эту же операцию (удаления всех записей) можно сделать также с помощью оператора TRUNCATE . Он выполнит удаление таблицы и пересоздаст её заново — этот вариант работает гораздо быстрее, чем удаление всех записей одна за другой (как в случае с DELETE ) особенно для больших таблиц.
Оптимизатор запросов СУБД MySQL автоматически использует оператор TRUNCATE , если оператор DELETE не содержит условия WHERE или конструкции LIMIT .
Однако у оператора TRUNCATE есть ряд отличий:
- Не срабатывают триггеры, в частности, триггер удаления
- Удаляет все строки в таблице, не записывая при этом удаление отдельных строк данных в журнал транзакций
- Сбрасывает счётчик идентификаторов до начального значения
- Чтобы использовать, необходимы права на изменение таблицы
Если в DELETE запросе используется JOIN , то необходимо указать из каких(ой) именно таблиц(ы) требуется удалять записи.
Например, нам необходимо удалить все бронирования жилья, в котором отсутствует кухня. Тогда запрос будет выглядеть следующим образом:
Если бы, помимо удаления бронирования, нам нужно было также удалить и жилье, то запрос приобрёл бы следующий вид:
Оператор SQL DELETE для удаления данных из таблицы
Оператор SQL DELETE и удаление данных с условием
Оператор SQL DELETE предназначен для удаления данных из таблицы. Он имеет следующий синтаксис:
Если не указывать условие, из таблицы будут удалены все строки. Кроме того, следует помнить, что могут быть удалены лишь строки с первичными ключами, на которые не ссылаются внешние ключи в других таблицах (более подробно об ограничениях удаления — в уроке Реляционная модель данных).
Если вы хотите выполнить запросы к базе данных из этого урока на MS SQL Server, но эта СУБД не установлена на вашем компьютере, то ее можно установить, пользуясь инструкцией по этой ссылке .
А скрипт для создания базы данных «Портал объявлений 1», её таблицы и заполения таблицы данных — в файле по этой ссылке .
Пример 1. Итак, есть база портала объявлений. В ней есть таблица Ads, содержащая данные о объявлениях, поданных за неделю (более подробно — в уроке об агрегатных функциях SQL, пример 7). Таблица выглядит так:
Id | Category | Part | Units | Money |
1 | Транспорт | Автомашины | 110 | 17600 |
2 | Недвижимость | Квартиры | 89 | 18690 |
3 | Недвижимость | Дачи | 57 | 11970 |
4 | Транспорт | Мотоциклы | 131 | 20960 |
5 | Стройматериалы | Доски | 68 | 7140 |
6 | Электротехника | Телевизоры | 127 | 8255 |
7 | Электротехника | Холодильники | 137 | 8905 |
8 | Стройматериалы | Регипс | 112 | 11760 |
9 | Досуг | Книги | 96 | 6240 |
10 | Недвижимость | Дома | 47 | 9870 |
11 | Досуг | Музыка | 117 | 7605 |
12 | Досуг | Игры | 41 | 2665 |
Требуется удалить из таблицы строку, имеющую идентификатор 4. Для этого пишем следующий запрос (на MS SQL Server — с предваряющей конструкцией USE adportal1;):
Пример 2. Можно удалить и несколько строк, если в условии применить оператор сравнения «больше» или «меньше» (на MS SQL Server — с предваряющей конструкцией USE adportal1;):
В результате в таблице останутся лишь следующие строки:
Id | Category | Part | Units | Money |
5 | Стройматериалы | Доски | 68 | 7140 |
6 | Электротехника | Телевизоры | 127 | 8255 |
7 | Электротехника | Холодильники | 137 | 8905 |
8 | Стройматериалы | Регипс | 112 | 11760 |
9 | Досуг | Книги | 96 | 6240 |
10 | Недвижимость | Дома | 47 | 9870 |
11 | Досуг | Музыка | 117 | 7605 |
12 | Досуг | Игры | 41 | 2665 |
Пример 3. Аналогично можно удалять строки с заданными значениями любого столбца. Удалим, например, строки об объявлениях, за которые выручено менее 10000 денежных единиц (запрос на MS SQL Server — с предваряющей конструкцией USE adportal1;):
Пример 4. Чтобы удалить все данные из таблицы ADS, достаточно написать следующий запрос:
Если после выполнения этого запроса обратиться к таблице ADS при помощи оператора SELECT, применяемого для получения выборки данных, то будет выведено сообщение о том, что эта таблица не содержит данных.
Оператору DELETE без условий и ограничений аналогичен оператор TRUNCATE TABLE. Он также удаляет из таблицы все строки, но выполняется намного быстрее.
Пример 5. Запрос на удаление всех данных из таблицы ADS при помощи оператора TRUNCATE TABLE будет следующим (на MS SQL Server — с предваряющей конструкцией USE adportal1;):
Примеры запросов к базе данных «Портал объявлений-1» есть также в уроках об операторах INSERT, UPDATE, HAVING и UNION.