Это старая версия документа!
Оператор DELETE удаляет строки из временных или постоянных базовых таблиц, представлений или курсоров, причем в двух последних случаях действие оператора распространяется на те базовые таблицы, из которых извлекались данные в эти представления или курсоры. Оператор удаления имеет простой синтаксис:
1. DELETE FROM <имя таблицы> 2. [WHERE <предикат>];
Если предложение WHERE отсутствует, удаляются все строки из таблицы или представления (представление должно быть обновляемым). Более быстро эту операцию (удаление всех строк из таблицы) можно в Transact-SQL также выполнить с помощью команды
1. TRUNCATE TABLE <имя таблицы>
Однако есть ряд особенностей в реализации команды TRUNCATE TABLE, которые следует иметь в виду:
Пример
Требуется удалить из таблицы Laptop все портативные компьютеры с размером экрана менее 12 дюймов.
1. DELETE FROM Laptop 2. WHERE screen < 12;
Все блокноты можно удалить с помощью оператора
1. DELETE FROM Laptop;
или
1. TRUNCATE TABLE Laptop;
Transact-SQL расширяет синтаксис оператора DELETE, вводя дополнительное предложение FROM:
FROM <источник табличного типа>
При помощи источника табличного типа можно конкретизировать данные, удаляемые из таблицы в первом предложении FROM.
При помощи этого предложения можно выполнять соединения таблиц, что логически заменяет использование подзапросов в предложении WHERE для идентификации удаляемых строк. Поясним сказанное на примере.
Пример Пусть требуется удалить те модели ПК из таблицы Product, для которых нет соответствующих строк в таблице PC. Используя стандартный синтаксис, эту задачу можно решить следующим запросом:
1. DELETE FROM Product 2. WHERE type = 'pc' AND 3. model NOT IN (SELECT model 4. FROM PC 5. );
Заметим, что предикат type = 'pc' необходим здесь, чтобы не были удалены также модели принтеров и портативных компьютеров.
Эту же задачу можно решить с помощью дополнительного предложения FROM следующим образом:
1. DELETE FROM Product 2. FROM Product pr LEFT JOIN 3. PC ON pr.model = PC.model 4. WHERE type = 'pc' AND 5. PC.model IS NULL;
Здесь применяется внешнее соединение, в результате чего столбец PC.model для моделей ПК, отсутствующих в таблице PC, будет содержать NULL-значение, что и используется для идентификации подлежащих удалению строк.
Оператор TRUNCATE TABLE