Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
blablabla.docx
Скачиваний:
2
Добавлен:
25.04.2019
Размер:
326.2 Кб
Скачать
  1. (case job_id when 'AD_PRES' then 'a' when 'ST_MAN' then 'b' when 'IT_PROG' then 'c' when 'SA_REP' then 'd' when 'ST_CLERK' then 'e' else '0' end ) as "G"

  2. FROM employees order by job_id

  3. Лабораторная работа 5

  • Соединение таблиц с использованием эквисоединения.

  • Выполнение внешних соединений и соединений таблицы с собой

  • Включение дополнительных условий.

  1. Напишите запрос для вывода фамилии, номера отдела и названия отдела дл всех служащих.

  1. LAST_NAME

  1. DEPARTMENT_ID

  1. DEPARTMENT_NAME

  1. Whalen

  1. 10

  1. Administration

  1. Hartstein

  1. 20

  1. Marketing

  1. Fay

  1. 20

  1. Marketing

  1. Mourgos

  1. 50

  1. Shipping

  1. Rajs

  1. 50

  1. Shipping

  1. Davies

  1. 50

  1. Shipping

  1. Matos

  1. 50

  1. Shipping

  1. Vargas

  1. 50

  1. Shipping

  1. select e.last_name,e.department_id, d.department_name

  2. from employees e, departments d

  3. where e.department_id=d.department_id

  1. Выведите список всех должностей в отдел 80 (должности в списке не должны повторяться) и местоположение отдела.

  1. JOB_ID

  1. LOCATION_ID

  1. SA_MAN

  1. 2500

  1. SA_REP

  1. 2500

  1. select distinct e.job_id, d.location_id from employees e, departments d where d.department_id= '80' order by e.job_id

  1. Напишите запрос для вывода фамилий, названия отдела, идентификатора местоположения отдела и города, в котором он находится, для всех служащих, зарабатывающих комиссионные.

  1. LAST_NAME

  1. DEPARTMENT_NAME

  1. LOCATION_ID

  1. CITY

  1. Zlotkey

  1. Sales

  1. 2500

  1. Oxford

  1. Abel

  1. Sales

  1. 2500

  1. Oxford

  1. Taylor

  1. Sales

  1. 2500

  1. Oxford

  1. select e.last_name,d.DEPARTMENT_NAME,d.LOCATION_ID,l.CITY from employees e,departments d,locations l where commission_pct is not null

  1. Выведите фамилии всех служащих, содержащих букву «а» (в строчном регистре), с названиями отделов. Сохраните свою команду SQL в файле lab4_4.sql.

  1. LAST_NAME

  1. DEPARTMENT_NAME

  1. Whalen

  1. Administration

  1. Hartstein

  1. Marketing

  1. Fay

  1. Marketing

  1. Rajs

  1. Shipping

  1. Davies

  1. Shipping

  1. Matos

  1. Shipping

  1. Vargas

  1. Shipping

  1. Taylor

  1. Sales

  1. Kochhar

  1. Executive

  1. De Haan

  1. Executive

  1. select e.last_name,d.department_name from employees e,departments d where last_name like '_%a%'

  1. Напишите запрос для вывода фамилии, должности, номера отдела и названия отдела всех служащих, работающих в городе Toronto.

  1. LAST_NAME

  1. JOB_ID

  1. DEPARTMENT_ID

  1. DEPARTMENT_NAME

  1. Hartstein

  1. MK_MAN

  1. 20

  1. Marketing

  1. Fay

  1. MK_REP

  1. 20

  1. Marketing

  1. select e.last_name,e.job_id,d.department_id,d.department_name

  2. from employees e, departments d, locations

  3. where city like 'Toronto'

  1. Выведите фамилии и номера всех служащих вместе с фамилиями и номерами их менеджеров. Назовите столбцы EMPLOYEE, Emp#, Manager и Mgr#. Сохраните свою команду SQL в файле lab4_6.sql.

  1. Employee

  1. EMP#

  1. Manager

  1. Mgr#

  1. Kochhar

  1. 101

  1. King

  1. 100

  1. De Haan

  1. 102

  1. King

  1. 100

  1. Mourgos

  1. 124

  1. King

  1. 100

  1. Zlotkey

  1. 149

  1. King

  1. 100

  1. select e.last_name Employee, e.employee_id Emp#,m.last_name Manager, e.manager_id Mgr#

  2. from employees e,employees m where e.manager_id is not null

  3. and e.manager_id = m.employee_id

  1. Измените файл lab4_6.sql так, чтобы получить фамилии всех служащих, включая Кинга, который не имеет менеджера. Упорядочьте результат по возрастанию номера служащего. Сохраните изменённый запрос в текстовом файле lab4_7.sql. Выполните запрос.

  1. Employee

  1. EMP#

  1. Manager

  1. Mgr#

  1. King

  1. 100

  1. Kochhar

  1. 101

  1. King

  1. 100

  1. De Haan

  1. 102

  1. King

  1. 100

  1. Hunolds

  1. 103

  1. De Haan

  1. 102

  1. Ernst

  1. 104

  1. Hunold

  1. 103

  1. Lorentz

  1. 107

  1. Hunold

  1. 103

  1. select e.last_name Employee, e.employee_id Emp#,m. last_name Manager, e.manager_id Mgr#

  2. from employees e left join employees m on( e.manager_id = m.employee_id)

  3. order by e.employee_id

  1. Создайте запрос для вывода номера отдела, фамилии служащего и фамилий всех служащих, работающих в одном отделе с данным служащим. Дайте столбцам соответствующие имена.

  1. DEPARTMENT

  1. EMPLOYEE

  1. COLLEAGUE

  1. 20

  1. Fay

  1. Hartstein

  1. 20

  1. Hartstein

  1. Fay

  1. 50

  1. Davies

  1. Matos

  1. 50

  1. Davies

  1. Mourgos

  1. 50

  1. Davies

  1. Rajs

  1. 50

  1. Davies

  1. Vargas

  1. select e.department_id department,e.last_name employee,m.last_name colegue

  2. from employees e,employees m

  3. where e.employee_id != m.employee_id and e.department_id = m.department_id

  1. Покажите структуру таблицы JOB_GRADES. Создайте запрос для вывода фамилии, должности, названия отдела, оклада и категории (GRADE_LEVEL) всех служащих.

  1. Name

  1. Null?

  1. Type

  1. GRADE_LEVEL

  1. VARCHAR2(3)

  1. LOWEST_SAL

  1. NUMBER

  1. HIGHEST_SAL

  1. NUMBER

    1. LAST_NAME

    1. JOB_ID

    1. DEPARTMENT_NAME

    1. SALARY

    1. GRA

    1. Matos

    1. ST_CLERK

    1. Shipping

    1. 2600

    1. A

    1. Vargas

    1. ST_CLERK

    1. Shipping

    1. 2500

    1. A

    1. Lorentz

    1. IT_PROG

    1. IT

    1. 4200

    1. B

    1. Mourgos

    1. ST_MAN

    1. Shipping

    1. 5800

    1. B

    1. Rajs

    1. ST_CLERK

    1. Shipping

    1. 3500

    1. B

    1. Davies

    1. ST_CLERK

    1. Shipping

    1. 3100

    1. B

    1. Whalen

    1. AD_ASST

    1. Administration

    1. 4400

    1. B

  1. select e.last_name,e.job_id,d.department_name,e.salary,

  2. j.grade_level gra from departments d,employees e left outer join job_grades j on e.salary>=j.lowest_sal and e.salary<=j.highest_sal

  1. Создайте запрос для вывода фамилий и дат найма всех служащих, нанятых после Davies.

  1. LAST_NAME

  1. HIRE_DATE

  1. Lorentz

  1. 07-FEB-99

  1. Mourgos

  1. 16-NOV-99

  1. Matos

  1. 15_MAR-98

  1. Vargas

  1. 09-JUL-98

  1. Zlotkey

  1. 29-JAN-00

  1. Taylor

  1. 24-MAR-98

  1. Grant

  1. 24-MAY-99

  1. Fay

  1. 17-AUG-97

  1. select last_name,hire_date from employees where hire_date > (select hire_date from employees where last_name like 'Davies' )

  1. По всем служащим нанятым раньше своих менеджеров, выведите фамилии и даты найма самих служащих, а также фамилии и даты найма их менеджеров. Назовите столбцы Employee, Emp, Manager и Manager Hired.

  1. Employee

  1. Emp Hired

  1. Manager

  1. Mgr hired

  1. Whalen

  1. 17-SEP-87

  1. Kochhar

  1. 21-SEP-89

  1. Hunold

  1. 03-JAN-90

  1. De Haan

  1. 13-JAN-93

  1. Rajs

  1. 17-OCT-95

  1. Mourgos

  1. 16-NOV-99

  1. Davies

  1. 29-JAN-97

  1. Mourgos

  1. 16-NOV-99

  1. Matos

  1. 15-MAR-98

  1. Mourgos

  1. 16-NOV-99

  1. Vargas

  1. 09-JUL-98

  1. Mourgos

  1. 16-NOV-99

  1. Abel

  1. 11-MAY-96

  1. Zlotkey

  1. 29-JAN-00

  1. Taylor

  1. 24-MAR-98

  1. Zlotkey

  1. 29-JAN-00

  1. Grant

  1. 24-MAY-99

  1. Zlotkey

  1. 29-JAN-00

  1. select e.last_name Employee,e.hire_date "Emp Hired",m.last_name Manager,m.hire_date "Mgr hired"

  2. from employees e left outer join employees m on e.manager_id = m.employee_id where e.manager_id is not null and (e.hire_date) < (select hire_date from employees m where e.manager_id = m.employee_id)

  1. Выведите номера, наименования и местоположение всех отделов, а также количество работающих в них сотрудников. Обеспечьте вывод отделов в которых нет сотрудников.

    1. DEPARTMENT_ID

    1. DEPARTMENT_NAME

    1. LOCATION_ID

    1. COUNT(E.EMPLOYEE_ID)

    1. 10

    1. Administration

    1. 1700

    1. 1

    1. 20

    1. Marketing

    1. 1800

    1. 2

    1. 50

    1. Shipping

    1. 1500

    1. 5

    1. 60

    1. IT

    1. 1400

    1. 3

    1. 80

    1. Sales

    1. 2500

    1. 3

    1. 90

    1. Executive

    1. 1700

    1. 3

    1. 110

    1. Accounting

    1. 1700

    1. 2

    1. 190

    1. Contracting

    1. 1700

    1. 0

  2. Какие должности имеются в отделах Administration и Executive, а также сколько сотрудников занимают эти должности? Выведите первыми наиболее часто встречаемые должности.

  1. JOB_ID

  1. FREQUENCY

  1. AD_VP

  1. 2

  1. AD_ASST

  1. 1

  1. AD_PRES

  1. 1

  1. Покажите сотрудников, менеджеры которых имеют оклад выше $15000. выведите следующие сведения: фамилию сотрудника, фамилию менеджера, его оклад и уровень оклада (GRADE_LEVEL).

  1. LAST_NAME

  1. MANAGER

  1. SALARY

  1. GRA

  1. Kochhar

  1. King

  1. 24000

  1. E

  1. De Haan

  1. King

  1. 24000

  1. E

  1. Mourgos

  1. King

  1. 24000

  1. E

  1. Zlotkey

  1. King

  1. 24000

  1. E

  1. Hartstein

  1. King

  1. 24000

  1. E

  1. Whalen

  1. Kochhar

  1. 17000

  1. E

  1. Higgins

  1. Kochhar

  1. 17000

  1. E

  1. Hunold

  1. De Haan

  1. 17000

  1. E

  1. 12) select distinct d.DEPARTMENT_ID,d.DEPARTMENT_NAME,d.LOCATION_ID,COUNT(E.EMPLOYEE_ID)

  2. from departments d left outer join employees e on e.DEPARTMENT_id = d.DEPARTMENT_id

  3. group by d.DEPARTMENT_ID,d.DEPARTMENT_NAME,d.LOCATION_ID

  4. order by department_id

  5. 13) select j.job_id,count(h.employee_id) as "Frequency" from departments d,job_history h left outer join job_history j on h.job_id = j.job_id

  6. where d.department_name like 'Administration' or d.department_name like 'Executive'

  7. group by j.job_id

  8. order by count(h.employee_id) desc

  9. 14) select distinct e.last_name Last_Name,

  10. m.last_name Manager,

  11. m.salary as Salary,

  12. j.grade_level gra

  13. from job_grades j, employees e left outer join employees m on e.manager_id = m.employee_id

  14. where e.manager_id is not null and m.salary > 15000 and m.salary>=j.lowest_sal and m.salary<=j.highest_sal

  15. Лабораторная работа 6

  • Использование групповых функций

  • Вывод данных по группам с помощью предложения GROUP BY

  • Включение и исключение групп с помощью предложения HAVING

  1. Напишите запрос для вывода самого высокого, самого низкого и среднего оклада по всем служащим, а также суммы всех окладов. Назовите столбцы Maximum, Minimum, Average и Sum. Округлите суммы до ближайшего целого значения. Сохраните свой запрос в файле lab5_6.sql.

  1. Maximum

  1. Minimum

  1. Sum

  1. Average

  1. 24000

  1. 2500

  1. 175500

  1. 8775

  1. select round(max(salary)),round(min(salary)), round(avg(salary)),round(sum(salary)) from employees

  1. Измените запрос в lab5_6.sql. так, чтобы получить самый низкий, самый высокий и средний оклады, а также сумму окладов по каждой должности. Сохраните изменённый запрос в файле lab5_5.sql. Выполните запрос из lab5_5.sql.

  1. JOB_ID

  1. MAXIMUM

  1. MINIMUM

  1. SUM

  1. AVERAGE

  1. AC_ACCOUNT

  1. 8300

  1. 8300

  1. 8300

  1. 8300

  1. AC_MGR

  1. 12000

  1. 12000

  1. 12000

  1. 12000

  1. AD_ASST

  1. 4400

  1. 4400

  1. 4400

  1. 4400

  1. AD_PRES

  1. 24000

  1. 24000

  1. 24000

  1. 24000

  1. AD_VP

  1. 17000

  1. 17000

  1. 34000

  1. 17000

  1. select job_id,round(max(salary)),round(min(salary)), round(avg(salary)),round(sum(salary)) from employees group by job_id

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

  1. JOB_ID

  1. COUNT(*)

  1. AD_ACCOUNT

  1. 1

  1. AC_MGR

  1. 1

  1. AD_ASST

  1. 1

  1. AD_PRES

  1. 1

  1. AD_VP

  1. 2

  1. IT_PROG

  1. 3

  1. MK_MAN

  1. 1

  1. MK_REP

  1. 1

  1. SA_MAN

  1. 1

  1. SA_REP

  1. 3

  1. ST_CLERK

  1. 4

  1. ST_MAN

  1. 1

  1. select job_id,count(job_id) from employees group by job_id

  1. Получите количество служащих, имеющих подчинённых, без их перечисления. Назовите столбец Number of Managers. Используйте столбец MANAGER_ID для определения числа менеджеров.

  1. Number of Managers

  1. 8

  1. select count(distinct manager_id) “number of Managers” from employees

  1. Напишите запрос для вывода разности между самым высоким и самым низким окладами. Назовите столбец DIFFERENCE

  1. DIFFERENCE

  1. 21500

  1. select max(max_salary)-min(min_salary) difference from jobs

  1. Напишите запрос для вывода номера каждого менеджера, имеющего подчинённых, и заработную плату самого низкооплачиваемого из его подчинённых. Исключите менеджеров для которых неизвестны их менеджеры. Исключите все группы, где минимальный оклад составляет менее $6000. Отсортируйте выходные строки в порядке убывания оклада.

  1. MANAGER_ID

  1. MIN(SALARY)

  1. 102

  1. 9000

  1. 205

  1. 8300

  1. 149

  1. 7000

  1. select distinct e.manager_id,min(j.min_salary) from employees e,jobs j where e.manager_id is not null group by e.manager_id having min(j.min_salary) > 6000 order by min(j.min_salary) desc

  1. Напишите запрос для вывода названия отдела, местоположения отдела, количества служащих и среднего оклада по этому отделу. Назовите столбцы Name, Location, Number of People и Salary. Округлите средний оклад до ближайшего целого значения.

  1. Name

  1. Location

  1. Number of People

  1. Salary

  1. Accounting

  1. 1700

  1. 2

  1. 10150

  1. Administration

  1. 1700

  1. 1

  1. 4400

  1. Executive

  1. 1700

  1. 3

  1. 19333.33

  1. IT

  1. 1400

  1. 3

  1. 6400

  1. Marketing

  1. 1800

  1. 2

  1. 9500

  1. Sales

  1. 2500

  1. 3

  1. 10033.33

  1. Shipping

  1. 1500

  1. 5

  1. 3500

  1. select d.department_name “Name”,d.location_id “Location”,count(employee_id)"number of people",round(avg(e.salary)) “Salary”

  2. from employees e,departments d

  3. where e.department_id = d.department_id

  4. group by d.department_name,d.location_id

  1. Напишите запрос для вывода общего количества служащих и количества служащих, нанятых в 1995, 1996, 1997 и 1998 годах. Дайте соответствующие заголовки столбцам.

  1. TOTAL

  1. 1995

  1. 1996

  1. 1997

  1. 1998

  1. 20

  1. 1

  1. 2

  1. 2

  1. 3

  1. select count(*) total,

  2. sum(decode (to_char(hire_date, 'yyyy'),'1995',1, 0)) "1995"

  3. ,sum(decode (to_char(hire_date, 'yyyy'),'1996',1, 0)) "1996"

  4. ,sum(decode (to_char(hire_date, 'yyyy'),'1997',1, 0)) "1997"

  5. ,sum(decode (to_char(hire_date, 'yyyy'),'1998',1, 0)) "1998"

  6. from employees

  1. Напишите матричный запрос для вывода всех должностей и суммы заработной платы служащих, работающих в этой должности в отделах 20, 50, 80 и 90. Последний столбец должен содержать сумму заработной платы служащих этих отделов, занимающих каждую конкретную должность. Дайте столбцам соответствующие заголовки.

  1. Job

  1. Dept20

  1. Dept50

  1. Dept80

  1. Dept90

  1. Total

  1. AC_ACCOUNT

  1. 8300

  1. AC_MGR

  1. 12000

  1. AD_ASST

  1. 4400

  1. AD_PRES

  1. 24000

  1. 24000

  1. AD_VP

  1. 34000

  1. 34000

  1. IT_PROG

  1. 19200

  1. select job_id,

  2. sum(decode(department_id, 20, salary,'')) Dept20 ,

  3. sum(decode(department_id, 50, salary,'')) Dept50 ,

  4. sum(decode(department_id, 80, salary,'')) Dept80 ,

  5. sum(decode(department_id, 90, salary,'')) Dept90 ,

  6. sum(salary) Total

  7. from employees

  8. group by job_id

  9. Лабораторная работа 7

  • Создание подзапросов для выборки данных по неизвестным критериям

  • Использование подзапросов для выявления значений, существующих в одном наборе данных и отсутствующих в другом

  1. С оздайте запрос для вывода фамилии и даты найма каждого служащего, работающего в одном отделе с Zlotkey. Исключите Zlotkey из выходных данных.

  1. select last_name,hire_date from employees where department_id =(select department_id from employees where last_name like 'Zlotkey') and last_name not like 'Zlotkey'

  1. С оздайте запрос для вывода номеров и фамилий всех служащих, оклад которых выше среднего. Отсортируйте данные в порядке увеличения окладов.

  1. select employee_id,last_name,salary from employees group by employee_id,last_name,salary having (select avg(salary) from employees)< salary

  1. С оздайте запрос для вывода номеров и фамилий всех служащих, работающих в одном отделе с любым служащим, фамилия которого содержит букву «u». Сохраните свой запрос в тестовом файле lab6_3.sql. Выполните запрос.

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