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


CREATE VIEW aircrafts_seats AS



Pdf көрінісі
бет179/243
Дата21.07.2022
өлшемі3,05 Mb.
#147663
түріУчебно-практическое пособие
1   ...   175   176   177   178   179   180   181   182   ...   243
Байланысты:
Язык SQL. Базовый курс

CREATE VIEW aircrafts_seats AS
( SELECT a.aircraft_code, a.model,
left( a.model, strpos( a.model, ' ' ) - 1 ) AS company,
count( * ) AS seats_num
183


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.
10.* В реальной работе иногда возникают ситуации, когда требуется быстро запол-
нить таблицу тестовыми данными. В таком случае можно воспользоваться ко-
мандой INSERT с подзапросом. Конечно, число атрибутов и их типы данных
в подзапросе SELECT должны быть такими, какие ожидает получить команда
INSERT.
Продемонстрируем такой прием на примере таблицы «Места» (seats). Для того
чтобы выполнить команду, приведенную в этом упражнении, нужно либо сна-
чала удалить все строки из таблицы seats, чтобы можно было добавлять строки
в эту таблицу
DELETE FROM seats;
либо создать копию этой таблицы
CREATE TABLE seats_tmp AS SELECT * FROM seats;
чтобы работать с копией.
Итак, как сформировать тестовые данные автоматическим способом? Для этого
сначала нужно подготовить исходные данные, на основе которых и будут фор-
мироваться результирующие значения для вставки в таблицу «Места». В рам-
ках реляционной модели наиболее естественным будет представление исход-
ных данных в виде таблиц. Для формирования каждой строки таблицы «Места»
нужно задать код модели самолета, класс обслуживания и номер места, кото-
рый состоит из двух компонентов: номера ряда и буквенного идентификатора
позиции в ряду. Поскольку размеры и компоновки салонов различаются, необ-
ходимо для каждой модели указать предельное число рядов кресел в салонах
бизнес-класса и экономического класса, а также число кресел в каждом ряду.
Это число можно задать с помощью указания буквенного идентификатора для
самого последнего кресла в ряду. Например, если в ряду всего шесть кресел, то-
гда их буквенные обозначения будут такими: A, B, C, D, E, F. Таким образом,
последней будет буква F. В салоне бизнес-класса число мест в ряду меньше, чем
в салоне экономического класса, но для упрощения задачи примем эти числа
одинаковыми. В результате получим первую исходную таблицу с атрибутами:
184


– код модели самолета;
– номер последнего ряда кресел в салоне бизнес-класса;
– номер последнего ряда кресел в салоне экономического класса;
– буква, обозначающая позицию последнего кресла в ряду.
Классы обслуживания также поместим в отдельную таблицу. В ней будет всего
один атрибут — класс обслуживания.
Список номеров рядов также поместим в отдельную таблицу. В ней будет также
всего один атрибут — номер ряда.
Также поступим и с буквенными обозначениями кресел в ряду. В этой таблице
будет один атрибут — латинская буква, обозначающая позицию кресла.
В принципе можно было бы создать все четыре таблицы с помощью команды
CREATE TABLE и ввести в них исходные данные, а затем использовать эти табли-
цы в команде SELECT. Но команда SELECT позволяет использовать в предложе-
нии FROM виртуальные таблицы, которые можно создавать с помощью предло-
жения VALUES. Для этого непосредственно в текст команды записываются груп-
пы значений, представляющие собой строки такой виртуальной таблицы. Каж-
дая такая строка заключается в круглые скобки. Вся эта конструкция получает
имя таблицы и к ней прилагается список атрибутов. Это выглядит, например,
так:


Достарыңызбен бөлісу:
1   ...   175   176   177   178   179   180   181   182   ...   243




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

    Басты бет