Частичный вывод запрошенных данных

Операции соединения подзапросов

Операции соединения подзапросов языка SQL – это реализация операторов реляционной алгебры объединения, пересечения и вычитания. Для выполнения этих операторов требуется, чтобы элементы обоих множеств были взаимно однородными, то есть содержали элементы одинаковой природы, или, если выражаться в терминах баз данных, строки, состоящие из атрибутов одинаковых типов. Сами множества строк создаются при помощи подзапросов.

Существует четыре операции соединения подзапросов:

UNION – объединение строк из обоих подзапросов; в результате остаются строки из обоих подзапросов, причем полностью повторяющиеся строки удаляются;

UNION ALL – объединение строк из обоих подзапросов; в результате остаются строки из обоих подзапросов, причем полностью повторяющиеся строки остаются;

INTERSECT – пересечение строк из обоих подзапросов; в результате остаются строки, присутствующие в обоих подзапросах;

MINUS – вычитание результатов одного подзапроса из результатов второго подзапроса.

Пример:

-- получение списка студентов(их номера зачеток),не имеющих хобби

SELECT N_z FROM Students

MINUS

SELECT N_z FROM St_Hobby;

Частичный вывод запрошенных данных

Необходимость частичного вывода запрошенных данных часто обусловлена либо предполагаемым большим объемом данных, когда нужно предварительно проверить адекватность запроса и полученных данных, либо требованиями к реализации конкретной задачи (например, постраничный вывод данных). Например, при помощи использования функции агрегирования MAX, можно получить информацию о том, кто является самым «активным» студентом, но невозможно вывести информацию о двух самых активных , трех и т.д.

СУБД ORACLE динамически присваивает порядковый номер каждой записи, возвращаемой в результате выполнения любого запроса, по умолчанию скрывая его от пользователя. Первая (или единственная) возвращенная запись получит номер 1 независимо от своего положения в таблице. На эти номера можно ссылаться в параметре WHERE. Если в операторе SELECT заданы параметры сортировки результатов запроса, то можно добиться того, что СУБД покажет 5, 50 или 500 наиболее важных записей.

Синтаксис, позволяющий это реализовать, выглядит следующим образом:

 

SELECT имя_столбца_1 [, имя_столбца_2…]

FROM имя_таблицы

WHERE (ROWNUM >= нижняя_граница)

AND (ROWNUM <= верхняя_граница)

ORDER BY столбец_сортировки;

 

При необходимости можно указывать либо нижнюю границу, либо верхнюю, либо обе. Например, для того чтобы вывести двух лидеров (самых “активных” студентов) на основе количества их хобби, можно выполнить следующий запрос:

 

SELECT N_z , COUNT(N_z)

FROM Students

WHERE ROWNUM<=2

GROUP BY N_z

ORDER BY COUNT(N_z)DESC;