Соединение таблиц с использованием эквисоединения.
Выполнение внешних соединений и соединений таблицы с собой
Включение дополнительных условий.
Напишите запрос для вывода названия отдела, местоположения отдела, количества служащих и среднего оклада по этому отделу. Назовите столбцы Name, Location, Number of People и Salary. Округлите средний оклад до ближайшего целого значения.
from employees emp left join departments dep on (emp.department_id=dep.department_id);
LAST_NAME
DEPARTMENT_ID
DEPARTMENT_NAME
Whalen
Administration
Fay
Marketing
Hartstein
Marketing
Tobias
Purchasing
Colmenares
Purchasing
Baida
Purchasing
Raphaely
Purchasing
Khoo
Purchasing
Himuro
Purchasing
Mavris
Human Resources
Feeney
Shipping
Fleaur
Shipping
Fripp
Shipping
Gates
Shipping
Gee
Shipping
Geoni
Shipping
Grant
Shipping
Jones
Shipping
Kaufling
Shipping
Ladwig
Shipping
Выведите список всех должностей в отделе 80 (должности в списке не должны повторяться) и местоположение отдела.
JOB_ID
LOCATION_ID
SA_MAN
SA_REP
select distinct emp.job_id, dep.location_id from employees emp join departments dep on (dep.department_id=emp.department_id)
where emp.department_id=80;
JOB_ID
LOCATION_ID
SA_REP
SA_MAN
Выведите фамилии всех служащих, содержащих букву «а» (в строчном регистре), с названиями отделов. Сохраните свою команду SQL в файле lab4_4.sql.
LAST_NAME
DEPARTMENT_NAME
Whalen
Administration
Hartstein
Marketing
Fay
Marketing
Rajs
Shipping
Davies
Shipping
Matos
Shipping
Vargas
Shipping
Taylor
Sales
Kochhar
Executive
De Haan
Executive
10 rows selected.
select emp.last_name, dep.department_name from employees emp left join departments dep on (dep.department_id=emp.department_id)
where emp.last_name like'%a%';
LAST_NAME
DEPARTMENT_NAME
Whalen
Administration
Fay
Marketing
Hartstein
Marketing
Colmenares
Purchasing
Tobias
Purchasing
Baida
Purchasing
Raphaely
Purchasing
Mavris
Human Resources
Walsh
Shipping
McCain
Shipping
Gates
Shipping
Cabrio
Shipping
Sarchand
Shipping
Sullivan
Shipping
Grant
null
Напишите запрос для вывода фамилии, должности, номера отдела и названия отдела всех служащих, работающих в городе Toronto.
LAST_NAME
JOB_ID
DEPARTMENT_ID
DEPARTMENT_NAME
Hartstein
MK_MAN
Marketing
Fay
MK_REP
Marketing
select emp.last_name, emp.job_id, emp.department_id, dep.department_name from employees emp left join departments dep on (dep.department_id=emp.department_id)
join locations loc on (dep.location_id=loc.location_id) where loc.city='Toronto';
LAST_NAME
JOB_ID
DEPARTMENT_ID
DEPARTMENT_NAME
Hartstein
MK_MAN
Marketing
Fay
MK_REP
Marketing
Выведите фамилии и номера всех служащих вместе с фамилиями и номерами их менеджеров. Назовите столбцы EMPLOYEE, Emp#, Manager и Mgr#. Сохраните свою команду SQL в файле lab4_6.sql.
Employee
Emp#
Manager
Mgr#
Kochhar
King
De Haan
King
Mourgos
King
Zlotkey
King
…………….
select emp.last_name EMPLOYEE, emp.employee_id "Emp#", emp2.last_name "Manager ", emp2.employee_id "Mgr#" from employees emp left join employees emp2
on (emp.manager_id=emp2.employee_id) order by emp2.employee_id;
EMPLOYEE
Emp#
Manager
Mgr#
Zlotkey
King
Cambrault
King
Errazuriz
King
Partners
King
Russell
King
Mourgos
King
Vollman
King
Kaufling
King
Fripp
King
Weiss
King
Raphaely
King
De Haan
King
Kochhar
King
Hartstein
King
Greenberg
Kochhar
Higgins
Kochhar
Baer
Kochhar
Mavris
Kochhar
Whalen
Kochhar
Hunold
De Haan
Измените файл lab4_6.sql так, чтобы получить фамилии всех служащих, включая Кинга, который не имеют менеджера. Упорядочьте результат по возрастанию номера служащего. Сохраните изменённый запрос в текстовом файле lab4_7.sql. Выполните запрос.
Employee
Emp#
Manager
Mgr#
King
Kochhar
King
De Haan
King
Hunolds
De Haan
Ernst
Hunold
Lorentz
Hunold
…………………………….
select emp.last_name EMPLOYEE, emp.employee_id "Emp#", emp2.last_name "Manager ", emp2.employee_id "Mgr#" from employees emp left join employees emp2
on (emp.manager_id=emp2.employee_id) order by "Emp#";
EMPLOYEE
Emp#
Manager
Mgr#
King
Kochhar
King
De Haan
King
Hunold
De Haan
Ernst
Hunold
Austin
Hunold
Pataballa
Hunold
Lorentz
Hunold
Greenberg
Kochhar
Faviet
Greenberg
Chen
Greenberg
Sciarra
Greenberg
Urman
Greenberg
Popp
Greenberg
Raphaely
King
Khoo
Raphaely
Создайте запрос для вывода номера отдела, фамилии служащего и фамилий всех служащих, работающих в одном отделе с данным служащим. Дайте столбцам соответствующие имена.
DEPARTMENT
EMPLOYEE
COLLEAGUE
Fay
Hartstein
Hartstein
Fay
Davies
Matos
Davies
Mourgos
Davies
Rajs
Davies
Vargas
…………………
select emp.department_id DEPARTMENT, emp.last_name EMPLOYEE, emp2.last_name COLLEAGUE from employees emp join employees emp2 on
(emp.department_id=emp2.department_id) where emp.employee_id!=emp2.employee_id order by emp.department_id;
DEPARTMENT
EMPLOYEE
COLLEAGUE
Fay
Hartstein
Hartstein
Fay
Tobias
Raphaely
Baida
Raphaely
Khoo
Raphaely
Colmenares
Khoo
Himuro
Khoo
Tobias
Khoo
Baida
Khoo
Raphaely
Khoo
Colmenares
Baida
Himuro
Baida
Tobias
Baida
Raphaely
Colmenares
Raphaely
Baida
Colmenares
Tobias
Himuro
Tobias
Baida
Tobias
Khoo
Tobias
Raphaely
Tobias
Colmenares
Himuro
Tobias
Himuro
Baida
Himuro
Khoo
Himuro
Raphaely
Himuro
Покажите структуру таблицы JOB_GRADES. Создайте запрос для вывода фамилии, должности, названия отдела, оклада и категории (GRADE_LEVEL) всех служащих.
Name
Null?
Type
GRADE_LEVEL
VARCHAR2(3)
LOWEST_SAL
NUMBER
HIGHEST_SAL
NUMBER
LAST_NAME
JOB_ID
DEPARTMENT_NAME
SALARY
GRA
Matos
ST_CLERK
Shipping
A
Vargas
ST_CLERK
Shipping
A
Lorentz
IT_PROG
IT
B
Mourgos
ST_MAN
Shipping
B
Rajs
ST_CLERK
Shipping
B
Davies
ST_CLERK
Shipping
B
Whalen
AD_ASST
Administration
B
desc JOB_GRADES;
Name Null Type
----------- ---- -----------
GRADE_LEVEL VARCHAR2(3)
LOWEST_SAL NUMBER
HIGHEST_SAL NUMBER
select em.last_name, em.job_id, dep.department_name, em.salary, gr.grade_level from employees em join departments dep on (em.department_id=dep.department_id)
join job_grades gr on (em.salary between gr.lowest_sal and gr.highest_sal);
select emp.last_name, emp.hire_date from employees emp join employees emp2 on (emp.hire_date>emp2.hire_date)
where emp2.last_name='Davies' order by hire_date;
LAST_NAME
HIRE_DATE
Tucker
30.01.05
Marlow
16.02.05
Bull
20.02.05
Everett
03.03.05
Errazuriz
10.03.05
Smith
10.03.05
Ozer
11.03.05
Hutton
19.03.05
Bernstein
24.03.05
Fripp
10.04.05
Chung
14.06.05
Austin
25.06.05
Nayer
16.07.05
Tobias
24.07.05
Dilly
13.08.05
Fay
17.08.05
Bissot
20.08.05
81 rows selected
По всем служащим, нанятым раньше своих менеджеров, выведите фамилии и даты найма самих служащих, а также фамилии и даты найма их менеджеров. Назовите столбцы Employee, Emp Hired, Manager и ManagerHired.
Employee
Emp Hired
Manager
Mgr hired
Whalen
17-SEP-87
Kochhar
21-SEP-89
Hunold
03-JAN-90
De Haan
13-JAN-93
Rajs
17-OCT-95
Mourgos
16-NOV-99
Davies
29-JAN-97
Mourgos
16-NOV-99
Matos
15-MAR-98
Mourgos
16-NOV-99
Vargas
09-JUL-98
Mourgos
16-NOV-99
Abel
11-MAY-96
Zlotkey
29-JAN-00
Taylor
24-MAR-98
Zlotkey
29-JAN-00
Grant
24-MAY-99
Zlotkey
29-JAN-00
select emp.last_name "Employee", emp.hire_date "Emp Hired", emp2.last_name "Manager", emp2.hire_date "ManagerHired" from employees emp join employees emp2 on (emp.manager_id=emp2.employee_id)
where emp.hire_date<emp2.hire_date;
Employee
Emp Hired
Manager
ManagerHired
Kaufling
01.05.03
King
17.06.03
Raphaely
07.12.02
King
17.06.03
De Haan
13.01.01
King
17.06.03
Greenberg
17.08.02
Kochhar
21.09.05
Higgins
07.06.02
Kochhar
21.09.05
Baer
07.06.02
Kochhar
21.09.05
Mavris
07.06.02
Kochhar
21.09.05
Whalen
17.09.03
Kochhar
21.09.05
Austin
25.06.05
Hunold
03.01.06
Faviet
16.08.02
Greenberg
17.08.02
Bull
20.02.05
Fripp
10.04.05
Sarchand
27.01.04
Fripp
10.04.05
Marlow
16.02.05
Fripp
10.04.05
Everett
03.03.05
Vollman
10.10.05
Bell
04.02.04
Vollman
10.10.05
Ladwig
14.07.03
Vollman
10.10.05
Feeney
23.05.06
Mourgos
16.11.07
Walsh
24.04.06
Mourgos
16.11.07
37 rows selected
Выведите номера, наименования и местоположение всех отделов, а также количество работающих в них сотрудников. Обеспечьтевыводотделов, вкоторыхнетсотрудников.
DEPARTMENT_ID
DEPARTMENT_NAME
LOCATION_ID
COUNT(E.EMPLOYEE_ID)
Administration
Marketing
Shipping
IT
Sales
Executive
Accounting
Contracting
select dep.department_id, dep.department_name, dep.location_id, count(emp.employee_id) from employees emp right join departments dep on (dep.department_id=emp.department_id)
group by dep.department_id, dep.department_name, dep.location_id order by dep.department_id;
DEPARTMENT_ID
DEPARTMENT_NAME
LOCATION_ID
COUNT(EMP.EMPLOYEE_ID)
Administration
Marketing
Purchasing
Human Resources
Shipping
IT
Public Relations
Sales
Executive
Finance
Accounting
Treasury
Corporate Tax
Control And Credit
Shareholder Services
Benefits
Manufacturing
Construction
Какие должности имеются в отделах Administration и Executive, а также сколько сотрудников занимают эти должности? Выведите первыми наиболее часто встречаемые должности.
JOB_ID
FREQUENCY
AD_VP
AD_ASST
AD_PRES
select emp.job_id, count(emp.job_id) "FREQUENCY" from employees emp join jobs on (emp.job_id=jobs.job_id) join departments dep on (dep.department_id=emp.department_id)
where dep.department_name in ('Administration', 'Executive') group by emp.job_id order by "FREQUENCY" desc;
JOB_ID
FREQUENCY
AD_VP
AD_PRES
AD_ASST
Покажите сотрудников, менеджеры которых имеют оклад выше $15000. выведите следующие сведения: фамилию сотрудника, фамилию менеджера, его оклад и уровень оклада (GRADE_LEVEL).
LAST_NAME
MANAGER
SALARY
GRADE_LEVEL
Kochhar
King
E
De Haan
King
E
Mourgos
King
E
Zlotkey
King
E
Hartstein
King
E
Whalen
Kochhar
E
Higgins
Kochhar
E
Hunold
De Haan
E
select emp.last_name,emp2.last_name MANAGER,emp2.salary, grad.grade_level from employees emp join employees emp2 on (emp.manager_id=emp2.employee_id)
join job_grades grad on (emp2.salary between grad.lowest_sal and highest_sal)
where emp2.salary>15000;
LAST_NAME
MANAGER
SALARY
GRADE_LEVEL
Hartstein
King
E
Kochhar
King
E
Zlotkey
King
E
Cambrault
King
E
Errazuriz
King
E
Partners
King
E
Russell
King
E
De Haan
King
E
Raphaely
King
E
Weiss
King
E
Fripp
King
E
Kaufling
King
E
Vollman
King
E
Mourgos
King
E
Baer
Kochhar
E
Mavris
Kochhar
E
Whalen
Kochhar
E
Greenberg
Kochhar
E
Higgins
Kochhar
E
Hunold
De Haan
E
Напишите запрос для вывода фамилий, названия отдела, идентификатора местоположения отдела и города, в котором он находится, для всех служащих, зарабатывающих комиссионные.
select emp.last_name, dep.department_name, dep.location_id, loc.city from departments dep right join employees emp on (dep.department_id=emp.department_id)left
join locations loc on (dep.location_id=loc.location_id) where emp.commission_pct>0;