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

Раздел 2 Функции Oracle sql

Q2_1

Вычислить средний размер комиссионных по сотрудникам , которые их получают

SQL> select avg(comm) from EMP;

AVG(COMM)

---------

550

Q2_2

Вычислить средний размер комиссионных по всем сотрудникам

SQL> select avg(nvl(comm,0)) from EMP;

AVG(NVL(COMM,0))

----------------

157.14286

Q2_3

Сумма окладов всех сотрудников

SQL> select sum(sal) as summa from EMP;

SUMMA

---------

29025

Q2_4

Минимальный и максимальный оклад клерков

SQL> select min(sal),max(sal) from EMP

where job='CLERK';

MIN(SAL) MAX(SAL)

--------- ---------

800 1300

Q2_5

Разбиение таблицы по значению поля разбиения с использованием GROUPBY

Средний оклад для каждой должности

SQL>selectjob,avg(sal)asmiddle

from EMP

group by job;

JOB MIDDLE

--------- ---------

ANALYST 3000

CLERK 1037.5

MANAGER 2758.3333

PRESIDENT5000

SALESMAN1400

Q2_6

Средний оклад по должностям внутри отделов

SQL> select DEPTNO dept,job,avg(sal) middle from EMP

group by DEPTNO,job;

DEPTNO JOB MIDDLE

--------- --------- ---------

10 CLERK 1300

10 MANAGER 2450

10 PRESIDENT 5000

20 ANALYST 3000

20 CLERK 950

20 MANAGER 2975

30 CLERK 950

30 MANAGER 2850

30 SALESMAN 1400

9 rows selected.

Q2_7

Выбор по критерию в HAVINGдляGROUPBY

Должности по которым максимальная зарплата не меньше 3000

SQL> select job,max(sal) from EMP

group by job

having max(sal) >= 3000;

JOB MAX(SAL)

--------- ---------

ANALYST 3000

PRESIDENT 5000

Q2_8

Определить, сколько раз символ «S» встречается в названиях отделов

SQL> select dname from dept;

DNAME

--------------

ACCOUNTING

RESEARCH

SALES

OPERATIONS

SQL> select length(dname) from dept;

LENGTH(DNAME)

-------------

10

8

5

10

--Функция translate в строке, содержащейся в поле dname, заменяет символы из этой

-- строки, если они встречаются в списке 'AS' на символы из списка 'A'. При такой

--замене 'A' "меняется" на 'A', 'S' меняется на ..., а вот для 'S' нет замены, так как

--список замен включает только одну букву 'A'. В этом случае (когда нет замены)

--Oracle убирает букву 'S' из строки, содержащейся в поле dname.

SQL> select translate(dname,'AS','A') from dept;

TRANSLATE (DNAM)

--------------

ACCOUNTING

REEARCH

ALE

OPERATION

SQL> select length(translate(dname,'AS','A')) from dept;

LENGTH(TRANSLATE(DNAME,'AS','A'))

---------------------------------

10

7

3

9

SQL> select length(dname) - length(translate(dname,'AS','A')) as NS from dept;

NS

---------

0

1

2

1

--Функция TRANSLATE

--Syntax

-- TRANSLATE(char, from, to)

--Purpose

-- Returns char with all occurrences of each character in from replaced by its corresponding

--character in to. Characters in char that are not in from are not replaced. The argument from

--can contain more characters than to. In this case, the extra characters at the end of from

--have no corresponding characters in to. If these extra characters appear in char, they are

--removed from the return value. You cannot use an empty string for to to remove all

--characters in from from the return value. Oracle interprets the empty string as null, and if

--this function has a null argument, it returns null.

--Example

SELECT TRANSLATE('2KRW229',

'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ',

'0123456789')

"Translate example"

FROM DUAL;

Translate example

-----------------

2229