Итоговый запрос (группировка)
GROUP BY позволяет создавать итоговый запрос. Обычный запрос включает в результат по одной строке для каждой строки из базы данных. Итоговый запрос, напротив, вначале группирует строки базы данных по определенному признаку, а затем включает в результаты запроса одну итоговую строку для каждой группы. Предложение GROUP BY
позволяет вести расчет итогов внутри каждой группы.
Запрос 23
Вывести список сотрудников и суммарную зарплату каждого:
SELECT Name, Lastname, Surname, Staff.T_number, SUM(Sum_pay) FROM Staff, Paies WHERE (Staff.T_number = Paies.T_number) GROUP BY Staff.T_number
Запрос 24
Вывести количество сотрудников по каждой должности:
SELECT Post, Count(T_number) FROM Staff GROUP BY Post
Изменение наименований полей
AS – ключевое слово, назначающее полю или выражению альтернативное название поля, которое будет отражено в результате запроса.
Запрос 25
Вывести список сотрудников и суммарную зарплату каждого, которую поместить в поле с названием Itog:
SELECT Name, Lastname, Surname, Staff.T_number, SUM(Sum_pay) AS Itog FROM Staff , Paies WHERE (Staff.T_number = Paies.T_number) GROUP BY Staff.T_number
Создание вычисляемых полей Запрос 26
Объединить данные фамилии, имена, отчества и названия должности в одном столбце с названием FIO_Post:
SELECT (Surname + ‘ ’ + Name + ‘ ’+ Lastname + ‘ в должности ’ + Post) AS FIO_Post FROM Staff
Использование переменных в условии
Запрос 27
Вывести список сотрудников, принятых на работу за последний месяц:
Declare @a,@b; /*объявляем локальные переменные а,b
Set @a=mont(getdate()-1); /*присваиваем переменной а значение, равное текущему месяцу -1
Set @b= mont(getdate()); /*присваиваем переменной b значение, равное текущему месяцу
SELECT Name, Lastname, Surname FROM Staff WHERE Date_Input BETWEEN @a AND @b
Подзапросы. Квантор существования
EXISTS( ) – квантор существования, понятие, заимствованное из формальной логики. Возвращает два значения: либо ИСТИНА, либо ЛОЖЬ. ИСТИНА – если условие, указанное в скобках, выполнилось и имеет ненулевой результат, ЛОЖЬ – если условие вернуло пустое множество.
Запрос 28
Вывести неповторяющийся список сотрудников, которые получали премию: SELECT DISTINCT Name, Lastname, Surname FROM Staff , Paies WHERE Staff.T_number = Paies.T_number AND EXISTS(SELECT * FROM Items_pay WHERE Items_pay.Code_pay = Paies.Code_pay AND Item_pay='премия')
Запрос 29
Вывести список сотрудников, которые ни разу не получали зарплаты:
SELECT Surname, Name, Lastname FROM Staff WHERE NOT EXISTS(SELECT * FROM Paies WHERE Staff.T_number = Paies.T_number)
Запрос 30
Вывести список сотрудников, у которых размер зарплаты не меньше
3000 руб. :
SELECT Surname, Name, Lastname FROM Staff WHERE EXISTS(SELECT * FROM Paies WHERE Staff.T_number = Paies.T_number AND Sum_pay >=3000)
Использование функций совместно с подзапросом
Запрос 31
Вывести список сотрудников и даты с размерами полученных зарплат,
которые превысили средний размер их же зарплат:
SELECT Surname, Name, Lastname, Sum_pay, Pay_Day FROM Staff INNER JOIN PAIES ON Staff.T_number = Paies.T_number WHERE Paies.Sum_pay>(SELECT AVG(Sum_pay) FROM Paies)
Запросы с итоговыми значениями (COMPUTE, COMPUTE BY)
COMPUTE позволяет в конце результатов выполнения запроса вывести некоторые итоговые вычисления по запросу. Возможны следующие виды вычислений: AVG – средняя параметра; COUNT – количество значений параметра не равных NULL; MAX и MIN – максимальные и минимальные значения параметра; SUM – сумма всех значений параметра, где <Выражение> – сам параметр. В качестве параметра
обычно выступают какие либо поля таблиц, участвующих в запросе.
Инструкция BY позволяет создать итоговые вычисления с группировкой
Запрос 32
Вывести список сотрудников и даты с размерами полученных зарплат,
общую сумму выданной зарплаты
SELECT Surname, Name, Lastname, Sum_pay, Pay_Day FROM Staff INNER JOIN Paies ON Staff.T_number = Paies.T_number COMPUTE SUM(Paies.Sum_pay)
Запрос 33
Вывести список сотрудников и суммарную зарплату каждого:
SELECT Name, Lastname, Surname, Staff.T_number FROM Staff, INNER JOIN Paies ON Staff.T_number = Paies.T_number COMPUTE SUM(Paies.Sum_pay) BY (Staff.T_number)
Создание новой таблицы на основе запроса
Запрос 34
Поместить список сотрудников с табельными номерами 4, 67, 45, 77 в новую таблицу Staff_1:
SELECT Name, Lastname, Surname, T_Number INTO Staff_1 FROM Staff WHERE T_Number IN(4, 67, 45, 77)
1. Запросы на обновление записей
Оператор UPDATE обновляет значения одного или нескольких столбцов в выбранных строках одной таблицы. В операторе указывается целевая таблица, которая должна быть модифицирована, при этом пользователь должен иметь право на обновление. Предложение WHERE
отбирает строки таблицы, подлежащие обновлению. В предложении SET
указывается, какие столбцы должны быть обновлены, и для них закладываются новые значения.
UPDATE имя таблицы SET имя столбца=новое значение
Запрос 34
Перевести всех сотрудников в статус ‘ИТР’, у которых название должности начинается с ‘главный’:
UPDATE Staff SET Type_post = ‘ИТР’ WHERE Post = ‘главный%’
Запрос 35
Изменить значение Post на ‘ нет сведений’, если значение поля является пустым:
UPDATE Staff SET Post = ‘нет сведений’ WHERE Post = ‘ ’
ИНДИВИДУАЛЬНЫЕ ЗАДАНИЯ
В базе данных, созданной на лабораторной работе №1, заполнить таблицы и создать запросы на выборку (не менее 10 запросов).
