- •Раздел 1 Утилита sql*Plus, простые запросы выборки столбцов и строк
- •7839 King president 17-nov-81 5000 10
- •7900 James 950
- •7 Rows selected.
- •7 Rows selected.
- •14 Rows selected.
- •14 Rows selected.
- •14 Rows selected.
- •9 Rows selected.
- •14 Rows selected.
- •14 Rows selected.
- •14 Rows selected.
- •6 Rows selected.
- •14 Rows selected.
- •14 Rows selected.
- •7369 Smith 800
- •Функции Oracle sql
- •9 Rows selected.
- •Раздел 3 Выборка данных из нескольких таблиц
- •20 Smith 800
- •30 James 950
- •10 Miller 1300
- •6 Rows selected.
- •6 Rows selected.
- •6 Rows selected.
- •8 Rows selected.
- •8 Rows selected.
- •14 Rows selected.
- •9 Rows selected.
- •9 Rows selected.
- •14 Rows selected.
- •14 Rows selected.
- •14 Rows selected.
- •6 Rows selected.
- •15 Rows selected.
- •14 Rows selected.
- •14 Rows selected.
- •14 Rows selected.
- •7 Rows selected.
- •Раздел 4 Другие команды языка манипулирования данными dмl и обработка транзакций
- •7902 Ford analyst 7566 03-dec-81 3000 20
- •7788 Scott analyst 7566 09-dec-82 3000 20
- •Раздел 5 Создание и изменение таблиц средствами ddl
- •Раздел 6 Другие объекты базы данных
- •7934 Miller 10
- •16 Rows selected.
14 Rows selected.
Q1_24b Формирование отчета, в котором содержимое столбца разворачивается в ряд столбцов отчета. Отчет должен содержать по строкам список сорудников (номера и имена служащих), по столбцам наименования отделов, а на пересечении знак ‘+’, если служащий работает в соответствующем отделе.
select empno, ename,
(select decode(deptno,10,' + ',NULL) from dept
where emp.deptno=dept.deptno) accounting,
(select decode(deptno,20,' + ',NULL) from dept
where emp.deptno=dept.deptno) research,
(select decode(deptno,30,' + ',NULL) from dept
where emp.deptno=dept.deptno) SALES,
(select decode(deptno,40,' + ',NULL) from dept
where emp.deptno=dept.deptno) OPERATIONS
from emp;
scott@8i>
EMPNO ENAME ACCOUNTING RESEARCH SALES OPERATIONS
---------- ---------- ----------- ----------- ----------- -----------
7369 SMITH +
7499 ALLEN +
7521 WARD +
7566 JONES +
7654 MARTIN +
7698 BLAKE +
7782 CLARK +
7788 SCOTT +
7839 KING +
7844 TURNER +
7876 ADAMS +
7900 JAMES +
7902 FORD +
7934 MILLER +
14 Rows selected.
Q1_24c А теперь усложним вывод отчета. На пересечении строк (сотрудников) и столбцов(названий отдела) надо выставить зарплату сотрудника в этом отделе.
Сначала создадим представление:
create or replace view my_rep1 as
select empno, ename,sal salary,
(select decode(deptno,10,'1',NULL) from dept
where emp.deptno=dept.deptno) accounting,
(select decode(deptno,20,'1',NULL) from dept
where emp.deptno=dept.deptno) research,
(select decode(deptno,30,'1',NULL) from dept
where emp.deptno=dept.deptno) SALES,
(select decode(deptno,40,'1',NULL) from dept
where emp.deptno=dept.deptno) OPERATIONS
from emp;
scott@8i> select * from my_rep1;
EMPNO ENAME SALARY A R S O
---------- ---------- ---------- - - - -
7369 SMITH 800 1
7499 ALLEN 1600 1
7521 WARD 1250 1
7566 JONES 2975 1
7654 MARTIN 1250 1
7698 BLAKE 2850 1
7782 CLARK 2450 1
7788 SCOTT 3000 1
7839 KING 5000 1
7844 TURNER 1500 1
7876 ADAMS 1100 1
7900 JAMES 950 1
7902 FORD 3000 1
7934 MILLER 1300 1
14 rows selected.
Затем на основе представления сформируем отчет:
select EMPNO,ENAME,
SALARY* nvl(to_number(accounting),NULL) accounting,
SALARY* nvl(to_number(research),NULL) research,
SALARY* nvl(to_number(sales),NULL) sales,
SALARY* nvl(to_number(operations),NULL) operations
from my_rep1;
EMPNO ENAME ACCOUNTING RESEARCH SALES OPERATIONS
---------- ---------- ---------- ---------- ---------- ----------
