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



Pdf көрінісі
бет184/256
Дата18.11.2022
өлшемі1.88 Mb.
#465124
түріУчебное пособие
1   ...   180   181   182   183   184   185   186   187   ...   256
sql osnovi yazika

Глава 7. Изменение данных
Обратите внимание, что в результате были выведены комбинированные стро-
ки, полученные при соединении таблицы aircrafts_tmp с временной табли-
цей aicrafts_seats, указанной в предложении USING. Но удалены были, ко-
нечно, строки из таблицы aircrafts_tmp.
Задание.
Предложите другой вариант решения этой задачи. Например, можно
поступить так: оставить предложение WITH без изменений, из команды DELETE
убрать предложение USING, а в предложении WHERE вместо соединения таблиц
использовать подзапрос с предикатом IN для получения списка кодов удаляе-
мых моделей самолетов.
Еще один вариант решения задачи связан с использованием представлений, ко-
торые мы рассматривали в главе 5. Можно создать представление на основе
таблиц «Самолеты» (aircrafts) и «Места» (seats) и перенести конструкцию
с функциями left и strpos в представление. В нем будут вычисляемые столб-
цы: company — «Компания-производитель самолетов» и seats_num — «Число
мест».
CREATE VIEW aircrafts_seats AS
( SELECT a.aircraft_code,
a.model,
left( a.model,
strpos( a.model, ' ' ) - 1 ) AS company,
count( * ) AS seats_num
FROM aircrafts a, seats s
WHERE a.aircraft_code = s.aircraft_code
GROUP BY 1, 2, 3
);
Имея это представление, можно использовать его в конструкции WITH. При этом
вызов функции rank может упроститься:
rank() OVER ( PARTITION BY company ORDER BY seats_num )
Для выбора удаляемых строк в команде DELETE можно использовать, например,
подзапрос в предикате IN. При этом не забывайте, что значение столбца rank
для них будет равно 1.
Еще одна идея: для выбора минимальных значений числа мест в самолетах
можно попытаться в качестве замены оконной функции rank использовать
предложения LIMIT 1 и ORDER BY. В таком случае не потребуется также и функ-
ция min.
234


Контрольные вопросы и задания
10.* В реальной работе иногда возникают ситуации, когда требуется быстро за-
полнить таблицу тестовыми данными. В таком случае удобно воспользоваться
командой INSERT с подзапросом. Конечно, число атрибутов и их типы данных
в подзапросе SELECT должны быть такими, какие ожидает получить команда
INSERT.
Продемонстрируем такой прием на примере таблицы «Места» (seats). Для того
чтобы выполнить команду, приведенную в этом упражнении, нужно либо сна-
чала удалить все строки из таблицы seats, чтобы можно было добавлять строки
в эту таблицу


Достарыңызбен бөлісу:
1   ...   180   181   182   183   184   185   186   187   ...   256




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

    Басты бет