ВУЗ:
Составители:
Рубрика:
- 30 -
SELECT DNAME,JOB,SUM(SAL), --- функция SUM (**)
COUNT(*), --- функция COUNT(*)
AVG(SAL) --- функция AVG
FROM EMP,DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
GROUP BY DNAME, JOB;
DNAME JOB SUM(SАL) COUNT(*) АVG(SAL)
ACCOUNTING CLERC 1,800.00 1 1,300.00
ACCOUNTING MANAGER 2,450.00 1 2,450.00
ACCOUNTING PRESIDENT 5,000.00 1 5,000.00
RESEARCH ANALYST 6,000,00 2 3,000.00
RESEARCH CLERC 1,900.00 2 950.00
RESEARCH MANAGER 2,975.00 1 2,975.00
SALES CLERC 950.00 1 950.00
SALES MANAGER 2,850.00 1 2,850.00
SALES SALESMAN 5,600.00 4 1,400.00
Рассмотрим работу, которую выполняет программист при создании не-
которого вывода, если он применяет традиционную схему программирова-
ния. Сначала он получает список работников и сортирует его по номерам от-
дела и по должности. Далее суммируются число работников и средний
оклад вычисляется по номерам отделов и по должности. Наконец, название
отдела нужно
подставить для номера отдела в выводимой информации. Каж-
дая операция требует циклического чтения записей, сохранения проме-
жуточных результатов, проверки ошибок и т.д.
Напротив, непроцедурный подход SQL позволяет создавать такие отче-
ты, как предыдущий, при помощи указания исполняющей системе только
того, ЧТО необходимо сделать: исполняющая система автоматически гене-
рирует процедуру, определяя КАКИМ
ОБРАЗОМ извлечь данные таблиц.
Клауза HAVING
Ранее были определены условия поиска для индивидуальных строк при
помощи клаузы WHERE; теперь можно использовать клаузу HAVING для
задания условий поиска групп строк. Предположим, что необходимо по-
лучить ответ на запрос, подобный предыдущему, но при условии, что
каждая группа, выводимая по запросу, должна содержать
не менее двух ра-
ботников:
SELECT DNAME,JOB,SUM(SAL),COUNT(*),AVG(SAL) (***)
FROM EMP,DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
GROUP BY DNAME,JOB
HAVING COUNT(*) >= 2; --- клауза HAVING
- 30 - SELECT DNAME,JOB,SUM(SAL), --- функция SUM (**) COUNT(*), --- функция COUNT(*) AVG(SAL) --- функция AVG FROM EMP,DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO GROUP BY DNAME, JOB; DNAME JOB SUM(SАL) COUNT(*) АVG(SAL) ACCOUNTING CLERC 1,800.00 1 1,300.00 ACCOUNTING MANAGER 2,450.00 1 2,450.00 ACCOUNTING PRESIDENT 5,000.00 1 5,000.00 RESEARCH ANALYST 6,000,00 2 3,000.00 RESEARCH CLERC 1,900.00 2 950.00 RESEARCH MANAGER 2,975.00 1 2,975.00 SALES CLERC 950.00 1 950.00 SALES MANAGER 2,850.00 1 2,850.00 SALES SALESMAN 5,600.00 4 1,400.00 Рассмотрим работу, которую выполняет программист при создании не- которого вывода, если он применяет традиционную схему программирова- ния. Сначала он получает список работников и сортирует его по номерам от- дела и по должности. Далее суммируются число работников и средний оклад вычисляется по номерам отделов и по должности. Наконец, название отдела нужно подставить для номера отдела в выводимой информации. Каж- дая операция требует циклического чтения записей, сохранения проме- жуточных результатов, проверки ошибок и т.д. Напротив, непроцедурный подход SQL позволяет создавать такие отче- ты, как предыдущий, при помощи указания исполняющей системе только того, ЧТО необходимо сделать: исполняющая система автоматически гене- рирует процедуру, определяя КАКИМ ОБРАЗОМ извлечь данные таблиц. Клауза HAVING Ранее были определены условия поиска для индивидуальных строк при помощи клаузы WHERE; теперь можно использовать клаузу HAVING для задания условий поиска групп строк. Предположим, что необходимо по- лучить ответ на запрос, подобный предыдущему, но при условии, что каждая группа, выводимая по запросу, должна содержать не менее двух ра- ботников: SELECT DNAME,JOB,SUM(SAL),COUNT(*),AVG(SAL) (***) FROM EMP,DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO GROUP BY DNAME,JOB HAVING COUNT(*) >= 2; --- клауза HAVING
Страницы
- « первая
- ‹ предыдущая
- …
- 28
- 29
- 30
- 31
- 32
- …
- следующая ›
- последняя »