CROSS JOIN
-- список номеров рядов кресел
( VALUES ( '1' ), ( '2' ), ( '3' ), ( '4' ), ( '5' ),
( '6' ), ( '7' ), ( '8' ), ( '9' ), ( '10' ),
( '11' ), ( '12' ), ( '13' ), ( '14' ), ( '15' ),
( '16' ), ( '17' ), ( '18' ), ( '19' ), ( '20' ),
( '21' ), ( '22' ), ( '23' ), ( '24' ), ( '25' ),
( '26' ), ( '27' ), ( '28' ), ( '29' ), ( '30' )
) AS seat_rows ( seat_row )
CROSS JOIN
-- список номеров (позиций) кресел в ряду
( VALUES ( 'A' ), ( 'B' ), ( 'C' ), ( 'D' ), ( 'E' ),
( 'F' ), ( 'G' ), ( 'H' ), ( 'I' )
) AS letters ( letter )
-- включаем в результат лишь те строки, у которых номер ряда
-- (число) и позиция в ряду (латинская буква) соответствуют
-- диапазонам, указанным в первой виртуальной таблице
WHERE
CASE WHEN fare_condition = 'Business'
THEN seat_row::integer <= max_seat_row_business
WHEN fare_condition = 'Economy'
THEN seat_row::integer > max_seat_row_business
AND seat_row::integer <= max_seat_row_economy
END
AND letter <= max_letter;
Задание:
модифицируйте команду с учетом того, что в салоне бизнес-класса
число мест в ряду должно быть меньше, чем в салоне экономического класса (в
приведенном решении мы для упрощения задачи принимали эти числа одина-
ковыми).
Попробуйте упростить подзапрос, отвечающий за формирование списка номе-
ров рядов кресел:
( VALUES ( '1' ), ( '2' ), ( '3' ), ( '4' ), ( '5' ), ...
Воспользуйтесь функцией generate_series, описанной в разделе документации
9.24 «Функции, возвращающие множества».
187
8 Индексы
Индексы позволяют повысить производительность базы данных. PostgreSQL поддерживает
различные типы индексов. Мы ограничимся рассмотрением только индексов на основе B-
дерева.
Индекс — это специальная структура данных, которая связана с таблицей и создается
на основе данных, содержащихся в ней. Основная цель создания индексов — повы-
шение производительности функционирования базы данных.
Достарыңызбен бөлісу: |