Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Работа с Oracle / 2 - Простые запросы Oracle.docx
Скачиваний:
6
Добавлен:
28.06.2021
Размер:
758.03 Кб
Скачать
    1. Математические функции

Оперируют числовыми значениями в соответствии с математическими правилами. Подробно описана функция ROUND, затем следует таблица с другими математическими функциями, присутствующими в реализациях SQL.

Функция ROUND

Округляет число до заданного количества десятичных знаков. Число, которое надо округлить, – первый параметр, количество десятичных знаков – второй:

Другие математические функции

В таблицеприводится список наиболее распространенных математических функций. Общий синтаксис для них одинаков: ИМЯ_ФУНКЦИИ (выражение)

Функция

Описание

ABS

Абсолютное значение числа

COS

Тригонометрический косинус угла (в радианах)

EXP

Экспонента данного числа

POWER

Возведение числа в степень (параметры – число и степень)

SIN

Тригонометрический синус угла (в радианах)

TAN

Тригонометрический тангенс угла (в радианах)

    1. Функции преобразования

Преобразуют данные одного типа в другой.

Функция CAST

Служит для преобразования данных одного типа в другой. Общий синтаксис функции: CAST (выражение AS тип_данных). Следующий запрос выводит цену книги с кодом 1 с указанием денежной единицы (рубли). Числовое значение конвертируется в строку символов, чтобы обеспечить конкатенацию со строкой:

  1. Агрегирующие функции и группировка строк

Агрегирующие функции – это функции, объединяющие несколько строк в одну. В таблице приведены агрегирующие функции, которые поддерживаются в большинстве реализаций SQL.

Функция

Описание

AVG

Вычисляет среднее значение столбца или выражения

COUNT

Подсчитывает число значений в колонке. Слово DISTINCT позволяет подсчитать количество уникальных значений

MAX

Находит максимальное значение в поле

MIN

Находит минимальное значение в поле

SUM

Складывает (находит общую сумму) значения в поле

Примеры использования агрегирующих функций.

Определение средней цены книги. Функция AVG используется внутри функции Round для получения результата в рублях и копейках:

Определение числа названий книг в таблице Books:

Определения количества разных статусов пользователей:

Определение размера самого длинного и самого короткого названия книги, из числа имеющихся в интернет-магазине:

Использование функции в конструкции WHERE приведет к ошибке. В следующем примере показана попытка извлечения из таблицы Catalogs записи с максимальным значением поля cat_ID:

Решение задачи следует искать в использовании конструкции ORDER BY:

  1. Выражение group by

Если вы используете агрегирующую функцию, то получите одну строку во всем запросе. Выражение GROUP BY указывает СУБД, как объединять строки, отобранные запросом в группы и применять агрегирующие функции к каждой группе, возвращая по одной строке из списка результатов для каждой группы.

Перечислить все каталоги с указанием количества наименований книг в каждом каталоге:

Это похоже на запрос промежуточных итогов. СУБД будет сортировать строки, выбранные запросом, по столбцам, перечисленным после GROUP BY, поэтому группы будут возвращены в восходящем порядке (если не будет указан другой порядок после ORDER BY).

Без выражения GROUP BY запрос теряет логичность. Правило: когда запрос включает агрегирующую функцию, каждое поле в результатах запроса должно включаться либо в агрегирующую функцию, либо в выражение GROUP BY.

Часто при задании условий требуется ограничить выборку по результату функ­ции (например, выбрать каталоги, где число товарных позиций больше 5). Использование для этих целей конструкции where приводит к ошибке. Для решения этой проблемы вместо ключевого слова where используется ключевое слово having, располагающееся за конструкцией group by:

При этом в случае использования ключевого слова where сначала производится выборка из таблицы с применением условия и лишь затем группировка результата. В случае же использования ключевого слова having сначала происходит группировка таблицы и лишь затем выборка с применением условия. Допускается использование условия having без группировки group by.

  1. Операторы составных запросов

Иногда нужно выполнять несколько запросов и объединять результаты в одном списке.

    1. Оператор UNION

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

Вывести список всех клиентов, имеющих статус active и статус gold:

12.2. Оператор UNION ALL

Работает так же, как UNION, но не исключает повторяющиеся значения из списка результатов.

12.3. Оператор INTERSECT

Находит значения, входящие в результаты как одного, так и другого запроса (пересечение значений в двух списках результатов). Следующий запрос выдает список клиентов со статусом active, которые делали заказы в марте 2009 года:

12.4. Оператор MINUS

Возвращает отличия между двумя списками результатов путем выдачи значений первогосписка, отсутствующих во втором. Следующий запрос выдает список клиентов со статусом active, которые не делали заказы в январе 2009 года:

Пример выполнения задания

  1. Создадим простой запрос на выборку к таблице books, который выводит максимальную и минимальную цены товарных позиций, присваивая им псевдонимы maximum и minimum:

  1. Создадим простой запрос на выборку к таблице books, который выведет количество записей, соответствующих каждому из уникальных значений b_cat_ID. Для этого используем функцию COUNT вместе с выражением GROUP BY: