Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

методические указания по лабораторной работе / методичка 4 SELECT-ЗАПРОСЫ -АГРЕГИРОВАНИЕ И ГРУППОВЫЕ ФУНКЦИИ

.doc
Скачиваний:
58
Добавлен:
29.01.2014
Размер:
60.42 Кб
Скачать

Министерство образования и науки Российской Федерации

Саратовский государственный технический университет

Балаковский институт техники, технологии и управления

SQL: SELECT-ЗАПРОСЫ -АГРЕГИРОВАНИЕ И ГРУППОВЫЕ ФУНКЦИИ

Методические рекомендации к лабораторной работе по курсу

«Автоматизированные информационно-управляющие системы»

для студентов специальности 2101 по направлению Т-02

Одобрено

редакционно-издательским советом

Балаковского института техники,

технологии и управления

Саратов 2005

ЦЕЛЬ РАБОТЫ:

• научиться использовать агрегирующие и групповые функции.

• научиться выполнять упорядочение выходных полей с помощью ORDER BY.

  1. ОБЩИЕ ПОНЯТИЯ

Агрегирующие функции позволяют получать из таблицы сводную (агреги­рованную) информацию, выполняя операции над группой строк таблицы. Для задания в SELECT-запросе агрегирующих операций используются следующие ключевые слова:

  • count определяет количество строк или значений поля, выбранных по­средством запроса и не являющихся значениями;

  • sum вычисляет арифметическую сумму всех выбранных значений дан­ного поля;

  • avg вычисляет среднее значение для всех выбранных значений/данною поля;

  • мах вычисляет наибольшее из всех выбранных значений данного поля;

  • min вычисляет наименьшее из всех выбранных значений данного поля.

В SELECT-запросе агрегирующие функции используются, аналогично именам полей, при этом последние (имена полей) используются в качестве аргументов этих функций.

2. СОДЕРЖАНИЕ РАБОТЫ

Задание №1 Определить среднее значения по полям МАТЕМАТИКА, ФИЗИКА, ИНФОРМАТИКА в таблице ЛИЧНЫЕ_ДАННЫЕ.

SELECT AVG(МАТЕМАТИКА), AVG(ФИЗИКА), AVG(ИНФОРМАТИКА),

FROM ЛИЧНЫЕ_ДАННЫЕ;

Для запуска запроса нажмите кнопку Запуск на панели инструментов.

Задание №2. Подсчитать общее количество строк в каждой таблице.

Для подсчета общего количества строк следует использовать функцию COUNT со звездочкой

SELECT COUNT (*)

FROM СПИСОК;

Аналогично, определить число строк в таблице ЛИЧНЫЕ_ДАННЫЕ и ГРУППЫ.

Задание №3. Требуется найти максимальное значение оценки по физике. (аналогично, по математике и информатике )

Запрос будет выглядеть следующим образом:

SELECT MAX (ФИЗИКА)

FROM ЛИЧНЫЕ_ДАННЫЕ;

Предложение GROUP BY (группировать по) позволяет группировать запи­си в подмножества, определяемые значениями какого-либо поля, и применять агрегирующие функции уже не ко всем записям таблицы, а раздельно к каждой сформированной группе.

Задание №4. Создать запрос на вывод кода студентов таблицы ЛИЧНЫЕ_ДАННЫЕ, сгруппировав по полю ФИЗИКА.

SELECT КОД_СТУДЕНТА, ФИЗИКА

FROM ЛИЧНЫЕ_ДАННЫЕ

GROUP BY ФИЗИКА, КОД_СТУДЕНТА;

В этом случае строки вначале группируются по значениям первого столбца, а внутри этих групп — и подгруппы но значениям второго столбца. Таким обра­зом, GROUP BY не только устанавливает столбцы, по которым осуществляется группирование, но и указывает порядок разбиения столбцов на группы.

Следует иметь в виду, что в предложении GROUP BY должны быть указа­ны все выбираемые столбцы, приведенные после ключевого слова SELECT, кроме столбцов, указанных в качестве аргумента в агрегирующей функции.

При необходимости часть сформированных с помощью GROUP BY групп может быть исключена с помощью предложения HAVING.

Предложение HAVING определяет критерий, по которому группы следует включать в выходные данные, по аналогии с предложением WHERE которое осуществляет это для отдельных строк.

Задание №5. Выбрать из таблицы ГРУППЫ информацию о преподавателях, сгруппировав их по ФИО, часы которых больше 17ч.

SELECT ПРЕПОДАВАТЕЛЬ, MAX(ЧАСЫ)

FROM ГРУППЫ

GROUP BY ПРЕПОДАВАТЕЛЬ

HAVING MAX (ЧАСЫ) >17;

В условиях, задаваемом предложением HAVING, указывают только поля или выражения, которые на выходе имеют единственное значение для каждой

выводимой группы.

3. ПУСТЫЕ ЗНАЧЕНИЯ (NULL) В АГРЕГИРУЮЩИХ ФУНКЦИЯХ

Наличие пустых (NULL) значений в полях таблицы определяет особенности выполнения агрегирующих операций над данными, которые следует учитывать в SQL-запросах.

Влияние NULL-значений в функции COUNT.

Если аргумент функции COUNT является константой или столбцом без пустых значений, то функция возвращает количество строк, к которым приме­нимо определенное условие или группирование.

Если аргументом функции является столбец, содержащий пустое значение, то COUNT вернет число строк, которые не содержат пустые значения и к которым применимо определенное в COUNT условие или группироиапие.

Если бы механизм NULL не был доступен, то неприменимые и отсутствующие значения пришлось бы исключать с помощью конструкции WHERE.

Поведение функции COUNT(*) не зависит от пустых значений. Она возвратит общее количество строк в таблице.

Влияние NULL-значений и функции AVG.

Среднее значение множества чисел равно сумме чисел, деленной на число элементов множества. Однако если некоторые элементы пусты (т.е. их значения неизвестны или не существуют), деление на количество всех элементов множества приведет к неправильному результату.

AVG вычисляет среднее значение всех известных значений мно­жества элементов, то сеть эта функция подсчитывает сумму известных значений и делит ее на количество этих значений, а не на общее количество значений, среди которых могут быть, NULL-значения. Если столбец соcтоит только из пус­тых значении, то функция AVG также возвратит NULL.

4. УПОРЯДОЧЕНИЕ ВЫХОДНЫХ ПОЛКИ (ORDER BY)

Записи в таблицах реляционной базы данных не упорядочены. Однако дан­ные, выводимые в результате выполнения запроса, могут быть упорядочены. Для этого используется оператор ORDER BY, который позволяет упорядочи­вать выводимые записи в соответствии со значениями одного или нескольких выбранных столбцов. При этом можно задать возрастающую (ASC) или убы­вающую (DESC) последовательность сортировки для каждого из столбцов. По умолчанию принята возрастающая последовательность сортировки.

Задание №6. Выбрать все данные из таблицы СПИСОК с упорядочением по ФАМИЛИЯМ

SELECT *

FROM СПИСОК

ORDER BY ФАМИЛИЯ;

Задание №7. Выбрать все данные из СПИСОК с упорядочением в обратном порядке по ИМЕНАМ.

SELECT *

FROM СПИСОК

ORDER BY ИМЯ DESC;

Задание №8. Упорядочить, выводимые данные из таблицы СПИСОК по фамилиям, а внутри полученных групп - по именам.

SELECT *

FROM СПИСОК

ORDER BY ФАМИЛИЯ, ИМЯ;

Предложение ORDER BY может использоваться с GROUP BY упорядоче­ния гpvпп записей. При этом оператор ORDER BY в запросе всегда должен быть последним.

При упорядочении вместо наименований столбцов можно указывать их номера, имея, однако, в виду, что в данном случае это номера столбцов, указанные при определении выходных данных в запросе, а не номера столбцов в табли­це. Полем с номером 1 является первое поле, указанное в предложении ORDER BY - независимо от его расположения в таблице.

Задание №9. Выбрать из таблицы СПИСОК информацию о коде студента и стипендии, упорядочив значение стипендии по убыванию.

SELECT КОД, СТИПЕНДИЯ

FROM СПИСОК

ORDER BY 2 DESC;

В этом запросе выводимые записи будут упорядочены по полю СТИПЕНДИЯ.

Если в поле, которое используется для упорядочения, существуют значе­ния, то все они размещаются и конце или предшествуют всем остальным значе­ниям этого поля.

7