Система запросов реляционной СУБД, вычисление кортежей, доменов и отношений. Основные операции над отношениями (декартовое произведение, селекция, проекция, объединение)
Система запросов реляционной СУБД
Запрос представляет собой спецификацию (предписание) на специальном языке (языке базы данных) для обработки данных. В реляционных СУБД запросы к базе данных выражаются, соответственно, на языке SQL.
Команды SQL делятся на несколько типов, см. пункт 9: Типы комманд SQL-92.
С точки зрения решаемых информационных задач и формы результатов исполнения запросов их можно разделить на три группы:
- запросы на выборку данных;
- запросы на изменение данных;
- управляющие запросы.
Запросы на выборку
Запросы на выборку относятся к одному из наиболее часто применяемых видов запросов. Данный вид запросов реализуется SQL-инструкцией SELECT с предложением FROM.
Результаты запросов на выборку помещаются в специальную временную таблицу, размещаемую на период исполнения («открытия») запроса в оперативной памяти.
В большинстве СУБД наборы данных, формируемые запросами на выборку, являются динамическими. Динамичность означает, что с результатом исполнения запроса можно производить все те же операции, что и с данными в режиме открытой таблицы. Запросы на выборку классифицируются по двум критериям — по формированию условий выборки и по схеме отбора данных.
По формированию условий выборки запросы можно подразделить на три группы:
- запросы со статическими (неизменяемыми) условиями отбора;
- запросы с параметрами;
- запросы с подчиненными запросами.
В запросах первого вида условия выборки данных определяются при формировании самого запроса и являются неизменными при всех последующих выполнениях запроса. В запросы с параметрами вставляются специальные средства для диалогового задания пользователем конкретных параметров в условиях отбора в момент исполнения запроса. Таким образом, при запуске на исполнение запроса с параметрами пользователь может варьировать и уточнять условия выборки данных. В запросах третьей группы условия отбора данных определяются по результатам исполнения вставленной в тело внешнего запроса внутренней инструкции SELECT.
По схеме отбора данных запросы на выборку подразделяются также на три группы:
- запросы на выборку данных из одной таблицы;
- запросы на выборку данных в один набор из нескольких таблиц;
- запросы на объединение данных.
Различают запросы на выборку всех записей с произвольным набором полей (выборка всех записей, но с указанными столбцами) и запросы на выборку подмножества записей (выборка с условием WHERE).
В запросах на выборку данных широко применяются предикаты отбора ALL, DISTINCT, DISTINCTROW и TOP n.
Предикат DISTINCT используется для исключения в наборе отбираемых данных тех записей, значения которых по определенному полю повторяются, т. е. уже раз вошли в набор.
Предикат DISTINCTROW имеет аналогичное предикату DISTINCT назначение для исключения из набора тех записей, значения которых повторяются по всем полям, включенным в набор данных.
Предикат TOP n обеспечивает включение в набор данных первых п записей, сформированных по условию отбора.
В запросах на выборку помимо предложений FROM и WHERE используются предложения GROUP ВY, НАVING и ORDER ВY для дополнительной обработки отбираемых записей.
Предложение GROUP ВY объединяет (группирует) записи с одинаковыми значениями определенных полей в одну запись.
Предложение НАVING выполняет функцию предложения WHERE, позволяя задавать дополнительные условия для отбора сгруппированных предложением GRОUP BY записей.
Предложение ORDER BY обеспечивает сортировку отобранных записей в зависимости от способа ASC (по возрастанию) или DESC (по убыванию).
Запросы на выборку данных из нескольких таблиц, как правило, предназначены для решения логических информационных задач и, в свою очередь, подразделяются на три группы:
- запросы на сочетание данных;
- запросы на соединение данных;
- запросы на объединение данных.
Запросы на сочетание строятся на основе операции скалярного произведения реляционных таблиц и по смыслу направлены на формирование полного набора сочетании строк-записей, представленных в исходных таблицах. Запросы на сочетание строятся на основе SQL-инструкции SELECT и предложения FROM c пpoстым перечислением отбираемых полей и их таблиц.
Запросы на соединение, в свою очередь, подразделяются на запросы на основе внутреннего соединения (INNER JOIN) и запросы на основе правого или левого внешнего соединения (RIGHT JOIN и LEFT JOIN).
Запросы на выборку, строящиеся на основе внутреннего соединения, реализуют рассматриваемую по реляционной модели данных операцию соединения реляционных таблиц.
Запросы на внешнее соединение строятся на основе модификации операции соединения. При левом внешнем соединении (LEFT JOIN) строки итоговой таблицы образуются из всех строк первой (левой) таблицы с «прицеплением» строк второй таблицы, если значения поля соединения совпадают. Если среди строк второй (правой) таблицы нет строк с соответствующим значением поля соединения, то в итоговой таблице присоединяемые поля заполняются пустыми значениями. При правом внешнем соединении (RIGHT JOIN) строки итоговой таблицы строятся по противоположному правилу.
Запросы на объединение данных реализуют операцию объединения реляционных таблиц и решают задачи создания наборов данных, объединяющих однотипные по смыслу записи (по группам однотипных полей) из нескольких таблиц. Строятся запросы на объединение через SQL-инструкцию SELECT—UNION SELECT. При этом запрос состоит из первой инструкции SELECT, в которой перечисляются отбираемые поля и условия отбора записей из первой таблицы, и последующих инструкций UNION SELECT, в которых указываются отбираемые поля и условия отбора записей из других таблиц. Обязательным условием является одинаковое количество отбираемых полей в первой инструкции SELECT и последующих инструкциях UNION SELECT. При этом типы и длина полей в первой инструкции и последующих инструкциях могут не совпадать.
При необходимости в итоговом наборе данных наименования отбираемых полей можно изменить через ключевое слово AS после соответствующего поля в первой инструкции SELECT.
По умолчанию повторяющиеся записи не возвращаются, но через использование предиката ALL после ключевого слова UNION можно обеспечить режим отбора всех, в том числе и повторяющихся записей.
Групповые операции. В процессе отбора и обработки данных важное значение имеют группирование данных по значениям какого-либо поля и осуществление тех или иных операций над сгруппированными записями. Групповые операции осуществляются на основе SQL-предложения GROUP BY в сочетании со статистическими функциями SQL. В большинстве диалектов языка SQL в состав инструкции SELECT допускается включение статистических функций SQL, которые осуществляют те или иные групповые вычислительные операции над отбираемыми записями.
SUM(выражение) – вычисляет сумму набора значений;
AVG(выражение) – вычисляет среднее арифметическое набора чисел;
Min(выражение) – вычисляет минимальное значение из набора значений;
Мах(выражение) – вычисляет макс. значение из набора значений;
StDev(выражение) – выч. среднеквадратичное откл-ние набора значений;
Count(выражение) – вычисляет кол-во записей, содержащихся в наборе;
Var(выражение) – вычисляет дисперсию по набору значений.
К числу функций, используемых в групповых операциях, относятся также функции First(выражение) и Last(выpaжeниe), вычисляющие (возвращающие), соответственно, первое и последнее значения поля в наборе данных. В выражениях в качестве аргумента допускается использование имен полей таблиц.
Собственно сами групповые вычисления задаются посредством включения в SQL-инструкцию SELECT вычисляемого поля на основе выражения со статистическими функциями, выполняемыми над наборами данных, формируемыми предложением GROUP BY.