Учебно-практическое пособие москва 2017 ббк


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



Pdf көрінісі
бет171/243
Дата21.07.2022
өлшемі3,05 Mb.
#147663
түріУчебно-практическое пособие
1   ...   167   168   169   170   171   172   173   174   ...   243
Байланысты:
Язык SQL. Базовый курс

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
175


Напомним, что выведенное сообщение относится непосредственно к внешнему за-
просу, в котором выполняется операция 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
--[ 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   ...   167   168   169   170   171   172   173   174   ...   243




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

    Басты бет