Материал: Lab5R-Functions-Group-by-Having-Order-by-NEW

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

 

 

строки search удаляются. Если строка

 

 

 

 

search равна null, то возвращается char.

 

 

 

 

Эта

 

функция

 

предоставляет

 

 

 

 

дополнительные

возможности

по

 

 

 

 

сравнению с функцией TRANSLATE.

 

 

 

 

TRANSLATE

предоставляет возможность

 

 

 

 

произвести

посимвольную

замену.

 

 

 

 

REPLACE, в свою очередь, позвроляет

 

 

 

 

заменить одну подстроку на другую, а

 

 

 

 

также произвести удаление подстрок.

 

 

 

 

 

 

 

 

 

 

 

Возвращает подстроку строки char,

 

 

 

 

начинающуюся с символа m, и

 

 

 

 

содержащую n символов.

 

 

 

 

 

 

 

Если

аргумент m

=

0,

то

он

SELECT SUBSTR('ABCDE',2,2)

 

 

рассматривается равным 1. Если m

AS "SUBSTR example"

 

 

 

 

SUBSTR

 

положительный, то нахождение началь-

FROM

DUAL;

 

ного символа производится справа от

 

 

 

 

SELECT SUBSTR('ABCDE',-4,2)

 

 

char. Если m отрицательный, то Oracle

AS "SUBSTR example"

 

 

начальный символ отыскивается слева от

FROM

DUAL;

 

 

char. Если n отсутствует, SQL возвращает

 

 

 

 

все символы до конца char. Если n

 

 

 

 

меньше 1, возвращается null.

 

 

 

 

 

 

 

 

 

 

 

 

Вовращает char, в которой все вхождения

 

 

 

 

символа из from заменяются на

 

 

 

 

соответствующий символ из to. Символы

 

 

 

 

из char, которые отсутствуют в from, не

 

 

 

 

заменяются. Аргумент from может

 

 

 

 

содержать больше символов, чем to. В

SELECT TRANSLATE('ABCDE',

TRANSLAT

 

этом случае дополнительные символы в

'ABCD', '1234')

 

конце

from

не

имеют

соответствующих

E

 

AS "TRANSLATE example"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

символов

в

to.

 

Если

такие

FROM

DUAL;

 

 

дополнительные

символы

появляются

в

 

 

 

 

char, то они удаляются. Нельзя

 

 

 

 

использовать пустую строку to для

 

 

 

 

удаления всех символов из char, которые

 

 

 

 

содержатся в from.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Строковые функции, которые возвращают числовые значения

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Функ-

Синтаксис

 

 

 

Назначение

 

 

 

Пример

ция

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Производит поиск в строке char1,

 

 

 

 

 

 

 

 

 

 

начиная с позиции n, m-го вхождения

 

 

 

 

 

строки char2 и возвращает позицию

 

 

 

 

 

символа в char1, в которой такое

SELECT INSTR('CORPORATE

 

 

 

вхождение первого символа из char2

 

FLOOR','OR','3','2')

 

 

 

найдено. Если n отрицательный,

FROM

DUAL;

 

 

 

Oracle производит поиск с конца

 

 

INSTR

 

 

строки

char1. Значение m должно

 

 

 

 

 

быть положительным. По умлочанию

 

 

значения n и m равны 1; это означает, что Oracle производит поиск, начиная с первого символа char1 и отыскивает первое вхождение строки char2. Возвращаемое значение вычисляется относительно начала строки char1 не зависимо от значения n и выражается в количестве символов. Если поиск оказался безуспешным (то есть char2 не присутствует m раз после n-го символа char1) то возвращается значение 0.

6

 

 

Возвращает

длину

char

в

 

 

 

 

количестве

символов.

Если

char

SELECT INSTR('CORPORATE

LENGTH

 

имеет

тип

CHAR,

то

в

длину

 

FLOOR','OR','3','2')

 

включаются

все

расположенные

 

 

 

 

FROM

DUAL;

 

 

справа пробелы. Если char равно

 

 

 

 

null, то функция возвращает null.

 

 

 

 

 

 

 

 

Возвращает десятичное представление

SELECT ASCII('Q')

ASCII

 

первого

символа из

char в

наборе

FROM

DUAL;

 

 

символов базы данных.

 

 

 

 

 

 

 

 

 

 

2.1.2.3.Функции даты

Функции даты оперируют со значениями типа DATE. Все функции даты возвращают значение типа DATE, за исключением MONTHS_BETWEEN, которая возвращает число.

Функ-

Синтаксис

 

 

Назначение

 

 

Пример

ция

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Возвращает дату d плюс n месяцев.

 

 

 

 

Аргумент n может быть любым целым

 

 

 

 

числом. Если d последний день месяца

SELECT

TO_CHAR(

ADD_

 

или

если

результирующий

месяц

ADD_MONTHS(Hiredate,1),

 

содержит меньше дней, чем компонента

'DD-MON-YYYY')

 

 

MONTHS

 

 

 

 

дня в d, то результат будет содержать

FROM

TEACHER

 

 

 

 

последний день результирующего месяца.

WHERE

Name = 'John';

 

 

В противном случае результат будет

 

 

 

 

иметь ту же компоненту дня, что и d.

 

 

 

 

 

 

 

 

 

 

 

Возвращает

дату с

последним

днем

SELECT SYSDATE,

LAST_

 

месяца из

d. Можно использовать эту

LAST_DAY(SYSDATE),

DAY

 

функцию для определения сколько дней

LAST_DAY(SYSDATE)-SYSDATE

 

 

осталось в текущем месяце.

 

FROM DUAL;

 

 

 

 

 

 

 

Возвращает дату того дня недели,

 

 

 

 

который указан в char и который следует

SELECT NEXT_DAY(

NEXT_

 

за датой d.

Аргумент char должен быть

'15-MAR-98','TUESDAY')

DAY

 

названием дня недели,

в полном виде или

AS "NEXT DAY"

 

 

сокращенном, заданным согласно языка,

FROM DUAL;

 

 

используемого в вашем сеансе работы.

 

 

 

 

 

 

 

 

 

 

 

Возвращает

количество месяцев

между

 

 

 

 

датами d1 и d2. Если дата d1 позже, чем

SELECT MONTHS_BETWEEN (

 

 

дата d2, то результат положителен; если

 

 

раньше, то отрицателен. Если d1 и d2

TO_DATE('28.10.2002',

 

 

 

 

MONTHS_

 

содержат либо одну и ту же компоненту

 

'DD.MM.YYYY'),

 

дня,

либо указанные дни являются

TO_DATE('28.10.2002',

BETWEEN

 

 

последними в месяце, то результат всегда

 

 

 

 

 

'DD.MM.YYYY'))

 

 

 

 

 

 

 

 

 

 

целое число. В противном случае Oracle

FROM

DUAL

 

 

дробную часть месяцев с на основе 31-

 

 

 

 

дневного месяца и с учетом разницы в

 

 

 

 

компонентах времени дат d1 и d2

 

 

 

 

 

 

 

 

 

Возвращает дату и время во временной зоне z2, когда дата и время в

 

 

временной зоне z1 равна d. Аргументы z1 и z2 могут быть следующими

 

 

текстовыми строками:

 

 

 

 

NEW_

 

AST, ADT - Atlantic Standard or Daylight Time

 

 

BST, BTD - Bering Standard or Daylight Time

 

TIME

 

 

 

 

 

 

 

 

 

 

 

 

CST, CDT - Central Standard or Daylight Time

 

 

 

EST, EDT - Eastern Standard or Daylight Time

 

 

 

GMT - Greenwich Mean Time

 

 

 

 

 

HST, HDT - Alaska-Hawaii Standard Time or Daylight Time

7

 

 

MST, MDT - Mountain Standard or Daylight Time

 

 

NST - Newfoundland Standard Time

 

 

 

PST, PDT - Pacific Standard or Daylight Time

 

 

YST, YDT - Yukon Standard or Daylight Time

 

 

Возвращает текущую дату и время.

SELECT TO_CHAR(SYSDATE,

SYSDATE

 

Аргументы отсутствуют. Эту функцию

 

нельзя

использовать

в

условии

'DD-MM-YYYY HH24:MI:SS)'

 

 

FROM DUAL;

 

 

ограничения CHECK.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

Эти функции преобразуют значение из одного типа в другой. Далее приводятся основные функции конвертирования.

Функ-

Синтаксис

 

 

Назначение

 

Пример

ция

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Преобразут d типа DATE в тип VARCHAR2 в формте, определенном

 

 

форматом даты fmt. Если fmt опущен, то

d преобразуется в значение

 

 

VARCHAR2 согласно формата даты по умолчанию. Наиболее часто

 

 

используемые элементы формата fmt следующие:

 

 

- / , . ; : 'text'- знаки пунктуации и текст в кавычках представляется в

 

 

результате как есть,

 

 

 

 

D

– День недели (1-7)

 

 

TO_

 

DAY

– Название дня, дополненное пробелами до 9 символов

CHAR

 

DD

День месяца (1-31)

 

 

 

 

(преоб-

 

DDD

День года (1-366)

 

 

разова-

 

 

 

 

HH

Час дня (1-12)

 

 

ние

 

 

 

 

 

Час дня (1-12)

 

 

даты)

 

HH12

 

 

 

 

HH24

Час дня (0-23)

 

 

 

 

MI

- Минуты (0-59)

 

 

 

 

MM

- Месяц в виде двух цифр (01-12; JAN = 01)

 

 

MON

- Сокращенное название месяца

 

 

MONTH

- Название месяца, дополненное до 9 символов

 

 

YYYY

- Год в виде 4-х цифр

 

 

 

YYY,YY, Y - Последние 3, 2 или 1 цифрі года.

 

 

Преобразует n типа NUMBER в значение типа VARCHAR2, с использование

 

 

факультативного формата fmt. Если fmt опущен, то n преобразуется в

 

 

значение типа VARCHAR2 таким образом, чтобы содержать все значащие

 

 

цифры. Наиболее часто используемые элементы формата fmt следующие:

 

 

Элемент

Пример

Описание

 

 

TO_

 

,

9,999

 

Возвращает запятуюв указанной позиции. Можно

CHAR

 

 

 

 

использовать много зяпятых в формате.

(прео-

 

. (точка)

99.99

 

Возвращает десятичную точку в указанной позиции.

бразо-

 

$

$9999

 

Возвращает значение с знаком доллара в начале.

вание

 

9

9999

 

Возвращает число с указанным количеством цифр с

числа)

 

 

 

 

пробелом в начале, если число положительное, или

 

 

 

 

 

минусом, если число отрицательное.

 

 

0

0999

 

Возвращает нули в начале.

 

 

 

9990

 

Возвращает нули в конце.

 

 

FM

FM90.9

Возвращает число без пробелов к начале и конце

 

 

EEEE

9.9EEEE Возвращает значение в научной нотации.

 

 

Преобразует значение char типа CHAR или

UPDATE TEACHER SET

TO_

 

VARCHAR2,

содержащее

строковое

salary = salary +

NUMBER

 

представление

 

числа в формате fmt, в

TO_NUMBER('100.00','99.9')

 

 

значение типа NUMBER.

 

WHERE Name = 'John';

 

 

 

 

 

 

 

 

8

TO_

DATE

Преобразует char типа CHAR или VARCHAR2 в значение типа DATE. fmt – это формат даты, определяющий формат представления даты в char. Если fmt опущен, то char должен содержать строковое представление даты ы формате по умолчанию.

UPDATE TEACHER SET Hiredate = TO_DATE( 'October 30, 2002, 11:00', 'Month dd, YYYY, HH:MI') WHERE Name = 'John';

2.1.2.5.Другие функции одной строки

Приведем функции одной строки, котоые не попадают ни под одну из указанных ранее категорий.

Функция

Синтаксис

 

 

Назначение

 

 

Пример

 

 

 

 

 

 

 

Возвращает наибольшее из значений в

 

 

 

 

списке exprs.

Все exprs после первого

SELECT

GREATEST(

 

 

 

 

 

 

GREATEST

 

неявно

преобразуются к типу первого

'HARRY','HARRIOT','HAROLD')

 

expr

до

выполнения

сравнения.

AS "Greatest"

 

 

 

 

Сравнение

сиволов базируется на

FROM

DUAL;

 

 

наборе символов базы данных.

 

 

 

 

 

 

 

 

 

Возвращает наибольшее из значений в

SELECT

LEAST(

 

 

 

 

 

 

LEAST

 

списке exprs. Все exprs после первого

'HARRY','HARRIOT','HAROLD')

 

неявно преобразуются к типу первого

AS "Least"

 

 

 

 

expr до выполнения сравнения.

FROM

DUAL;

 

 

 

 

 

 

 

Если expr1 равно null, то возвращается

 

 

 

 

expr2; если expr1 не null, возвращается

SELECT Name,

 

 

expr1.

Аргументы expr1

иexpr2 могут

NVL

 

иметь любой тип данных. Если их типы

 

NVL(TO_CHAR(Salary),

 

 

'NOT APPLICABLE')

 

 

данных разные, то SQL преобразует

 

 

 

FROM TEACHER;

 

 

expr2 в тип данных expr1 прежде, чем их

 

 

сравнивать.

 

 

 

 

 

 

 

 

 

USER

 

Возвращает текущего пользователя SQL

SELECT

USER

 

с типом данных VARCHAR2

 

FROM

DUAL;

 

 

 

 

 

 

 

 

 

 

 

2.2. Фразы GROUP BY и HAVING

2.2.1.Синтаксис:

2.2.2.Назначение

Фраза GROUP BY определяет столбец или список столбцов (выражение над столбцом или список выражений над столбцами), которые используются для группирования строк таблицы. Выражения фразы GROUP BY могут содержать любые столбцы из таблиц фразы FROM, не зависимо от того, появляетсяь ли столбец во списке select. Если запрос содержит фразу GROUP BY, то список select может содержать только:

константы,

выражения, включающие только агрегатные функции,

выражения из фразы GROUP BY,

выражения, которые включают упомянутые выше выражения.

Областью действия агрегатной функции являются все строки каждой группы. Таким образом, SQL применяет агрегатные функции в списке select к каждой группе строк и возвращает единственную результирующую строку для каждой группы. То есть, каждая сформированная группа порождает одну результирующую строку.

9

Назначение фразы HAVING – определить условие выбора на группах строк. Она ограничивает группы строк теми, на которых указанное условие равно TRUE..

Указывайте GROUP BY и HAVING фразы после фразы WHERE..

См. также описание синтаксиса для выражений в ПРиложении Лаб.4 и синтаксис описания условий в Приложении Лаб.2 .

2.3. Фраза ORDER BY

2.3.1.Синтаксис:

2.3.2.Назначение

Фраза ORDER BY позволяет упорядочить строки результата запроса. При отсутствии этой фразы нет ни какой гарантии, что будучи выполненным дважды, запрос выдаст строки результата в одном и том же порядке.

expr – означает, что строки упорядочиваются согласно значения выражения expr. Выражение может базироваться на столбцах из списка select или на столбцах из таблиц фразы FROM.

position – упорядочивает строки на основании значений выражения в указанной позиции списка select; position должно быть целым числом.

c_alias – упорядочивает строки на основании значения столбца (выражения), который имеет указанный алиас в списке select.

ASC и DESC указывают порядок сортировки: по возрастанию или убыванию. ASC – знчение по умолчанию.

Можно указать множество выражений во фразе ORDER BY. В этом случае производится многоуровневая сортировка. Oracle располагает значения null в конце при сортировке в порядке возрастания и в начале при сортировке в порядке убывания.

Ограничения:

Если вы указали фразу DISTINCT, то фраза ORDER BY должна ссылаться только на столбцы из списка select.

Если также задана фраза GROUP BY, то фраза ORDER BY ограничивается следующими выражениями:

-Константы

-Агрегатные функции

-Выражения, идентичные тем, что используются во фразе group by

-Выражения, включающие приведенные выше выражения, которые вычисляют одно и то же значение для всх строк в группе.

3.Описание и примеры

3.1. Агрегатные функции

Агрегатные функции без фраз WHERE и GROUP BY. Если фразы WHERE и GROUP BY отсутствуют, то областью действия агрегатной функции являются все строки таблицы.

Пример. Сколько строк в таблице TEACHER:

SELECT COUNT(*) AS Total_rows_in_TEACHER_table FROM TEACHER;

Пример. Чему равна сумма фондов всех факультетов:

SELECT SUM(Fund)

FROM FACULTY;

Пример. Какой средний фонд финансирования кафедр:

SELECT AVG(Fund)

10