Лаба 1-4 [Вариант Банк] / запросы1
.docМинистерство образования Республики Беларусь
Белорусский государственный университет информатики и радиоэлектроники
Кафедра ЭВМ
Лабораторная работа №4
«Работа с реляционной базой данных на языке SQL»
Выполнил: Проверил:
Студент гр. 950502 Калабухов Е.В.
Алешкевич М.В.
Минск 2011
Запрос 1
Найти клиентов, которые никогда не снимали деньги в конкретном банкомате.
SELECT Client.*
FROM Client, Removal_of_money
WHERE (((Client.C_passport_number) NOT IN (Removal_of_money.C_passport_number)) And ((Removal_of_money.Cd_number)=[Номер банкомата]));
Запрос 2
Найти клиентов, которые обслуживались сотрудниками всех возможных филиалов.
SELECT Client.*
FROM Client, (SELECT C_passport_number FROM (SELECT C_passport_number, B_number FROM Service, Employee, Department WHERE (Employee.E_phone_number=Service.E_phone_number) AND (Employee.D_number=Department.D_number)) GROUP BY C_passport_number HAVING COUNT(B_number)=(SELECT COUNT(*) FROM Branch)) AS t2
WHERE Client.C_passport_number=t2.C_passport_number;
Запрос 3
Найти сотрудника с наибольшим числом операций с клиентами.
SELECT Employee.*
FROM (SELECT t FROM (SELECT E_phone_number AS t, (COUNT(E_phone_number)) AS A FROM Service GROUP BY E_phone_number) WHERE A=(SELECT MAX(A) FROM (SELECT E_phone_number AS t, (COUNT(E_phone_number)) AS A FROM Service GROUP BY E_phone_number))) AS numb, Employee
WHERE Employee.E_phone_number=numb.t;
Запрос 4
Для каждого филиала подсчитать процент рабочих от общего числа сотрудников и число различных клиентов, которые в этом филиале обслуживались.
SELECT B_number AS Филиал, COUNT(tel)/(SELECT COUNT(*) FROM Employee)*100 AS [% рабочих], COUNT(Pass) AS [Клиенты]
FROM (SELECT Department.B_number, Employee.E_phone_number AS tel, Service.C_passport_number AS Pass FROM Employee, Department, Service
WHERE (Employee.D_number=Department.D_number) AND (Service.E_phone_number=Employee.E_phone_number)) AS t1
GROUP BY t1.B_number;
Запрос 5
Найти сотрудников по шаблону ФИО (шаблон – маска для оператора LIKE) и отсортировать найденных сотрудников по дате последнего обслуживания клиентов.
SELECT Employee.*, posl AS Last_service
FROM Employee,
(SELECT t2.*
FROM
(SELECT MAX(S_date) AS posl, t1.E_phone_number
FROM
(SELECT Employee.*, Service.S_date
FROM Employee, Service
WHERE (E_name LIKE '*'+ФИО+'*') AND (Service.E_phone_number=Employee.E_phone_number)) AS t1
GROUP BY t1.E_phone_number) AS t2
ORDER BY posl ASC) AS t3
WHERE Employee.E_phone_number=t3.E_phone_number;