
- •Выполнение простых запросов в oracle с помощью языка запросов данных dql
- •Базовый запрос select
- •Псевдонимы полей
- •Сортировка результатов (order by)
- •Фильтрация строк (where)
- •Операторы сравнения
- •Объединительные операторы
- •Оператор in
- •Оператор exists
- •Арифметические операторы
- •Основные функции sql
- •Символьные функции
- •Математические функции
- •Функции преобразования
- •Агрегирующие функции и группировка строк
- •Выражение group by
Математические функции
Оперируют числовыми значениями в соответствии с математическими правилами. Подробно описана функция ROUND, затем следует таблица с другими математическими функциями, присутствующими в реализациях SQL.
Функция ROUND
Округляет число до заданного количества десятичных знаков. Число, которое надо округлить, – первый параметр, количество десятичных знаков – второй:
Другие математические функции
В таблицеприводится список наиболее распространенных математических функций. Общий синтаксис для них одинаков: ИМЯ_ФУНКЦИИ (выражение)
Функция |
Описание |
ABS |
Абсолютное значение числа |
COS |
Тригонометрический косинус угла (в радианах) |
EXP |
Экспонента данного числа |
POWER |
Возведение числа в степень (параметры – число и степень) |
SIN |
Тригонометрический синус угла (в радианах) |
TAN |
Тригонометрический тангенс угла (в радианах) |
Функции преобразования
Преобразуют данные одного типа в другой.
Функция CAST
Служит для преобразования данных одного типа в другой. Общий синтаксис функции: CAST (выражение AS тип_данных). Следующий запрос выводит цену книги с кодом 1 с указанием денежной единицы (рубли). Числовое значение конвертируется в строку символов, чтобы обеспечить конкатенацию со строкой:
Агрегирующие функции и группировка строк
Агрегирующие функции – это функции, объединяющие несколько строк в одну. В таблице приведены агрегирующие функции, которые поддерживаются в большинстве реализаций SQL.
Функция |
Описание |
AVG |
Вычисляет среднее значение столбца или выражения |
COUNT |
Подсчитывает число значений в колонке. Слово DISTINCT позволяет подсчитать количество уникальных значений |
MAX |
Находит максимальное значение в поле |
MIN |
Находит минимальное значение в поле |
SUM |
Складывает (находит общую сумму) значения в поле |
Примеры использования агрегирующих функций.
Определение средней цены книги. Функция AVG используется внутри функции Round для получения результата в рублях и копейках:
Определение числа названий книг в таблице Books:
Определения количества разных статусов пользователей:
Определение размера самого длинного и самого короткого названия книги, из числа имеющихся в интернет-магазине:
Использование функции в конструкции WHERE приведет к ошибке. В следующем примере показана попытка извлечения из таблицы Catalogs записи с максимальным значением поля cat_ID:
Решение задачи следует искать в использовании конструкции ORDER BY:
Выражение group by
Если вы используете агрегирующую функцию, то получите одну строку во всем запросе. Выражение GROUP BY указывает СУБД, как объединять строки, отобранные запросом в группы и применять агрегирующие функции к каждой группе, возвращая по одной строке из списка результатов для каждой группы.
Перечислить все каталоги с указанием количества наименований книг в каждом каталоге:
Это похоже на запрос промежуточных итогов. СУБД будет сортировать строки, выбранные запросом, по столбцам, перечисленным после GROUP BY, поэтому группы будут возвращены в восходящем порядке (если не будет указан другой порядок после ORDER BY).
Без выражения GROUP BY запрос теряет логичность. Правило: когда запрос включает агрегирующую функцию, каждое поле в результатах запроса должно включаться либо в агрегирующую функцию, либо в выражение GROUP BY.
Часто при задании условий требуется ограничить выборку по результату функции (например, выбрать каталоги, где число товарных позиций больше 5). Использование для этих целей конструкции where приводит к ошибке. Для решения этой проблемы вместо ключевого слова where используется ключевое слово having, располагающееся за конструкцией group by:
При этом в случае использования ключевого слова where сначала производится выборка из таблицы с применением условия и лишь затем группировка результата. В случае же использования ключевого слова having сначала происходит группировка таблицы и лишь затем выборка с применением условия. Допускается использование условия having без группировки group by.
Операторы составных запросов
Иногда нужно выполнять несколько запросов и объединять результаты в одном списке.
Оператор UNION
Добавляет строки списка результатов одного запроса к списку результатов другого. Кроме того, подобно ключевому слову DISTINCT, исключает все повторяющиеся значения. Операция разрешена, если оба запроса совместимы для соединения, то есть содержат одинаковое количество полей и типы данных соответствующих полей совпадают.
Вывести список всех клиентов, имеющих статус active и статус gold:
12.2. Оператор UNION ALL
Работает так же, как UNION, но не исключает повторяющиеся значения из списка результатов.
12.3. Оператор INTERSECT
Находит значения, входящие в результаты как одного, так и другого запроса (пересечение значений в двух списках результатов). Следующий запрос выдает список клиентов со статусом active, которые делали заказы в марте 2009 года:
12.4. Оператор MINUS
Возвращает отличия между двумя списками результатов путем выдачи значений первогосписка, отсутствующих во втором. Следующий запрос выдает список клиентов со статусом active, которые не делали заказы в январе 2009 года:
Пример выполнения задания
Создадим простой запрос на выборку к таблице books, который выводит максимальную и минимальную цены товарных позиций, присваивая им псевдонимы maximum и minimum:
Создадим простой запрос на выборку к таблице books, который выведет количество записей, соответствующих каждому из уникальных значений b_cat_ID. Для этого используем функцию COUNT вместе с выражением GROUP BY: