Учебное пособие Санкт-Петербург «бхв-петербург»


 Удаление строк из таблиц



Pdf көрінісі
бет176/256
Дата18.11.2022
өлшемі1.88 Mb.
#465124
түріУчебное пособие
1   ...   172   173   174   175   176   177   178   179   ...   256
sql osnovi yazika

Глава 7. Изменение данных
7.3. Удаление строк из таблиц
Начнем рассмотрение команды DELETE, предназначенной для удаления данных из
таблиц, с того, что, как и при изучении команды INSERT, покажем, как можно орга-
низовать запись выполненных операций в журнальную таблицу. Эта команда анало-
гична команде, уже рассмотренной в предыдущем разделе. В ней также «полезная»
работа выполняется в общем табличном выражении, а запись в журнальную табли-
цу — в основном запросе.
WITH delete_row AS
( DELETE FROM aircrafts_tmp
WHERE model ~ '^Bom'
RETURNING *
)
INSERT INTO aircrafts_log
SELECT dr.aircraft_code, dr.model, dr.range,
current_timestamp, 'DELETE'
FROM delete_row dr;
Выполнив команду, в ответ получим сообщение
INSERT 0 1
Напомним, что выведенное сообщение относится непосредственно к внешнему за-
просу, в котором выполняется операция INSERT, добавляющая строку в журнальную
таблицу.
Посмотрим историю изменений строки с описанием самолета Bombardier CRJ-200:
SELECT * FROM aircrafts_log
WHERE model ~ '^Bom' ORDER BY when_add;
-[ RECORD 1 ]--+---------------------------
aircraft_code | CR2
model
| Bombardier CRJ-200
range
| 2700
when_add
| 2017-02-05 00:27:38.591958
operation
| INSERT
-[ RECORD 2 ]--+---------------------------
aircraft_code | CR2
model
| Bombardier CRJ-200
range
| 3240
when_add
| 2017-02-05 00:27:56.688933
operation
| UPDATE
224


7.3. Удаление строк из таблиц
-[ RECORD 3 ]--+---------------------------
aircraft_code | CR2
model
| Bombardier CRJ-200
range
| 3240
when_add
| 2017-02-05 00:34:59.510911
operation
| DELETE
Для удаления конкретных строк из данной таблицы можно использовать информа-
цию не только из нее, но также и из других таблиц. Выбирать строки для удаления
можно двумя способами: использовать подзапросы к этим таблицам в предложении
WHERE или указать дополнительные таблицы в предложении USING, а затем в пред-
ложении WHERE записать условия соединения таблиц. Поскольку первый способ яв-
ляется традиционным, то мы покажем второй из них.
Предположим, что руководство авиакомпании решило удалить из парка самолетов
машины компаний Boeing и Airbus, имеющие наименьшую дальность полета.
Решим эту задачу следующим образом. В общем табличном выражении с помощью
условия model ~'^Airbus' OR model ~'^Boeing' в предложении WHERE отберем
модели только компаний Boeing и Airbus. Затем воспользуемся оконной функцией
rank и произведем ранжирование моделей каждой компании по возрастанию даль-
ности полета. Те модели, ранг которых окажется равным 1, будут иметь наименьшую
дальность полета.
В предложении USING сформируем соединение таблицы aircrafts_tmp с времен-
ной таблицей min_ranges, а затем в предложении WHERE зададим условия для отбо-
ра строк.


Достарыңызбен бөлісу:
1   ...   172   173   174   175   176   177   178   179   ...   256




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет