Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
всис-упор.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
727.54 Кб
Скачать

Функции условной подстановки значений

Дают возможность выполнить "преобразование" аргументов, а по сути — условную замену конкретных величин. Часть таких функций связана с желательной для программиста переработкой отсутствующих значений (в отдельном случае Not a Number), а функция DECODE — нет:

Функция

Логический эквивалент

NVL (E1, E2)

IF E1 IS NULL THEN E2 ELSE E1

NVL2 (E1, E2, E3)

IF E1 IS NULL THEN E3 ELSE E2

NANVL (E1, E2)(IEEE 754)

IF E1 IS NAN THEN E2 ELSE E1

COALESCE (E1, E2, E3, …[9-)

первое по списку Ei со значением не NULL

DECODE ( E1, E2, E3, …[, EN])

IF E1 = E2 THEN E3 [ ELSE IF E1 = E4 THEN E5 […] ] [ELSE EN]

(IEEE 754) для типов BINARY_FLOAT/BINARY_DOUBLE

[9-) начиная с версии 9

Примеры:

SELECT ename, comm, NVL ( comm, 0 ) FROM emp;

SELECT comm, sal, COALESCE ( comm, sal ) FROM emp;

В отличие от NVL и NVL2, COALESCE не вычисляет выражения-аргументы без надобности:

SELECT NVL ( 123, 1 / 0 ) FROM dual;

-- Ошибка !

SELECT COALESCE ( 123, 1 / 0 ) FROM dual;

-- OK

Пример DECODE:

SELECT

deptno

, loc

, DECODE ( loc, 'NEW YORK', 'NEW YORK CITY', 'BOSTON', 'BOSTON AREA' )

FROM dept

;

Фактически DECODE позволяет сформулировать в тексте запроса таблицу подстановки значений. В нашем случае, если потребуется выдать исходное значение LOC, когда там не значения 'NEW YORK' и 'BOSTON', нужно будет добавить замыкающий четный аргумент:

DECODE

( loc, 'NEW YORK', 'NEW YORK CITY', 'BOSTON', 'BOSTON AREA', loc )

Это не самое хорошее решение, так как иногда приходится повторять сложное выражение вторично, что чревато ошибками и лишними вычислениями. Кроме того, методически оправданно держать правила преобразования в БД, а не в тексте запроса (если только эти правила имеют прикладное значение). На практике же нахождение таблицы преобразования в БД резко замедлит вычисление.

33) Агрегатные функции в бд oracle, ограничения на их использование в запросах данных. Оператор case

Агрегатные функции выполняют вычисление на наборе значений и возвращают одиночное значение. Агрегатные функции, за исключением COUNT, не учитывают значения NULL. Агрегатные функции часто используются в выражении GROUP BY инструкции SELECT.

Все агрегатные функции являются детерминированными. Это означает, что агрегатные функции возвращают одну и ту же величину при каждом их вызове на одном и том же наборе входных значений. 

 Агрегатная функция производит вычисление над единичным результатом от множества записей. Например, есть агрегаты для вычисления count (количества), sum (суммы), avg (среднего арифметического), max(максимального значения) и min (минимального значения) списка записей. Агрегат  нельзя использовать в предложении WHERE. (Это ограничение существует, потому что предложение WHERE определяет записи, которые будут использованы на стадии обработки агрегатами; и таким образом оно должно уже отработать перед тем, как будут запущены агрегатные функции). Однако, эту ситуацию можно разрешить, если использовать подзапрос.

Оператор CASE позволяет выполнять различные условия в зависимости от выполнения каких-либо условий.

34) Запрос select основные фразы запроса select. SELECTоператор языка SQL, возвращающий набор данных (выборку) из базы данных, удовлетворяющих заданному условию. В большинстве случаев, выборка осуществляется из одной или нескольких таблиц. В последнем случае говорят об операции слияния (JOIN (SQL)) При формировании запроса SELECT пользователь описывает ожидаемый набор данных: его вид (набор столбцов) и его содержимое (критерий попадания записи в набор, группировка значений, порядок вывода записей и т. п.).

Запрос выполняется следующим образом: сначала извлекаются все записи из таблицы, а затем для каждой записи набора проверяется её соответствие заданному критерию. Если осуществляется слияние из нескольких таблиц, то сначала составляется произведение таблиц, а уже затем из полученного набора отбираются требуемые записи.

Особую роль играет обработка NULL-значений, когда при слиянии, например, двух таблиц — главной (англ. master) и подчинённой (англ.detail) — имеются или отсутствуют соответствия между записями таблиц, участвующих в слиянии. Для решения этой задачи используются механизмы внутреннего (англ. inner) и внешнего (англ. outer) слияния.

Один и тот же набор данных может быть получен при выполнении различных запросов. Поиск оптимального плана выполнения данного запроса является задачей оптимизатора.

оператор SELECT имеет следующую структуру:

SELECT

[DISTINCT | DISTINCTROW | ALL]

select_expression,...

[FROM table_references]

[WHERE where_definition]

[GROUP BY {unsigned_integer | col_name | formula}]

[HAVING where_definition]

[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC], ...]

Формат запроса с использованием данного оператора:

SELECT список полей FROM список таблиц WHERE условия…

Основные ключевые слова, относящиеся к запросу SELECT:

  • WHERE — используется для определения, какие строки должны быть выбраны или включены в GROUP BY.

  • GROUP BY — используется для объединения строк с общими значениями в элементы меньшего набора строк.

  • HAVING — используется для определения, какие строки после GROUP BY должны быть выбраны.

  • ORDER BY — используется для определения, какие столбцы используются для сортировки результирующего набора данных.