loading..
Русский    English
18:19
листать

Оператор DELETE

Оператор   DELETE — в языках, подобных SQL, DML-операция удаления записей из таблицы.DELETE удаляет строки из временных или постоянных базовых таблиц, представлений или курсоров, причем в двух последних случаях действие оператора распространяется на те базовые таблицы, из которых извлекались данные в эти представления или курсоры. Оператор удаления имеет простой синтаксис:

  1. DELETE FROM <имя таблицы >
  2. [WHERE <предикат>];

Если предложение WHERE отсутствует, удаляются все строки из таблицы или представления (представление должно быть обновляемым). Более быстро эту операцию (удаление всех строк из таблицы) можно в Transact-SQL также выполнить с помощью команды

  1. TRUNCATE TABLE <имя таблицы>

Однако есть ряд особенностей в реализации команды TRUNCATE TABLE, которые следует иметь в виду:

не журнализируется удаление отдельных строк таблицы; в журнал записывается только освобождение страниц, которые были заняты данными таблицы;

не отрабатывают триггеры, как следствие, эта команда неприменима, если на данную таблицу имеется ссылка по внешнему ключу;

значение счетчика (IDENTITY) сбрасывается в начальное значение.

Пример 6.3.1.

Требуется удалить из таблицы Laptop все портативные компьютеры с размером экрана менее 12 дюймов.

  1. DELETE FROM Laptop
  2. WHERE screen < 12

Все блокноты можно удалить с помощью оператора

  1. DELETE FROM Laptop

или

  1. TRUNCATE TABLE Laptop

Transact-SQL расширяет синтаксис оператора DELETE, вводя дополнительное предложение FROM:

  1. FROM <источник табличного типа>

При помощи источника табличного типа можно конкретизировать данные, удаляемые из таблицы в первом предложении FROM.

При помощи этого предложения можно выполнять соединения таблиц, что логически заменяет использование подзапросов в предложении WHERE для идентификации удаляемых строк. Поясним сказанное на примере.

Пример 6.3.2.

Пусть требуется удалить те модели ПК из таблицы 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-значение, что и используется для идентификации подлежащих удалению строк.

Тэги:
ALL AVG battles CASE CAST CHAR CHARINDEX classes COALESCE Convert COUNT CTE DATEDIFF DATEPART DATETIME DELETE DISTINCT EXCEPT EXISTS EXTRACT FROM FULL JOIN GROUP BY Guadalcanal HAVING IN INNER JOIN insert INTERSECT ISNULL laptop LEFT LEFT OUTER JOIN LEN maker MAX MIN MySQL NOT IN NULL ORDER BY Outcome outcomes OVER PARTITION BY pc PIVOT PostgreSQL printer product Больше тэгов
Учебник обновлялся
несколько дней назад
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.
Rambler's Top100