
- •2 Order by deptno;
- •3 Order by deptno;
- •10 Clark 2450
- •20 Smith 800
- •8 Row selected
- •11/05/2003 Main report Page: 1
- •Функции pl/sql
- •Insert into purchase values (‘Prod_1’, 10, sysdate, ’sh’);
- •Insert into purchase values (‘Prod_1’ ,10, sysdate-7,’sh’);
- •Iniтсaр(product_name)
- •2 Last_name,
- •20,’Dallas’,
- •30,’Chicago’,
- •40,’Boston’,
- •6 Rows selected.
- •Настройка среды sql*Plus
- •Файлы сценариев sql (скрипты)
- •Разновидности комментариев
- •16 Row selected
- •2 From emp, salgrade
- •4 And sal between losal and hisal;
- •Intersect
- •Union union at all
- •2 Union
- •4 Union
- •6 Minus
- •8 Order by 2,1;
- •Контрольные вопросы
Какую работу нужно написать?
20,’Dallas’,
30,’Chicago’,
40,’Boston’,
‘Unknown’)
FROM emp;
Пример для COALESCE.
SELECT COALESCE (nickname,
first_name,
last_name,
‘Unknown’) NAME
FROM emp;
Многострочные или групповые функции
Используются обычно в сочетании с фразой “GROUPBY”.
Относятся только к значениям не NULL.
MIN(поле) – минимальное значение поля в группе
MAX(поле) – максимальное значение поля в группе
SUM(поле) – сумма значений поля в группе
AVG(поле) – среднее значение поля в группе
STDDEV(поле) – среднеквадратичное отклонение для поля в группе
DISTINCT(поле) – числоодинаковыхзначений поля в группе
COUNT(поле) – число строк в группе, где поле неNULL
Пример: Использование конструкции GROUP BY и функции SUM.
SQL> SELECT * FROM purchase;
PRODUCT_NAME QUANTITY PURCHASE_ SAL
---------------------- ---------- --------- ---
Small Widget 1 14-JUL-03 CA
Medium Wodget 75 14-JUL-03 BB
Chrome Phoobar 2 14-JUL-03 GA
Small Widget 8 15-JUL-03 GA
Medium Wodget 20 15-JUL-03 LB
Round Snaphoo 5 16-JUL-03 CA
6 Rows selected.
SQL>
SQL> SELECT product_name, SUM(quantity)
2 FROM purchase
3 GROUP BY product_name;
PRODUCT_NAME (SUM)QUANTITY
---------------------- -------------
Chrome Phoobar 2
Medium Wodget 95
Round Snaphoo 5
Small Widget 9
SQL>
Пример: Использование нескольких групповых функций в одном операторе SELECT.
SQL> SELECT SUBSTR(product_name, 1, 15) "Product",
2 SUM(quantity) "Total Sold",
3 AVG(quantity) "Average",
4 COUNT(quantity) "Transactions",
5 MIN(quantity) "Fewest",
6 MAX quantity) "Most"
7 FROM purchase
8 GROUP BY product_name;
Product Total Sold Average Transactions Fewest Most
--------------- ---------- --------- ------------ -------- ------
Chrome Phoobar 2 2 1 2 2
Medium Wodget 95 47.5 2 20 75
Round Snaphoo 5 5 1 5 5
Small Widget 9 4.5 2 1 8
SQL>
Примечание. Раннее говорилось, что все эти функции не учитываютNULL-значения, если же вы хотите их учесть, то перед именем поля следует поставить ключевое словоALL. Например, вызов
SELECT COUNT(mgr) FROM emp;
вернёт число сотрудников, у которых есть менеджер, а запрос
SELECT COUNT(ALLmgr) FROM emp;
вернёт общее число сотрудников. Впрочем, применение ключевого слова ALLк другим функциям (AVG,SUM,STDDEVи др.) приведёт к ошибке.
Примечание. Все упомянутые выше функции естественно учитывали повторяющиеся значения, но если вы не хотите этого, то перед именем поля следует поставить ключевое словоDISTINCT. Например, вызов
SELECT COUNT(mgr) FROM emp;
вернёт число сотрудников, у которых есть менеджер, а запрос
SELECT COUNT(DISTINCTmgr) FROM emp;
вернёт число менеджеров управляющих сотрудниками. Впрочем, смысл применения ключевого слова DISTINCTк другим функциям (AVG,SUM,STDDEVи др.) остаётся туманным.
Включение и исключение групп с помощью конструкции HAVING
Фильтрует сформированные группы на основе групповых значений (в отличие от WHERE, которая фильтрует исходные данные).
SELECT SUBSTR(product_name,1,15) “Product”,
SUM(quantity) “Total Sold”,
AVG(quantity) “Average”
COUNT(quantity) “Transaction”,
MIN(quantity) “Fewest”,
MAX(quantity) “Most”
FROM purchase
GROUP BY product_name
HAVING SUM (quantity) < 5; -- Менее 5 продаж товара
Применение функций в индексах.
В версиях Oracleниже 9i,при использовании функции на индексированном поле, такое поле считывалось из БД (будто оно не индексированное). ВOracle9iфункция применяется прямо к индексу без обращения к БД. Например, во фразе:
WHERE UPPER(ename) = ‘SMITH’