- •Раздел 1 Утилита sql*Plus, простые запросы выборки столбцов и строк
- •Раздел 2 Функции Oracle sql
- •Раздел 3 Выборка данных из нескольких таблиц
- •Раздел 4 Другие команды языка манипулирования данными dмl и обработка транзакций
- •Раздел 5 Создание и изменение таблиц средствами ddl
- •Раздел 6 Другие объекты базы данных
Раздел 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