SQL стандарт в СУБД MS SQL SERVER, ORACLE, VFP И ACCESS: манипулирование данными. Семенова И.И. - 26 стр.

UptoLike

Составители: 

25
33. Вывести список сотрудников и суммарную зарплату каждого:
в VFP, MS SQL Server, Access:
SELECT RTRIM(Name)+' '+RTRIM(Lastname)+' '+Surname,
Staff.T_number, SUM(Sum_pay) FROM Staff, Pay WHERE (Staff.T_number =
Pay.T_number) GROUP BY Staff.T_number, RTRIM(Name) + ' ' +
RTRIM(Lastname)+' '+Surname
в Oracle:
SELECT RTRIM(Name)+' '+RTRIM(Lastname)+' '+Surname,
Staff.T_number, SUM(Sum_pay) FROM ADMIN_PAY.Staff,
ADMIN_PAY.Pay WHERE (Staff.T_number = Pay.T_number) GROUP BY
Staff.T_number, RTRIM(Name) + ' ' + RTRIM(Lastname)+' '+Surname;
GROUP BY позволяет создавать итоговый запрос. Обычный запрос
включает в результат по одной строке для каждой строки из базы
данных. Итоговый запрос, напротив, вначале группирует строки базы
данных по определенному признаку, а затем
включает в результаты
запроса одну итоговую строку для каждой группы.
Предложение GROUP BY позволяет вести расчет итогов внутри
каждой группы, в данном случае расчет суммарной зарплаты каждого
сотрудника. Если бы мы не использовали GROUP BY, то в результате
получили бы сумму зарплат всех сотрудников без разбиения по
сотрудникам.
HAVING позволяет выводить не все результаты группировки,
а
только те, которые удовлетворяют указанному условию. После
конструкции HAVING можно указывать только условия на агрегатные
функции.
34. Вывести среднюю зарплату каждого сотрудника за прошедший год,
у которых она получилась больше 10000:
в VFP:
SELECT Name, Staff.T_number, AVG(Sum_pay) FROM Staff, Pay
WHERE (Staff.T_number = Pay.T_number) AND (Pay_day BETWEEN
CTOD(’01.01.2002’) AND CTOD(’31.12.2002’) ) GROUP BY
Staff.T_number, Name HAVING AVG(Sum_pay)>10000
в MS SQL Server:
SELECT Name, Staff.T_number, AVG(Sum_pay) FROM Staff, Pay
WHERE (Staff.T_number = Pay.T_number) AND (Pay_day BETWEEN '01-
JAN-2002' AND '31-DEC-2002' ) GROUP BY Staff.T_number, Name
HAVING AVG(Sum_pay)>10000
в Access:
SELECT Name, Staff.T_number, AVG(Sum_pay) FROM Staff, Pay
WHERE (Staff.T_number = Pay.T_number) AND (Pay_day BETWEEN