- •Задание 1.1. Подключиться к бд с логином / паролем studXx, где хх - номер группы, и запустить на выполнение скрипт scott_x.Sql. Что будет выполнено в результате его выполнения?
- •Задание 1.7. Занесите в таблицу assigments_n следующие данные:
- •Задание 1.16. Проверить или создать ограничения целостности, чтобы гарантировать, что каждый сотрудник в таблице emp значится в одном из отделов, перечисленных в таблице dept.
- •Задание 1.17. Определить и дать объяснение ограничения целостности в команде create table:
- •Задание 2.6. Составить команду sql для выборки данных о сотрудниках 20 и 30 отделов по алфавиту по их именам.
- •Задание 2.7. Составить команду sql для выборки имен служащих и их окладов для всех менеджеров в 10 и 20 отделах.
- •Задание 2.8. Составить команду sql для нахождения всех имен сотрудников содержащие комбинации символов "th" или "ar".
- •Задание 2.9. Составить команду sql для выдачи имен служащих, их должностей и окладов имеющих менеджера.
- •Задание № 3.7. Выберите имя, должность, оклад, категорию оклада, наименование отдела для всех сотрудников компании, кроме реализаторов. Организуйте строки по зарплате в порядке убывания.
- •Задание № 3.8. Выдайте следующую информацию о служащих, получивших доход от 2000 до 3000, а также по всем реализаторами.
- •Задание № 3.11. Модифицируйте запрос 10 так, чтобы в таблице результатов появился king, который не имеет менеджера.
- •Заполнение таблицы Услуги:
- •Создание запросов:
Задание № 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