Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МВ_ОБД-зф.doc
Скачиваний:
5
Добавлен:
01.05.2025
Размер:
962.05 Кб
Скачать

Завдання 4 Використання вкладених запитів

  1. Для жінок, які не працюють за сумісництвом (не входять в множину працівників-сумісників), вибрати: прізвище з ініціалами, кількість дітей, освіту, відділ, зарплату (зарплата розраховується за формулою money*Stavka).

SELECT RTRIM(Surname)+' '+LEFT(Name1,1)+'.'+LEFT(Name2,1)+'.';

as Фамилия_ИO, children as Дети, education as Образование,;

Name_otdel Отдел, money*Stavka as Зарплата;

FROM Persona p, Worker w , Post, otdel ;

WHERE p.id_man=w.id_man AND w.id_post=Post.id_post AND ;

Otdel.id_otdel=w.id_otdel AND sex=’ж’ AND w.id_man NOT IN;

(SELECT id_man FROM Worker WHERE NOT main_work)

Результат виконання команди видно на рисунку 39.

Рисунок 39 – Результат команди SELECT

Завдання 5 Запити з групуванням

  1. Для кожного відділу розрахувати кількість чоловіків та кількість жінок. Вибрати: назву відділу, стать, кількість осіб цієї статі в цьому відділі.

SELECT Name_otdel as Отдел, sex as Пол, count(*) Количество;

FROM Persona p, Worker w , otdel ;

WHERE p.id_man=w.id_man AND Otdel.id_otdel=w.id_otdel;

GROUP BY Name_otdel, sex

В цьому запиті є два рівня групування: за статтю та за відділом. Якщо поміняти місцями атрибути в розділі GROUP BY (побто написати GROUP BY sex, Name_otdel), то розрахунки залишаться тими самими, але зміниться порядок виводу записів в результаті запиту: або для кожного відділу вмводиться спочатку кількість жінок, потім – кількість чоловіків; або спочатку виводиться кількість жінок для кожного відділу, а потім – кількість чоловіків для кожного відділу). Спробуйте виконати цей запит з обома порядками групування та отримайте результат.

  1. Для кожного відділу вибрати: назву відділу, кількість працюючих робітників, середній вік працівників, мінімальну зарплатню з урахуванням ставки працівника. Включаються відділи, де є працівники з дітьми.

SELECT Name_otdel as Отдел, count(*) Количество_сотрудников,;

AVG(YEAR(DATE())-YEAR(birthday)) as Средний_Возраст,;

MIN(money*Stavka) as MIN_Зарплата;

FROM Persona p, Worker w , Post, otdel ;

WHERE p.id_man=w.id_man AND w.id_post=Post.id_post AND ;

Otdel.id_otdel=w.id_otdel AND w.id_otdel IN;

(SELECT id_otdel FROM Persona p, Worker w ;

WHERE p.id_man=w.id_man AND children>0);

GROUP BY Name_otdel

Результат виконання команди видно на рисунку 40.

Рисунок 40 – Результат команди SELECT

Завдання 6 Маніпулювання даними командами delete-sql та update-sql

1. Для працівників відділів «Адміністрація» та «Бухгалтерія», що працюють по основній роботі не на повну ставку і мають оклад менше 2000 встановити повну ставку.

UPDATE Worker SET stavka=1;

WHERE main_work and id_otdel IN ;

(SELECT id_otdel FROM Otdel WHERE Name_otdel=’ Администрация’ OR;

Name_otdel=’ Бухгалтерия’) AND id_post IN

(SELECT id_post FROM Post WHERE money<2000)

2. Звільнити (видалити з таблиці Worker) сумісників, які старші за 60 років та працюють на посадах з окладом більше 5000.

DELETE Worker;

WHERE NOT main_work and id_man IN ;

(SELECT id_man FROM Persona WHERE YEAR(DATE())-YEAR(birthday)>60); AND id_post IN (SELECT id_post FROM Post WHERE money>5000)