2022-05-18 14:24:45
Временные таблицыБывает, хочется собрать данные из нескольких таблиц в одну, и дальше с ними поработать. Например, для удобства выбрать вакансии вместе с работодателями и регионами:
select v.*, e.name, a.name
from vacancy as v
join employer as e on e.id = v.employer_id
join area as a on a.id = v.area_id
Теперь хочется запускать запросы по сводным данным. Есть три способа это сделать:
1) Common Table Expression (CTE)
2) Представление (view)
3) Временная таблица (temporary table)
CTE я описывал в отдельной заметке, не буду повторяться. Важно, что CTE каждый раз вычисляется заново, так что если наш сводный селект не особо быстрый — запросы по нему будут тормозить.
Представление — это такой именованный селект, к которому можно обращаться как к обычной таблице:
create view vacancy_view as
select ... from ... join ...;
select * from vacancy_view;
Очень похоже на CTE, только не приходится каждый раз повторять селект в запросе — достаточно написать название представления. Как и CTE, представление тоже вычисляется каждый раз.
Во многих СУБД есть материализованные представления, которые сохраняют данные на диск — но не в SQLite.
Временная таблица — точно такая же, как настоящая: хранит данные на диске, можно построить индексы для быстрой выборки. Но существует она, только пока открыто соединение с базой данных.
create temporary table vacancy_temp as
select ... from ... join ...;
select * from vacancy_temp;
Временные таблицы отлично подходят для экспериментов, когда вы только знакомитесь с данными. Можно позволить себе любые безумства — ведь после отключения от базы все будет забыто ツ
песочница
476 viewsedited 11:24