ВУЗ:
Составители:
Рубрика:
- 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
- …
- следующая ›
- последняя »
