Бази даних-20210115T104840Z-001 / Lab5R-Functions-Group-by-Having-Order-by-NEW
.pdf
|
|
Лабораторная работа 5 |
|
|
|
Функции SQL Oracle. Дополнительные фразы предложения SELECT |
|
|
|
Содержание |
|
1. |
Цели лабораторной работы ................................................................................................................................. |
1 |
|
2. |
Теоретические основы ........................................................................................................................................... |
2 |
|
|
2.1. Функции SQL Oracle...................................................................................................................................... |
2 |
|
|
2.1.1. Агрегатные функции .............................................................................................................................................. |
2 |
|
|
2.1.2. Функции одной строки .......................................................................................................................................... |
3 |
|
|
2.2. Фразы GROUP BY и HAVING ..................................................................................................................... |
9 |
|
|
2.2.1. Синтаксис:............................................................................................................................................................... |
9 |
|
|
2.2.2. Назначение .............................................................................................................................................................. |
9 |
|
|
2.3. Фраза ORDER BY ......................................................................................................................................... |
10 |
|
|
2.3.1. Синтаксис:............................................................................................................................................................. |
10 |
|
|
2.3.2. Назначение ............................................................................................................................................................ |
10 |
|
3. |
Описание и примеры............................................................................................................................................. |
10 |
|
|
3.1. Агрегатные функции ................................................................................................................................... |
10 |
|
|
3.2. Фразы GROUP BY и HAVING ................................................................................................................... |
11 |
|
|
3.3. Фраза ORDER BY ......................................................................................................................................... |
12 |
|
4. |
Варианты заданий................................................................................................................................................ |
13 |
|
|
4.1. Вариант 1........................................................................................................................................................ |
15 |
|
|
4.2. Вариант 2........................................................................................................................................................ |
15 |
|
|
4.3. Вариант 3........................................................................................................................................................ |
16 |
|
|
4.4. Вариант 4........................................................................................................................................................ |
17 |
|
|
4.5. Вариант 5........................................................................................................................................................ |
18 |
|
|
4.6. Вариант 6........................................................................................................................................................ |
18 |
|
|
4.7. Вариант 7........................................................................................................................................................ |
19 |
|
|
4.8. Вариант 8........................................................................................................................................................ |
20 |
|
|
4.9. Вариант 9........................................................................................................................................................ |
21 |
|
|
4.10. |
Вариант 10 ........................................................................................................................................... |
23 |
|
4.11. |
Вариант 11 ........................................................................................................................................... |
24 |
|
4.12. |
Вариант 12 ........................................................................................................................................... |
25 |
|
4.13. |
Вариант 13 ........................................................................................................................................... |
26 |
|
4.14. |
Вариант 14 ........................................................................................................................................... |
27 |
|
4.15. |
Вариант 15 ........................................................................................................................................... |
28 |
|
4.16. |
Вариант 16 ........................................................................................................................................... |
29 |
|
4.17. |
Вариант 17 ........................................................................................................................................... |
30 |
|
4.18. |
Вариант 18 ........................................................................................................................................... |
31 |
5. |
Контрольные вопросы.......................................................................................................................................... |
32 |
1.Цели лабораторной работы
Изучить функции SQL Oracle, а также фразы GROUP BY, HAVING, ORDER BY предложения SELECT.
1
Приобрести практический опыт по использованию фраз GROUP BY, HAVING, ORDER BY предложения SELECT с использованием SQL*Plus.
2.Теоретические основы
2.1. Функции SQL Oracle
Функции SQL являются встроенными в Oracle и доступны для использования в соответствующих фразах различных предложений SQL. Не смешивайте функции SQL с пользовательскими функциями, написанными на языке PL/SQL.
Если вы вызываете функцию со значением аргумента null, то она автоматически возвращает значение null. Единственными функциями, которые соответствуют этому правилу, являются CONCAT, DECODE, DUMP, NVL и REPLACE.
Имеется следующие две категории функций SQL:
Функции Эти функции возвращают единственное значение для каждой строки таблицы. Эти функции одной могут использоваться в списке select (если предложение SELECT не содержит фразы GROUP BY) строки и во фразе WHERE.
Агрегат- Они возвращают одно значение на основании совокупности строк таблицы. Агрегатные ные функции могут использоваться в списке select и фразе HAVING.
функции
2.1.1.Агрегатные функции
Если вы используете фразу GROUP BY в предложении SELECT, SQL разделяет строки таблицы на группы. В запросе, содержащем фразу GROUP BY, все элементы в списке select должны использоваться либо выражения из фразы GROUP BY, либо выражения, содержащие агрегатный функции, либо константы. SQL применяет агрегатные функции в списке select к каждой группе строк и возвращает единственную результирующую строку в качестве результата для каждой группы.
Если фраза GROUP BY отсутствует, Oracle применяет агрегатную функция в списке select ко всем строкам таблицы запроса. Если агрегатная функция используется во фразе HAVING, то она используется для определения условия удаления групп строк, задаваемых фразой GROUP BY. Фразы GROUP BY и HAVING будут изучены в этой Лаб. позже.
Многие агрегатные функции используют следующие фразы:
DISTINCT |
- указывает, что агрегатная функция должна принимать в расчет только различные значения из |
|
аргумента. |
ALL |
- указывает, что агрегатная функция должна принимать в расчет все значения из аргумента, |
|
включая и повторяющиеся. При отсутствии этих фраз по умолчанию подразумевается ALL. |
Все агрегатные функции за исключением COUNT(*) игнорируют значения null.
Вы можете использовать функцию NVL в аргументе агрегатной функции для замены значения null.
Если аргумент агрегатной функции не имеет строк или все строки имеют значения null, то агрегатная функция возвращает значение null
Имеются следующие агрегатные функции:
Функция |
Синтаксис |
|
Назначение |
|
Пример |
|
|
|
|
|
|
|
|
Возвращает количество строк в |
SELECT COUNT(*) AS Total |
||
|
|
запросе. Если указано expr, то |
|||
|
|
возвращается количество строк, в |
FROM |
TEACHER; |
|
|
|
которых expr (в частном случае expr |
SELECT COUNT(post) |
||
|
|
– это столбец) не равно null. Можно |
FROM |
TEACHER; |
|
COUNT |
|
подсчитать либо все строки (ALL), |
SELECT COUNT(DISTINCT post) |
||
|
|
|
|
|
|
|
|
либо те, |
в которых значения expr |
FROM |
TEACHER; |
|
|
являются различными (DISTINCT). |
|
|
|
|
|
Если указана звездочка (*), то |
|
|
|
|
|
функция |
возвращает количество |
|
|
|
|
всех строк, включая и дубликаты и |
|
|
2
|
|
те, которые имеют null. |
|
|
|
||||
|
|
|
|
|
|||||
|
|
Возвращает среднее значение среди |
|
|
|||||
|
|
всех значений выражения expr по |
SELECT |
AVG(Salary) |
|||||
AVG |
|
всем строкам. Значения NULL не |
FROM |
TEACHER |
|||||
|
|
учитываются |
при |
вычислении |
WHERE |
Post='professor'; |
|||
|
|
функции |
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
Возвращает минимальное значение |
|
|
|||||
MIN |
|
expr |
по |
всем строкам. Значения |
SELECT |
MIN(Hiredate) |
|||
|
NULL |
не |
учитываются |
при |
FROM |
TEACHER; |
|||
|
|
||||||||
|
|
вычислении функции |
|
|
|
|
|||
|
|
|
|
|
|||||
|
|
Возвращает максимальное значение |
SELECT |
MAX(Hiredate) |
|||||
MAX |
|
expr |
по |
всем строкам. Значения |
|||||
|
NULL |
не |
учитываются |
при |
FROM |
TEACHER |
|||
|
|
||||||||
|
|
вычислении функции |
|
|
WHERE |
Name LIKE 'А%'; |
|||
|
|
|
|
|
|
||||
|
|
|
|
|
|||||
|
|
Возвращает сумму значений expr по |
SELECT |
SUM(Salary) |
|||||
SUM |
|
всем строкам. Значения NULL не |
|||||||
|
учитываются |
при |
вычислении |
FROM |
TEACHER |
||||
|
|
функции |
|
|
|
|
WHERE |
Post='assistant'; |
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
||||
|
|
Возвращает |
стандартное отклоне- |
|
|
||||
|
|
ние x,. SQL вычисляет стандартное |
SELECT |
STDEV(Salary) |
|||||
STDEV |
|
отклонение как корень квадратный |
|||||||
|
|
от значения, вычисленного по |
FROM |
TEACHER; |
|||||
|
|
функции VARIANCE. |
|
|
|
|
|||
|
|
|
|
|
|||||
|
|
Возвращает variance x,. SQL |
|
|
|||||
|
|
вычисляет variance х по формуле: |
|
|
|||||
VARIANCE |
|
|
|
|
|
|
|
SELECT |
VARIANCE(Salary) |
|
|
|
|
|
|
|
FROM |
TEACHER; |
|
|
|
где: |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
xi - |
один |
из |
элементов |
x. |
|
|
|
|
|
n – количество элементов во |
|
|
|||||
|
|
множестве x. Если n = 1, то variance |
|
|
|||||
|
|
равен 0. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2.1.2.Функции одной строки
Имеются следующие типі функций одной строки:
числовые функции,
символьные функцииc,
функции даты,
функции преобразования,
другие функции одной строки.
Мы обсудим только наиболее часто используемые функции этих типов.
2.1.2.1.Числовые функции
Функ- |
Синтаксис |
|
Назначение |
|
|
Пример |
|
ция |
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SELECT |
ABS(-15) |
ABS |
|
Возвращает абсолютное значение n. |
|
"Absolute" |
|||
|
|
|
|
|
|
FROM |
DUAL; |
|
|
|
|
|
|
|
|
CEIL |
|
Возвращает |
наименьшее |
целое, |
которое |
SELECT |
CEIL(15.7) "Ceil" |
|
больше или равно n. |
|
|
FROM |
DUAL; |
||
|
|
|
|
||||
|
|
|
|
|
|
|
|
FLOOR |
|
Возвращает |
наибольшее |
целое, |
которое |
SELECT |
FLOOR(15.7) |
|
|
|
|
|
|
|
|
3
|
|
меньше или равно n. |
|
|
|
"Floor" |
|
||
|
|
|
|
|
|
|
|
FROM |
DUAL; |
|
|
|
|
|
|
|
|
|
|
SIN, |
|
Возвращает |
sin, |
cos или |
tan n |
(угол |
в |
SELECT SIN(30*3.1415/180) |
|
COS, |
|
||||||||
|
радианах). |
|
|
|
|
|
FROM |
DUAL; |
|
TAN |
FUN – имя функции. |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
SINH, |
|
озвращает гиперболический sin, cos или tan |
SELECT |
SINH(1) AS |
|||||
COSH, |
|
"Hyperbolic sine of 1" |
|||||||
|
n. |
|
|
|
|
|
|||
TANH |
FUN- имя функции. |
|
|
|
|
|
FROM |
DUAL; |
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
Возвращает e в степени n, где |
|
|
SELECT |
EXP(4) AS |
|||
EXP |
|
|
|
"e to the 4th power" |
|||||
|
|
e = 2.71828183 ... |
|
|
|
|
FROM |
DUAL; |
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|||||
LN |
|
Возвращает натуральный логарифм n, где n |
SELECT |
LN(95) AS |
|||||
|
больше или равно 0. |
|
|
|
"Natural log of 95" |
||||
|
|
|
|
|
FROM |
DUAL; |
|||
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|||||
|
|
Возвращает логарифм n по основанию m. |
|
|
|||||
|
|
Основание |
m |
может |
быть |
любым |
SELECT |
LOG(10,100) AS |
|
LOG |
|
положительным числом, отличным от 0 или |
"Log base 10 of 100" |
||||||
|
|
1 и n могжет быть любым положительным |
FROM |
DUAL; |
|||||
|
|
числом. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
MOD |
|
Возвращает |
остаток от деления |
m на |
n. |
SELECT |
MOD(11,4) |
||
|
Возвращает m, если n = 0. |
|
|
|
FROM |
DUAL; |
|||
|
|
|
|
|
|||||
|
|
|
|
|
|||||
|
|
Вовращает m в степени n. Основание m и |
|
|
|||||
POWER |
|
показатель степени n могут быть любыми |
SELECT |
POWER(3,2) |
|||||
|
числами, однако, если m отрицательное, то |
FROM |
DUAL; |
||||||
|
|
||||||||
|
|
n долдно быть целым числом. |
|
|
|
|
|||
|
|
|
|
|
|||||
|
|
Если n<0, то функция возвращает -1. Если |
SELECT |
SIGN(-15) "Sign" |
|||||
SIGN |
|
n=0, то функция возвращает 0. Если n>0, то |
|||||||
|
|
функция возвращает 1. |
|
|
|
FROM |
DUAL; |
||
|
|
|
|
|
|
|
|||
|
|
|
|
|
|||||
|
|
Возвращает корень квадратный от n. |
|
|
|||||
SQRT |
|
Значение n не может быть отрицательным. |
SELECT |
SQRT(26) |
|||||
|
SQRT возвращает в качестве результата |
FROM |
DUAL; |
||||||
|
|
||||||||
|
|
число типа "real". |
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
Возвращает n округленное до m позиции |
|
|
|||||
|
|
справа от десятичной точки. Если |
m |
SELECT |
ROUND(15.193,1) |
||||
ROUND |
|
опущено, n округляется до |
позиции 0. |
m |
AS |
"Round" |
|||
|
может быть отрицательным для округления |
||||||||
|
|
FROM |
DUAL; |
||||||
|
|
до позиции слева от десятичной точки. m |
|||||||
|
|
должно быть целым числом. |
|
|
|
|
|
||
|
|
|
|
|
|||||
|
|
Возвращает n, отсеченное до позиции m |
|
|
|||||
|
|
справа от десятичной точки. Если m |
|
|
|||||
|
|
опщено, n отсекается до позиции 0. m |
SELECT |
TRUNC(15.79,1) |
|||||
TRUNC |
|
может быть отрицательным. В этом случае |
AS |
"Truncate" |
|||||
|
|
отсечение (устанавливаются в нулевое |
FROM |
DUAL; |
|||||
|
|
значение) m цифр слева от десятичной |
|
|
|||||
|
|
точки. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2.1.2.2. Символьные функции
Имеется два типа символьный функций:
возвращающие символьное значение и
возвращающие числовое значение.
ОНи обсуждаются ниже. Некоторые из них представлены в упрощенном виде.
Character functions returning character values
4
Функ- |
Синтаксис |
|
|
|
|
|
Назначение |
|
|
|
|
Пример |
||
ция |
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
Возвращает символ, имеющий бинарный |
|
|
||||||||||
|
|
эквивалент значению n либо согласно |
SELECT |
CHR(67) |
||||||||||
CHR |
|
набору |
|
символов |
базы |
данных, |
либо |
|||||||
|
|
согласно |
|
|
национальному |
|
набору |
FROM |
DUAL; |
|||||
|
|
символов. |
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
||||||||||
|
|
Возвращает строку char1, конкатениро- |
|
|
||||||||||
CONCAT |
|
ванную |
со строкой char2. Эта функция |
SELECT |
CONCAT('AB','CD') |
|||||||||
|
эквивалентна |
оператору |
кнокатенации |
FROM |
DUAL; |
|||||||||
|
|
|||||||||||||
|
|
строк (||). |
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
||||||||||
|
|
Возвращает char, в которой первые буквы |
|
|
||||||||||
|
|
каждого |
|
слова |
преобразованы |
в |
|
|
||||||
|
|
прописные, |
|
все |
остальные |
буквы |
|
|
||||||
INITCAP |
|
преобразуются в строчные. Словами |
SELECT INITCAP('the soap') |
|||||||||||
|
считаются последовательности символов, |
FROM |
DUAL; |
|||||||||||
|
|
|||||||||||||
|
|
ограниченные пробелами или символами, |
|
|
||||||||||
|
|
которые |
|
не |
являются |
буквенно- |
|
|
||||||
|
|
цифровыми. |
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|||||||||||
|
|
Возвращает char со всеми буквами, |
SELECT LOWER('Mr. Scott') |
|||||||||||
LOWER |
|
преобразованными в строчные. Возвраща- |
AS "lower case" |
|||||||||||
|
емое значение имеет тип аргумента char |
|||||||||||||
|
|
FROM |
DUAL; |
|||||||||||
|
|
(CHAR или VARCHAR2). |
|
|
|
|
|
|
||||||
|
|
|
|
|||||||||||
|
|
Возвращает char со всеми буквами, |
SELECT UPPER('Mr. Scott') |
|||||||||||
UPPER |
|
преобразованными в прописные. Возвра- |
AS "UPPER CASE" |
|||||||||||
|
щаемое |
значение |
имеет |
тип |
аргумента |
|||||||||
|
|
FROM |
DUAL; |
|||||||||||
|
|
char (CHAR или VARCHAR2). |
|
|
|
|||||||||
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
||||||||||
|
|
Возвращает char1, дополненную слева до |
|
|
||||||||||
|
|
длины |
n |
последовательностью |
|
символов |
SELECT LPAD('Page',8,'*.') |
|||||||
LPAD |
|
из |
char2; char2 по умолчанию равно |
|||||||||||
|
единственному пробелу. Если char1 |
AS "LPAD example" |
||||||||||||
|
|
FROM |
DUAL; |
|||||||||||
|
|
длиннее n, то char1 усекается до n |
||||||||||||
|
|
символов. |
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
||||||||||
|
|
Возвращает char1, дополненную справа |
|
|
||||||||||
|
|
до |
длины |
|
n |
последовательностью |
SELECT RPAD('Page',8,'*.') |
|||||||
RPAD |
|
символов из char2; char2 по умолчанию |
||||||||||||
|
равно единственному пробелу. Если char1 |
AS "RPAD example" |
||||||||||||
|
|
FROM |
DUAL; |
|||||||||||
|
|
длиннее n, то char1 усекается до n |
||||||||||||
|
|
символов. |
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
||||||||||
|
|
Удаляет в char те символы слева, которые |
|
|
||||||||||
|
|
присутствуют в set; set по умолчанию |
SELECT LTRIM('xyxYZ','xy') |
|||||||||||
LTRIM |
|
равен единственному пробелу. |
Если char |
AS "LTRIM example" |
||||||||||
|
|
является строковым литералом, то его |
FROM |
DUAL; |
||||||||||
|
|
следует заключить в одиночные кавычки. |
|
|
||||||||||
|
|
|
|
|
||||||||||
|
|
Удаляет в char те символы справа, |
|
|
||||||||||
|
|
которые присутствуют в set; set по |
SELECT RTRIM('xYZxy','xy') |
|||||||||||
RTRIM |
|
умолчанию |
|
равен |
единственному |
|||||||||
|
пробелу. Если char является строковым |
AS "RTRIM example" |
||||||||||||
|
|
FROM |
DUAL; |
|||||||||||
|
|
литералом, то его следует заключить в |
|
|
||||||||||
|
|
одиночные кавычки. |
|
|
|
|
|
|
||||||
|
|
|
|
|||||||||||
|
|
Возвращает char, в которой все |
SELECT REPLACE('JACK and |
|||||||||||
REPLACE |
|
вхождения строки search заменяются на |
JUE','j', 'BL') |
|||||||||||
|
строку replace. Если строка опущена или |
AS "REPLACE example" |
||||||||||||
|
|
|||||||||||||
|
|
равна |
replace |
null, то |
все вхождения |
FROM |
DUAL; |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5
|
|
строки 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