Скачиваний:
9
Добавлен:
27.11.2024
Размер:
589.19 Кб
Скачать

Итоговый запрос (группировка)

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 запросов).