Оператор SELECT Oracle 11g – Part2

Продолжение про оператор SELECT.

Как уже упоминалось  * – не самый правильной способ вывода данных. Открывается курсор и извлекаются данные, использую ресурсы сервера. Всегда такие запросы должны ограждаться дополнительными правилами, к примеру с оператором WHERE.

В примере используем трафаретный символ % – заменяет последовательность любых символов (число символов в последовательности может быть от 0 и более) в проверяемом значении. Символ подчеркивания (_) – вместо одного символа.

<Выражение для вычисления значения строки>

[NOT] LIKE <Выражение для вычисления значения строки>

[ESCAPE <символ>]

Предикат LIKE сравнивает строку, указанную в первом выражении, The LIKE conditions specify a test involving pattern matching. Whereas the equality operator (=) exactly matches one character value to another, the LIKE conditions match a portion of one character value to another by searching the first value for the pattern specified by the second. LIKE calculates strings using characters as defined by the input character set.

— like ‘6%0.509.487_’ Это условие означает, что между 6  и 0 может быть любое количество символов, а последний символ один и он неизвестен.

like ‘%/_%’ ESCAPE ‘/’ Экранизировали нижнее подчеркивание слешем и функцией escape объявили что надо искать символ и не зарезервированную марку. Оператор escape надо использовать серьезно, сильно может нагружать систему.

Виртуальная колонка ROWNUM – выводит порядковый номер. Этот колонка присутствует в любом SELECT. К примеру необходимо вывести записи с условием. Применяем оператор MINUS.

В примере полю ROWNUM дали аллиас r, выполняем SELECT from SELECT. Таблица внутри скобок будет существовать только на время транзакции. Как только последнюю запись извлечем транзакция будет закрыта. Или по другому, курсор будет закрыт. А теперь обратить если внимание появилось поле R которое уже не имеет отношения к rownum. И теперь над этой колонкой уже можно сравнения проводить.

Следующий пример. Задача суммировать оклады и вывести итог и сумму следующей строкой в таблице. То есть нам необходимо добавить в эту таблицу еще одно множество состоящее из одной строки. Где одно значение будет Varchar2 – ‘Итог’ второе сумма всех зарплат. Поможет функция новая для нас, групповой операции SUM() – она возвращает общий итог. Используем UNION для сложения множеств. Хотя эти операторы критики не выдерживают.

Если в функции COUNT используем * то она учитывает все значения включая null.Необходимо указать название поля, тогда посчитает только присвоенные значения.

Попробуем решить следующая задачу. Вывести сумму зарплаты по отделам и кол-во сотрудников работающих в отделах. Наскоком решить не получиться, необходимо применить группировку. Разобьем задачу на несколько этапов. Первый выявить все уникальные отделы, решается с помощью GROUP BY.

Теперь посчитаем с помощью count всех сотрудников вкаждой группе. COUNT это групповая функция, она будет работать в составе оператора GROUP BY. Группировку используют, когда какие-то множества необходимо разбить по признаку на подмножество и в нем собрать итоги.

Задействуем оператор ROLLUP. Cube. ROLLUP является и CUBE-функцией. CUBE группирует данные по нескольким измерениям. В частности, она суммирует данные, которые явно наличествуют в столбцах и может работать на нескольких столбцах.

   

Поиграемся с выводом и группировкой. Важно, мы обязаны использовать в SELECT только те поля которые используем в операторе GROUP BY.

Related Posts