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

Задание № 3.11. Модифицируйте запрос 10 так, чтобы в таблице результатов появился king, который не имеет менеджера.

SQL> select e.empno empno_emp, e.ename ename_emp, ee.empno empno_mgr, ee.ename ename_mgr_netu from emp e left join emp ee on ee.empno=e.mgr;

EMPNO_EMP ENAME_EMP EMPNO_MGR ENAME_MGR_

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

7369 SMITH 7902 FORD

7499 ALLEN 7698 BLAKE

7521 WARD 7698 BLAKE

7566 JONES 7839 KING

7654 MARTIN 7698 BLAKE

7698 BLAKE 7839 KING

7782 CLARK 7839 KING

7839 KING

7844 TURNER 7698 BLAKE

7900 JAMES 7698 BLAKE

7902 FORD 7566 JONES

7934 MILLER 7782 CLARK

261

262

Задание 3.12. Найдите должности на которые назначали служащих зимой и осенью 1981 года.

SQL> select distinct job from emp

2 where to_char(hiredate,'YYYY')=1981

3 and (to_char(hiredate,'MM') between '09' and '12')

4 or (to_char(hiredate,'MM') between '01' and '02');

JOB

---------

SALESMAN

CLERK

PRESIDENT

ANALYST

Задание 3.13. Определите всех служащих, зачисленных в компанию раньше своих менеджеров.

SQL> select ee.ename, ee.hiredate, e.ename, e.hiredate

2 from emp e join emp ee on e.empno=ee.mgr

3 where e.hiredate>ee.hiredate;

ENAME HIREDATE ENAME HIREDATE

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

SMITH 17.12.80 FORD 03.12.81

ALLEN 20.02.81 BLAKE 01.05.81

WARD 22.02.81 BLAKE 01.05.81

JONES 02.04.81 KING 17.11.81

BLAKE 01.05.81 KING 17.11.81

CLARK 09.06.81 KING 17.11.81

6 rows selected.

Задание № 3.15. Найдите служащих, получающих больше всех на своей должности. Организуйте данные по убыванию значение зарплаты.

SQL> select ename, job, sal from emp where sal in (select max(sal) from emp

2 group by job) order by sal desc;

ENAME JOB SAL

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

KING PRESIDENT 5000

FORD ANALYST 3000

JONES MANAGER 2975

ALLEN SALESMAN 1600

MILLER CLERK 1300

Задание № 3.16. Найдите служащих, получающих меньше всех на своей должности. Отсортируйте данные по увеличению значения зарплаты.

SQL> select ename, job, sal from emp where sal in (select min(sal) from emp

2 group by job) order by sal;

ENAME JOB SAL

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

SMITH CLERK 800

MARTIN SALESMAN 1250

WARD SALESMAN 1250

CLARK MANAGER 2450

FORD ANALYST 3000

KING PRESIDENT 5000

6 rows selected.

Задание № 3.17. Определите, кто из служащих в каждом из отделов был зачислен на работу последним по времени. Результаты упорядочите по дате зачисления

SQL> select ename, deptno, hiredate from emp

2 where hiredate in (select max(hiredate) from emp group by deptno)

3 order by hiredate;

ENAME DEPTNO HIREDATE

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

FORD 20 03.12.81

JAMES 30 03.12.81

MILLER 10 23.01.82

Задание № 3.18. Выдайте следующую информацию о служащем, который получает больше средней зарплаты в отделе. Отсортируйте данные по номерам отделов.

SQL> select ename, job, sal, hiredate, deptno from emp

where sal > any (select avg(sal) from emp

group by deptno)

order by deptno;

ENAME JOB SAL HIREDATE DEPTNO

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

CLARK MANAGER 2450 09.06.81 10

KING PRESIDENT 5000 17.11.81 10

FORD ANALYST 3000 03.12.81 20

JONES MANAGER 2975 02.04.81 20

ALLEN SALESMAN 1600 20.02.81 30

BLAKE MANAGER 2850 01.05.81 30

6 rows selected.

Задание 3.19. Найдите все отделы, не имеющие служащих используя под запрос.

SQL> select * from dept where deptno not in (select deptno from emp);

no rows selected

Задание № 3.20. Найти отдел, в котором суммарный годовой доход сотрудников максимальный.

SQL> select deptno, sum(sal*12) from emp group by deptno having sum(sal*12) = (select max(sum(sal*12)) from emp group by deptno );

DEPTNO SUM(SAL*12)

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

30 112800

Задание № 3.21. Кто входит в тройку самых высокооплачиваемых в компании? Найдите их имена и оклад.

SQL> select ename, sal from emp where rownum<=3 order by sal desc;

ENAME SAL

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

ALLEN 1600

WARD 1250

SMITH 800

Задание № 3.22. Подсчитать количество сотрудников, которые были зачислены в компанию каждый год.

SQL> select count(*) count, to_char(hiredate, 'YYYY') date_zar

from emp group by to_char(hiredate, 'YYYY') order by count;

COUNT DATE

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

1 1980

1 1982

2

10 1981

Задание № 3.23. Напишите запрос, печатающий звездочку напротив служащего, зачисленного на работу в последнее время. Укажите его имя, дату зачисления на работу, а также столбец ЗАРАХОВАНИЙ_ОСТАННИМ, в который будет помещена эта звездочка.

SQL> select ename, hiredate, decode((select max(hiredate) from emp),

2 hiredate, '*') last from emp;

ENAME HIREDATE L

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

SMITH 17.12.80

ALLEN 20.02.81

WARD 22.02.81

JONES 02.04.81

MARTIN 28.09.81

BLAKE 01.05.81

CLARK 09.06.81

KING 17.11.81

TURNER 08.09.81

JAMES 03.12.81

FORD 03.12.81

ENAME HIREDATE L

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

MILLER 23.01.82 *

14 rows selected.

Задание № 4. Создаем таблицу Клиенты:

SQL> create table klient

2 (id_klient number(4) primary key,

3 name_kl varchar2(20), vid_deyat varchar2(20),

4 addres_kl varchar2(30), telephone varchar2(13));

Table created.

Создаем таблицу Услуги:

SQL> create table uslugi

2 (id_usl number(4) primary key,

3 name_usl varchar(20), opis varchar(40));

Table created.

Создаем таблицу Сделки:

SQL> create table sdelki

2 (id_sael number(4) primary key,

3 id_klient number(4) not null references klient(id_klient),

4 id_usl number(4) not null references uslugi(id_usl),

5 summa number(6), commis number(4), opisan number(40));

Table created.

Развитие постановки задания:

Удаление колонок с таблицы:

SQL> alter table sdelki

2 drop (summa, commis);

Table altered.

Добавление колоки в таблицу:

SQL> alter table uslugi

2 add ("summa" number(4));

Table altered.

SQL> alter table uslugi

2 add ("commis" number(4));

Table altered.

Создание таблицы Скидки:

SQL> create table skidki

2 (id_skidki number(4) primary key,

3 vid_skidki varchar2(20));

Table created.

Добавление внешнего ключа:

SQL> alter table uslugi

2 add (constraint usl_skid foreign key (id_skidki)

3 references skidki(id_skidki));

Table altered.

Заполняем созданные таблицы данными:

Заполнение таблицы Клиенты:

SQL> insert into klient values

2 (1, 'galchenko', 'student', 'celenogr', '095-45-71-132');

1 row created.

Commit complete.

SQL> insert into klient values

2 (2, 'petrenko', 'manager', 'sumskaya', '066-45-31-432');

1 row created.

Commit complete.

SQL> insert into klient values

2 (3, 'ivanov', 'voditel', 'lenina', '099-15-51-335');

1 row created.

Commit complete.

SQL> select * from klient;

ID_KLIENT NAME_KL VID_DEYAT ADDRES_KL TELEPHONE

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

1 galchenko student celenogr 095-45-71-132

2 petrenko manager sumskaya 066-45-31-432

3 ivanov voditel lenina 099-15-51-335

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]